Android Nkzawa SocketIO desconectar y hacer una nueva conexión
Estoy trabajando con android, socketio (nkzawa). Cuando me conecto la primera vez funciona perfectamente. Pero entonces si me desconecto e intento hacer "otra conexión" el EVENT_CONNECT nunca se llama.
Aquí pongo algunos fragmentos
- Descartar error de transporte al utilizar Nodejs + SocketIO
- Aplicación de chat utilizando socket.io
- Cliente Socket.io android java que recibe mensajes y envía ejemplo de archivo
- Koush AndroidAsync ejemplo de socket
- Cómo manejar eventos de socket como servicio de fondo en Android?
Cuando me conecto
Dentro de BeforeActivity
@Override public void onResume() { super.onResume(); socketManager = (socketManager) socketManager.Instance(this, UrlHelper.URL.replaceAll("\\{userId\\}", userId.toString()); }
Entonces tengo clase SocketManager que se extiende desde GenericSocket donde tengo una variable (SocketManager) instancia de un singleton
public static SocketManager Instance(SocketListener listener, String url) { if (instance == null) { instance = new socketManager(url); instance.init(); } socketManager.listener = (listener)listener; return instance; }
Y la inicialización del socket se realiza en la clase GenericSocket donde tengo una variable de tipo (com.github.nkzawa.socketio.client.Socket) tcalled socket
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 }
Y cuando desconecto
La desconexión es como esto dentro de la clase SocketManager que tengo este método
public void disconnect() { this.socket.disconnect(); this.socket=null; SocketManager.instance = null; }
Gracias
- ¿El método IOAcknowledge no funciona para SocketIO en Android?
- WebSockets para Android en la aplicación Phonegap con Node.js / Socket.IO server & client
- Conectando clientes de escritorio y móviles a Django y Sails MVC webframeworks
- Comunicarse con socket.io desde android
- Aplicación de Android Conexión al servidor Node.js mediante Socket.io
- La mejor manera de implementar Socket.io en android
- Android navegador y socket io
- Android: usando el cliente java socket.io de Gottox en la aplicación android
Tu código parece estar bien. Intente poner this.socket.off () antes de socket.disconnect (). Tenía un problema donde el servidor estaba manteniendo mi conexión viva incluso después de la desconexión (), socket.off () trabajó para mí.