使用Google Channel API关闭频道

时间:2014-09-29 07:05:06

标签: java sockets gwt channel-api

我已经使用GWT和Java编写了Google Channel API的客户端/服务器实现。我已经在互联网上以及渠道API中随处可见,了解如何在完成使用后关闭频道(每个用户一次只能打开一个频道,所以这对我来说非常重要app),但到目前为止我一无所获。

是否有人知道如何向Google发送关闭套接字请求以关闭某个频道的套接字?

1 个答案:

答案 0 :(得分:0)

显然,互联网上没有人想出(或需要弄清楚)如何做到这一点,所以我只是盯着API概述足够长的时间,直到它来到我身边。秘密在API的Javascript部分,当你创建"套接字"变量。 Javascript API声明套接字var也有一个" close()"功能。考虑到我用Java编写了我的实现,这对我来说有点棘手,因为我不得不抹去我对JSNI的了解,而socket var只存在于我的#34; join"调用

为了解决这个问题,我在socket变量中创建了一个全局变量,在本例中称为" globalSocket"然后又编写了一个单独的JSNI关闭函数,它只调用了" close()"在全局套接字变量上。之后就像一个魅力。

private native void join(String channelKey) /*-{
    var channel = new $wnd.goog.appengine.Channel(channelKey);
    var socket = channel.open();
    $wnd.globalSocket = socket;
    var self = this;

    socket.onmessage = function(evt) {
        var data = evt.data;
        self.@com.divint.roo.client.Channel::onMessage(Ljava/lang/String;)(data);
    };

    socket.onopen = function() {
        self.@com.divint.roo.client.Channel::onOpen()();
    };

    socket.onerror = function(error) {
        self.@com.divint.roo.client.Channel::onError(ILjava/lang/String;)(error.code, error.description);
    };

    socket.onclose = function() {
        self.@com.divint.roo.client.Channel::onClose()();
    };

}-*/;

private native void close() /*-{
    $wnd.globalSocket.close();
}-*/;