2015-02-27 18 views
5

Android, socketio (nkzawa) ile çalışıyorum. İlk kez bağlandığımda mükemmel çalışıyor. Ama sonra keser ve "başka bir bağlantı" yapmaya çalışırsanız EVENT_CONNECT asla çağrılmaz. İşteAndroid Nkzawa SocketIO bağlantıyı kes ve yeni bağlantı oluştur

ben bağladığınızda bazı snippet'ler

koymak

İçinde BeforeActivity

@Override 
public void onResume() { 
    super.onResume(); 
    socketManager = (socketManager) socketManager.Instance(this, UrlHelper.URL.replaceAll("\\{userId\\}", userId.toString()); 
} 

Sonra ben bir singleton için (SocketManager) örneği bir değişken GenericSocket uzanan sınıf SocketManager var

public static SocketManager Instance(SocketListener listener, String url) { 

    if (instance == null) { 
    instance = new socketManager(url); 
    instance.init(); 
    } 

    socketManager.listener = (listener)listener; 

    return instance; 
} 

ve başlangıç soketin leştirilmesi I tipi (com.github.nkzawa.socketio.client.Socket) bir değişken sahip olduğu sınıf GenericSocket yapılan priz

protected void init() { 
    try { 
     socket = IO.socket(url); 
     socket 
     .on(com.github.nkzawa.socketio.client.Socket.EVENT_CONNECT, new Emitter.Listener() { 

      @Override 
      public void call(Object... args) { 
       onConnect(); 
       JSONObject connectionMessage = getConnectionMessage(); 
       socket.emit(MESSAGE_JOIN, connectionMessage); 
      } 

     }).on(MESSAGE, new Emitter.Listener() { 
      @Override 
      public void call(Object... args) { 
       Object data = args[0]; 
       if (data instanceof JSONObject) { 
        JSONObject json = (JSONObject) data; 
        try { 
         onMessage(json.get("content").toString()); 
        } catch (Exception ex) { 
         Log.e(TAG, ex.getMessage()); 
        } 
       } else { 
        onMessage(data.toString()); 
       } 

      } 
     }).on(Constant.CONNECTION, new Emitter.Listener() { 
      @Override 
      public void call(Object... args) { 
       Object data = args[0]; 
       if (data instanceof JSONObject) { 
        JSONObject json = (JSONObject) data; 
        try { 
         onMessage(json.get("content").toString()); 
        } 
        catch(Exception ex) { 
         Log.e(TAG, ex.getMessage()); 
        } 
       } else { 
        onMessage(data.toString()); 
       } 

      } 
     }).on(com.github.nkzawa.socketio.client.Socket.EVENT_DISCONNECT, new Emitter.Listener() { 

      @Override 
      public void call(Object... args) { 
       onDisconnect(); 
      } 
     }); 
     socket.connect(); 
    }catch (Exception e){ 
     Log.i("Socket connection error: ", e.getMessage()); 
    } 
    //end socket connection 
} 

tcalled ve

kesin zaman kesme aracıdır olan Bu iç SocketManager sınıfı gibi ben

public void disconnect() { 
    this.socket.disconnect(); 
    this.socket=null; 
    SocketManager.instance = null; 
} 

teşekkür ederiz

+0

Bağlantı kesme soketi uygulamanızın kodu çok yararlı olabilir – jimmy0251

+0

@ jimmy0251 Güncelleme, Umarım bu biraz daha açık. Teşekkür ederiz – agusgambina

+1

Kodunuz iyi görünüyor. Socket.disconnect() 'den this.socket.off() öğesini koymayı deneyin. Bağlantı kesme(), socket.off() benim için çalıştıktan sonra bile sunucumun bağlantımı canlı tuttuğu bir sorun yaşadım. – jimmy0251

cevap

5

Kodunuz iyi görünüyor bu yöntemi var. Socket.disconnect() 'den this.socket.off() öğesini koymayı deneyin. Bağlantı kesme(), socket.off() benim için çalıştıktan sonra bile sunucumun bağlantımı canlı tuttuğu bir sorun yaşadım.

+1

cevabınız için teşekkür ederim, size bunu yapmam gerektiğini ve aynı zamanda nkzawa soket versiyonunu 0.2.1'den 0.4.0'a güncellemem gerektiğini söylediğim gibi. teşekkür ederim – agusgambina

+0

Biraz geç olduğunu biliyorum, ama birisine yardımcı olabilir -> Ben bu cevap bir kombinasyonu tarafından çözüldü ve [lib için 1.0.0] (https://github.com/socketio/socket.io güncellenmesi -istemci-java). Şerefe! – Vucko

İlgili konular