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
Il codice di implementazione della presa di disconnessione sarebbe molto utile – jimmy0251
@ jimmy0251 Ho aggiornato, spero che questo sia un po 'più chiaro. Grazie – agusgambina
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