2014-09-29 63 views
0

我已经使用GWT和Java编写了Google Channel API的客户端/服务器实现。我已经在互联网上以及通道API中查找了各个方面,以了解在完成使用时如何关闭频道(每个用户一次只能打开一个频道,所以这对我的应用程序非常重要) ,但到目前为止,我什么也没找到。使用Google Channel API关闭频道

有谁知道如何发送关闭套接字请求到谷歌关闭某个频道的套接字?

回答

0

显然,互联网上没有人想出了(或需要弄清楚)如何做到这一点,所以我只是盯着API概述,直到找到我。秘密是在API的Javascript部分,当你创建“套接字”变量时。 Javascript API指出套接字变量也有一个“close()”函数。考虑到我在Java中编写了我的实现,这对我来说有点棘手,因为我必须摒弃我对JSNI的了解,并且套接字变量只在我的“加入”调用期间存在。

为了解决这个问题,我在套接字变量之外创建了一个全局变量,在本例中叫做“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; 
     [email protected]::onMessage(Ljava/lang/String;)(data); 
    }; 

    socket.onopen = function() { 
     [email protected]::onOpen()(); 
    }; 

    socket.onerror = function(error) { 
     [email protected]::onError(ILjava/lang/String;)(error.code, error.description); 
    }; 

    socket.onclose = function() { 
     [email protected]::onClose()(); 
    }; 

}-*/; 

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