diff --git a/src/main/java/com/corundumstudio/socketio/messages/XHRPacketMessage.java b/src/main/java/com/corundumstudio/socketio/messages/XHRPacketMessage.java index 2403d9a..eb86c84 100644 --- a/src/main/java/com/corundumstudio/socketio/messages/XHRPacketMessage.java +++ b/src/main/java/com/corundumstudio/socketio/messages/XHRPacketMessage.java @@ -32,4 +32,9 @@ public class XHRPacketMessage extends HttpMessage { return packet; } + @Override + public String toString() { + return "XHRPacketMessage [packet=" + packet + "]"; + } + } diff --git a/src/main/java/com/corundumstudio/socketio/parser/Packet.java b/src/main/java/com/corundumstudio/socketio/parser/Packet.java index e17d9cb..04dc4d2 100644 --- a/src/main/java/com/corundumstudio/socketio/parser/Packet.java +++ b/src/main/java/com/corundumstudio/socketio/parser/Packet.java @@ -150,4 +150,9 @@ public class Packet { return getId() != null && (isEventAck() || isJsonAck()); } + @Override + public String toString() { + return "Packet [type=" + type + ", args=" + args + ", id=" + id + "]"; + } + } diff --git a/src/main/java/com/corundumstudio/socketio/transport/XHRPollingClient.java b/src/main/java/com/corundumstudio/socketio/transport/XHRPollingClient.java index c9aadc0..108e43d 100644 --- a/src/main/java/com/corundumstudio/socketio/transport/XHRPollingClient.java +++ b/src/main/java/com/corundumstudio/socketio/transport/XHRPollingClient.java @@ -17,6 +17,9 @@ package com.corundumstudio.socketio.transport; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelPromise; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.GenericFutureListener; import java.util.UUID; @@ -46,8 +49,20 @@ public class XHRPollingClient extends MainBaseClient { return origin; } - public ChannelFuture send(Packet packet) { - return getChannel().write(new XHRPacketMessage(getSessionId(), origin, packet)); + public ChannelFuture send(final Packet packet) { + ChannelPromise promise = getChannel().newPromise(); + promise.addListener(new GenericFutureListener>() { + @Override + public void operationComplete(Future future) throws Exception { + // channel could be closed because new channel was bound + // so we need to resend packet + if (!future.isSuccess()) { + send(packet); + } + } + }); + + return getChannel().write(new XHRPacketMessage(getSessionId(), origin, packet), promise); } }