Browse Source

onDisconnect issue fixed

master
Nikita 13 years ago
parent
commit
500fc7becc
  1. 3
      src/main/java/com/corundumstudio/socketio/PacketListener.java
  2. 1
      src/main/java/com/corundumstudio/socketio/namespace/Namespace.java
  3. 16
      src/main/java/com/corundumstudio/socketio/transport/BaseClient.java
  4. 4
      src/main/java/com/corundumstudio/socketio/transport/NamespaceClient.java
  5. 8
      src/main/java/com/corundumstudio/socketio/transport/WebSocketTransport.java

3
src/main/java/com/corundumstudio/socketio/PacketListener.java

@ -72,8 +72,7 @@ public class PacketListener {
}
case DISCONNECT:
Namespace namespace = namespacesHub.get(packet.getEndpoint());
namespace.onDisconnect(client);
((NamespaceClient)client).onDisconnect();
break;
}
}

1
src/main/java/com/corundumstudio/socketio/namespace/Namespace.java

@ -123,7 +123,6 @@ public class Namespace implements SocketIONamespace {
listener.onDisconnect(client);
}
clients.remove(client);
((NamespaceClient)client).onDisconnect();
}
@Override

16
src/main/java/com/corundumstudio/socketio/transport/BaseClient.java

@ -32,6 +32,14 @@ import com.corundumstudio.socketio.namespace.Namespace;
import com.corundumstudio.socketio.parser.Packet;
import com.corundumstudio.socketio.parser.PacketType;
/**
* Base class for main client.
*
* Each main client can have multiple namespace clients,
* when all namespace clients has disconnected then main client disconnects too.
*
*
*/
public abstract class BaseClient {
private final ConcurrentMap<Namespace, SocketIOClient> namespaceClients = new ConcurrentHashMap<Namespace, SocketIOClient>();
@ -72,6 +80,12 @@ public abstract class BaseClient {
return namespaceClients.values();
}
public void onChannelDisconnect() {
for (SocketIOClient client : getAllClients()) {
((NamespaceClient) client).onDisconnect();
}
}
public AckManager getAckManager() {
return ackManager;
}
@ -88,7 +102,7 @@ public abstract class BaseClient {
ChannelFuture future = send(new Packet(PacketType.DISCONNECT));
future.addListener(ChannelFutureListener.CLOSE);
disconnectable.onDisconnect(this);
onChannelDisconnect();
}
}

4
src/main/java/com/corundumstudio/socketio/transport/NamespaceClient.java

@ -102,13 +102,15 @@ public class NamespaceClient implements SocketIOClient {
}
public void onDisconnect() {
namespace.onDisconnect(this);
baseClient.removeClient(this);
}
@Override
public void disconnect() {
send(new Packet(PacketType.DISCONNECT));
namespace.onDisconnect(this);
// TODO disconnect on channel close
onDisconnect();
}
@Override

8
src/main/java/com/corundumstudio/socketio/transport/WebSocketTransport.java

@ -61,7 +61,7 @@ public class WebSocketTransport extends SimpleChannelUpstreamHandler implements
private final AckManager ackManager;
private final HeartbeatHandler heartbeatHandler;
private final AuthorizeHandler authorizeHandler;
private final DisconnectableHub disconnectable;
private final DisconnectableHub disconnectableHub;
private final String path;
@ -70,7 +70,7 @@ public class WebSocketTransport extends SimpleChannelUpstreamHandler implements
this.path = connectPath + "websocket";
this.authorizeHandler = authorizeHandler;
this.ackManager = ackManager;
this.disconnectable = disconnectable;
this.disconnectableHub = disconnectable;
this.heartbeatHandler = heartbeatHandler;
}
@ -95,7 +95,7 @@ public class WebSocketTransport extends SimpleChannelUpstreamHandler implements
throws Exception {
WebSocketClient client = channelId2Client.get(ctx.getChannel().getId());
if (client != null) {
disconnectable.onDisconnect(client);
client.onChannelDisconnect();
} else {
super.channelDisconnected(ctx, e);
}
@ -143,7 +143,7 @@ public class WebSocketTransport extends SimpleChannelUpstreamHandler implements
return;
}
WebSocketClient client = new WebSocketClient(channel, ackManager, disconnectable, sessionId);
WebSocketClient client = new WebSocketClient(channel, ackManager, disconnectableHub, sessionId);
channelId2Client.put(channel.getId(), client);
sessionId2Client.put(sessionId, client);

Loading…
Cancel
Save