2011-09-02 79 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