GWT を使用した appengine チャネル API の経験がある人はいますか? 私はgooglecodeで提供されている簡単な「ハウツー」に従っています。私の質問は、GWT で channelKey (以下のコードのトークン変数) を取得するにはどうすればよいですか? セッションごとにサーバーから channelKey を取得するには、RPC を使用する必要があると想定しています。これは正しいです?channelId だけを使用できることを望んでいましたが、そうではないようです。また、最高の回答は、dance-dance-robot の例以外の GWT +channel api の実際のサンプル コードを提供できる人に授与されます。サンプル コードやチュートリアルを一生懸命探しましたが、何も見つかりませんでした。
次のコードが実行され、onError メッセージが表示されます。「トークン」は、サーバー コードによって生成される channelKey であると想定しています。これは正しいです?
GWT クライアント コード:
ChannelFactory.createChannel(token, new ChannelCreatedCallback() {
@Override
public void onChannelCreated(Channel channel) {
channel.open(new SocketListener() {
@Override
public void onOpen() {
Window.alert("Channel opened!");
}
@Override
public void onMessage(String message) {
Window.alert("Received: " + message);
}
@Override
public void onError(SocketError error) {
Window.alert("Error: " + error.getDescription());
}
@Override
public void onClose() {
Window.alert("Channel closed!");
}
});
} });
Appengine サーバー コード:
import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.appengine.api.channel.ChannelMessage;
import com.google.appengine.api.channel.ChannelServiceFactory;
@SuppressWarnings("serial")
public class SendChannelMsg extends HttpServlet {
private final String CHANNELNAME = "test";
private static String channelKey;
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
if (channelKey == null) {
channelKey = ChannelServiceFactory.getChannelService()
.createChannel(CHANNELNAME);
}
String ret = "";
String command = req.getParameter("command");
if (command.equals("join")) {
ret = channelKey;
} else if (command.equals("send")) {
try{
ChannelServiceFactory.getChannelService()
.sendMessage(
new ChannelMessage(channelKey, req
.getParameter("message")));
} catch(Exception e){
resp.getWriter().println("error "+e.getMessage());
}
}
resp.getOutputStream().write(ret.getBytes());
}
}