2015-02-27 5 views
5

Sto lavorando con Android, socketio (nkzawa). Quando mi collego la prima volta funziona perfettamente. Ma se disconnetto e provo a fare "un'altra connessione", EVENT_CONNECT non viene mai chiamato.Android Nkzawa SocketIO disconnettere e creare una nuova connessione

Qui ho messo alcuni frammenti

Quando collego

All'interno BeforeActivity

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

Poi ho classe SocketManager che si estende dal GenericSocket dove ho una variabile (SocketManager) istanza di Singleton

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

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

    socketManager.listener = (listener)listener; 

    return instance; 
} 

e l'iniziale zione della presa viene fatto in GenericSocket classe dove ho una variabile di tipo (com.github.nkzawa.socketio.client.Socket) tcalled presa

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 
} 

e quando stacco

Il sezionatore è come questa classe SocketManager dentro ho questo metodo

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

Grazie

+0

Il codice di implementazione della presa di disconnessione sarebbe molto utile – jimmy0251

+0

@ jimmy0251 Ho aggiornato, spero che questo sia un po 'più chiaro. Grazie – agusgambina

+1

Il tuo codice sembra buono. Prova a mettere this.socket.off() prima di socket.disconnect(). Ho avuto un problema in cui il server manteneva attiva la mia connessione anche dopo che disconnect(), socket.off() ha funzionato per me. – jimmy0251

risposta

5

il codice sembra a posto. Prova a mettere this.socket.off() prima di socket.disconnect(). Ho avuto un problema in cui il server manteneva attiva la mia connessione anche dopo che disconnect(), socket.off() ha funzionato per me.

+1

grazie per la tua risposta, come ti ho detto ho bisogno di farlo e aggiornare anche la versione del socket nkzawa da 0.2.1 a 0.4.0. grazie – agusgambina

+0

So che è un po 'tardi, ma potrebbe aiutare qualcuno -> L'ho risolto con una combinazione di questa risposta e l'aggiornamento di [lib a 1.0.0] (https://github.com/socketio/socket.io -client-java). Saluti! – Vucko