Browse Source

DisconnectListener bug in XHR transport. Issue #45

master
Nikita 12 years ago
parent
commit
7e5ca9378f
  1. 4
      src/main/java/com/corundumstudio/socketio/MessageHandler.java
  2. 4
      src/main/java/com/corundumstudio/socketio/SocketIOEncoder.java
  3. 4
      src/main/java/com/corundumstudio/socketio/messages/XHROutMessage.java
  4. 16
      src/main/java/com/corundumstudio/socketio/transport/XHRPollingTransport.java

4
src/main/java/com/corundumstudio/socketio/MessageHandler.java

@ -25,7 +25,7 @@ import com.corundumstudio.socketio.messages.WebsocketErrorMessage;
import com.corundumstudio.socketio.messages.XHRErrorMessage;
import com.corundumstudio.socketio.messages.XHRNewChannelMessage;
import com.corundumstudio.socketio.messages.XHRPacketMessage;
import com.corundumstudio.socketio.messages.XHRPostMessage;
import com.corundumstudio.socketio.messages.XHROutMessage;
public interface MessageHandler {
@ -33,7 +33,7 @@ public interface MessageHandler {
void handle(XHRPacketMessage xhrPacketMessage, Channel channel) throws IOException;
void handle(XHRPostMessage xhrPostMessage, Channel channel);
void handle(XHROutMessage xhrPostMessage, Channel channel);
void handle(AuthorizeMessage authorizeMessage, Channel channel) throws IOException;

4
src/main/java/com/corundumstudio/socketio/SocketIOEncoder.java

@ -54,7 +54,7 @@ import com.corundumstudio.socketio.messages.WebsocketErrorMessage;
import com.corundumstudio.socketio.messages.XHRErrorMessage;
import com.corundumstudio.socketio.messages.XHRNewChannelMessage;
import com.corundumstudio.socketio.messages.XHRPacketMessage;
import com.corundumstudio.socketio.messages.XHRPostMessage;
import com.corundumstudio.socketio.messages.XHROutMessage;
import com.corundumstudio.socketio.parser.Encoder;
import com.corundumstudio.socketio.parser.Packet;
@ -174,7 +174,7 @@ public class SocketIOEncoder extends SimpleChannelDownstreamHandler implements M
}
@Override
public void handle(XHRPostMessage xhrPostMessage, Channel channel) {
public void handle(XHROutMessage xhrPostMessage, Channel channel) {
sendMessage(xhrPostMessage.getOrigin(), null, channel, ChannelBuffers.EMPTY_BUFFER);
}

4
src/main/java/com/corundumstudio/socketio/messages/XHRPostMessage.java → src/main/java/com/corundumstudio/socketio/messages/XHROutMessage.java

@ -19,11 +19,11 @@ import org.jboss.netty.channel.Channel;
import com.corundumstudio.socketio.MessageHandler;
public class XHRPostMessage extends BaseMessage {
public class XHROutMessage extends BaseMessage {
private final String origin;
public XHRPostMessage(String origin) {
public XHROutMessage(String origin) {
this.origin = origin;
}

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

@ -44,7 +44,7 @@ import com.corundumstudio.socketio.ack.AckManager;
import com.corundumstudio.socketio.handler.AuthorizeHandler;
import com.corundumstudio.socketio.messages.PacketsMessage;
import com.corundumstudio.socketio.messages.XHRErrorMessage;
import com.corundumstudio.socketio.messages.XHRPostMessage;
import com.corundumstudio.socketio.messages.XHROutMessage;
import com.corundumstudio.socketio.parser.ErrorAdvice;
import com.corundumstudio.socketio.parser.ErrorReason;
import com.corundumstudio.socketio.parser.Packet;
@ -102,15 +102,15 @@ public class XHRPollingTransport extends BaseTransport {
UUID sessionId = UUID.fromString(parts[4]);
String origin = req.getHeader(HttpHeaders.Names.ORIGIN);
if (HttpMethod.POST.equals(req.getMethod())) {
if (queryDecoder.getParameters().containsKey("disconnect")) {
BaseClient client = sessionId2Client.get(sessionId);
client.onChannelDisconnect();
channel.write(new XHROutMessage(origin));
} else if (HttpMethod.POST.equals(req.getMethod())) {
onPost(sessionId, channel, origin, req.getContent());
} else if (HttpMethod.GET.equals(req.getMethod())) {
onGet(sessionId, channel, origin);
}
if (queryDecoder.getParameters().containsKey("disconnect")) {
BaseClient client = sessionId2Client.get(sessionId);
disconnectable.onDisconnect(client);
}
} else {
log.warn("Wrong {} method request path: {}, from ip: {}. Channel closed!",
new Object[] {req.getMethod(), path, channel.getRemoteAddress()});
@ -144,7 +144,7 @@ public class XHRPollingTransport extends BaseTransport {
public void run() {
XHRPollingClient client = sessionId2Client.get(sessionId);
if (client != null) {
disconnectable.onDisconnect(client);
client.onChannelDisconnect();
log.debug("Client: {} disconnected due to connection timeout", sessionId);
}
}
@ -162,7 +162,7 @@ public class XHRPollingTransport extends BaseTransport {
return;
}
channel.write(new XHRPostMessage(origin));
channel.write(new XHROutMessage(origin));
Channels.fireMessageReceived(channel, new PacketsMessage(client, content));
}

Loading…
Cancel
Save