GWT и API канала - PullRequest
       20

GWT и API канала

1 голос
/ 03 сентября 2011

Кто-нибудь имеет опыт работы с appengine channel api с GWT?Я следую КРАТКОМУ руководству по использованию, предоставленному googlecode .Мой вопрос, как мы можем получить channelKey (переменная токена в коде ниже) в GWT?Я предполагаю, что вы должны использовать RPC для получения channelKey от сервера для каждой сессии.Это правильно?Я надеялся, что вы можете просто использовать channelId, но это не так.Также лучшим ответом будет вознаграждение любому, кто может предоставить рабочий пример кода для GWT + канала api, кроме примера dance-dance-robot.Я долго и упорно для образца кода или учебника и ничего не нашел.

1004 * Следующий код выполняется и отображает сообщение 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());
    }

}

1 Ответ

0 голосов
/ 03 сентября 2011

Нет. Токен в этом случае генерируется вами и должен быть уникальным идентификатором этого канала. Вы также несете ответственность за распространение этого токена между пользователями.

Например, если вы создаете комнату чата, вам нужно создать токен, связанный с комнатой чата, и уведомить пользователей о комнате чата (которая имеет связанный токен).

...