2011-09-02 56 views
1

任何人都有与GWT的appengine通道API的经验?我一直在遵循googlecode提供的简介“操作方法”。我的问题是我们如何在GWT中获得channelKey(下面的代码中的标记变量)?我假设你必须使用RPC从服务器获取每个会话的channelKey。它是否正确?我希望你可以使用channelId,但似乎并非如此。同样,最佳答案将授予任何能为GWT +频道api提供工作示例代码的人,以及舞蹈跳舞机器人示例。我已经看了很长时间,很难找到示例代码或教程,并且什么也没找到GWT和频道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!"); 
    } 
}); 

} });

应用服务引擎服务器代码:

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()); 
    } 

}

回答

0

号令牌在这种情况下是由你产生并应该是这个信道的唯一标识符。您还负责在用户之间共享此令牌。

例如,如果您要创建聊天室,则必须创建与聊天室相关的令牌并通知用户聊天室(具有相关令牌)。

+0

我只是在我的问题中添加了一些服务器端代码。所以你说我只需要在客户端代码中传递“CHANNELNAME”(在本例中为“test”)作为标记? – Patrick