2014-09-29 44 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(); 
}-*/;