2014-09-29 2 views
0

GWT와 Java를 사용하여 Google 채널 API의 클라이언트/서버 구현을 작성했습니다. 나는 채널 API를 사용하여 인터넷 사용을 마쳤을 때 채널을 닫는 방법을 찾았습니다 (각 사용자는 한 번에 하나의 채널 만 열 수 있기 때문에 이것은 내 앱에서 매우 중요합니다). ,하지만 지금까지 나는 아무것도 발견하지 못했습니다.Google 채널 API로 마감 채널

누구든지 특정 채널의 소켓을 닫기 위해 Google에 닫기 소켓 요청을 보내는 방법을 알고 있습니까?

답변

0

분명히 인터넷에서 아무도이 작업을 수행하는 방법을 알아 내지 못 했으므로 API 개요를 오랫동안 보았습니다. 비밀은 "socket"변수를 만들 때 API의 Javascript 부분에 있습니다. Javascript API는 소켓 var도 "close()"함수를 가지고 있다고 말합니다. 내 구현을 자바로 작성한 것을 감안할 때, JSNI에 대한 지식이 부족해져서 "bind"호출 중에 소켓 var가 존재하기 때문에 다소 힘들었다.

이 문제를 해결하기 위해 "globalSocket"이라는 소켓 변수에서 전역 변수를 생성 한 다음 나중에 글로벌 소켓 변수에서 "close()"라고하는 별도의 JSNI 닫기 함수를 작성했습니다. 그 후에 매력처럼 작동했습니다.

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(); 
}-*/;