diff --git a/src/main/java/com/corundumstudio/socketio/SocketIOClient.java b/src/main/java/com/corundumstudio/socketio/SocketIOClient.java index d11b9b6..d443632 100644 --- a/src/main/java/com/corundumstudio/socketio/SocketIOClient.java +++ b/src/main/java/com/corundumstudio/socketio/SocketIOClient.java @@ -23,6 +23,13 @@ import com.corundumstudio.socketio.parser.Packet; public interface SocketIOClient extends ClientOperations { + /** + * Current client transport protocol + * + * @return transport protocol + */ + Transport getTransport(); + /** * Send event with ack callback * diff --git a/src/main/java/com/corundumstudio/socketio/transport/BaseClient.java b/src/main/java/com/corundumstudio/socketio/transport/BaseClient.java index d47fd2d..5cbfe97 100644 --- a/src/main/java/com/corundumstudio/socketio/transport/BaseClient.java +++ b/src/main/java/com/corundumstudio/socketio/transport/BaseClient.java @@ -27,6 +27,7 @@ import org.jboss.netty.channel.ChannelFutureListener; import com.corundumstudio.socketio.DisconnectableHub; import com.corundumstudio.socketio.SocketIOClient; +import com.corundumstudio.socketio.Transport; import com.corundumstudio.socketio.ack.AckManager; import com.corundumstudio.socketio.namespace.Namespace; import com.corundumstudio.socketio.parser.Packet; @@ -47,14 +48,20 @@ public abstract class BaseClient { private final DisconnectableHub disconnectable; private final AckManager ackManager; private final UUID sessionId; + private final Transport transport; protected Channel channel; - public BaseClient(UUID sessionId, AckManager ackManager, DisconnectableHub disconnectable) { + public BaseClient(UUID sessionId, AckManager ackManager, DisconnectableHub disconnectable, Transport transport) { this.sessionId = sessionId; this.ackManager = ackManager; this.disconnectable = disconnectable; + this.transport = transport; } + public Transport getTransport() { + return transport; + } + public abstract ChannelFuture send(Packet packet); public void removeChildClient(SocketIOClient client) { diff --git a/src/main/java/com/corundumstudio/socketio/transport/FlashSocketTransport.java b/src/main/java/com/corundumstudio/socketio/transport/FlashSocketTransport.java index f49f3ee..03bc60e 100644 --- a/src/main/java/com/corundumstudio/socketio/transport/FlashSocketTransport.java +++ b/src/main/java/com/corundumstudio/socketio/transport/FlashSocketTransport.java @@ -21,6 +21,7 @@ import org.jboss.netty.channel.ChannelHandler.Sharable; import com.corundumstudio.socketio.DisconnectableHub; import com.corundumstudio.socketio.HeartbeatHandler; import com.corundumstudio.socketio.SocketIOPipelineFactory; +import com.corundumstudio.socketio.Transport; import com.corundumstudio.socketio.ack.AckManager; import com.corundumstudio.socketio.handler.AuthorizeHandler; @@ -35,6 +36,11 @@ public class FlashSocketTransport extends WebSocketTransport { super(connectPath, isSsl, ackManager, disconnectable, authorizeHandler, heartbeatHandler); path = connectPath + NAME; } + + @Override + protected Transport getTransport() { + return Transport.FLASHSOCKET; + } @Override protected void removeHandler(ChannelPipeline pipeline) { diff --git a/src/main/java/com/corundumstudio/socketio/transport/NamespaceClient.java b/src/main/java/com/corundumstudio/socketio/transport/NamespaceClient.java index 26f677b..f18a19d 100644 --- a/src/main/java/com/corundumstudio/socketio/transport/NamespaceClient.java +++ b/src/main/java/com/corundumstudio/socketio/transport/NamespaceClient.java @@ -21,6 +21,7 @@ import java.util.UUID; import com.corundumstudio.socketio.AckCallback; import com.corundumstudio.socketio.SocketIOClient; +import com.corundumstudio.socketio.Transport; import com.corundumstudio.socketio.namespace.Namespace; import com.corundumstudio.socketio.parser.Packet; import com.corundumstudio.socketio.parser.PacketType; @@ -39,6 +40,10 @@ public class NamespaceClient implements SocketIOClient { public BaseClient getBaseClient() { return baseClient; } + + public Transport getTransport() { + return baseClient.getTransport(); + } public Namespace getNamespace() { return namespace; diff --git a/src/main/java/com/corundumstudio/socketio/transport/WebSocketClient.java b/src/main/java/com/corundumstudio/socketio/transport/WebSocketClient.java index da38a84..4f61489 100644 --- a/src/main/java/com/corundumstudio/socketio/transport/WebSocketClient.java +++ b/src/main/java/com/corundumstudio/socketio/transport/WebSocketClient.java @@ -21,14 +21,17 @@ import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelFuture; import com.corundumstudio.socketio.DisconnectableHub; +import com.corundumstudio.socketio.Transport; import com.corundumstudio.socketio.ack.AckManager; import com.corundumstudio.socketio.messages.WebSocketPacketMessage; import com.corundumstudio.socketio.parser.Packet; public class WebSocketClient extends BaseClient { - public WebSocketClient(Channel channel, AckManager ackManager, DisconnectableHub disconnectable, UUID sessionId) { - super(sessionId, ackManager, disconnectable); + public WebSocketClient(Channel channel, AckManager ackManager, + DisconnectableHub disconnectable, UUID sessionId, + Transport transport) { + super(sessionId, ackManager, disconnectable, transport); this.channel = channel; } diff --git a/src/main/java/com/corundumstudio/socketio/transport/WebSocketTransport.java b/src/main/java/com/corundumstudio/socketio/transport/WebSocketTransport.java index d54a4f0..29a42ed 100644 --- a/src/main/java/com/corundumstudio/socketio/transport/WebSocketTransport.java +++ b/src/main/java/com/corundumstudio/socketio/transport/WebSocketTransport.java @@ -16,9 +16,7 @@ package com.corundumstudio.socketio.transport; import java.io.IOException; -import java.util.ArrayList; import java.util.Collection; -import java.util.List; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -31,7 +29,6 @@ import org.jboss.netty.channel.ChannelPipeline; import org.jboss.netty.channel.ChannelStateEvent; import org.jboss.netty.channel.Channels; import org.jboss.netty.channel.MessageEvent; -import org.jboss.netty.channel.SimpleChannelUpstreamHandler; import org.jboss.netty.handler.codec.http.HttpHeaders; import org.jboss.netty.handler.codec.http.HttpRequest; import org.jboss.netty.handler.codec.http.QueryStringDecoder; @@ -42,12 +39,11 @@ import org.jboss.netty.handler.codec.http.websocketx.WebSocketServerHandshakerFa import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.corundumstudio.socketio.CompositeIterable; -import com.corundumstudio.socketio.Disconnectable; import com.corundumstudio.socketio.DisconnectableHub; import com.corundumstudio.socketio.HeartbeatHandler; import com.corundumstudio.socketio.SocketIOClient; import com.corundumstudio.socketio.SocketIOPipelineFactory; +import com.corundumstudio.socketio.Transport; import com.corundumstudio.socketio.ack.AckManager; import com.corundumstudio.socketio.handler.AuthorizeHandler; import com.corundumstudio.socketio.messages.PacketsMessage; @@ -149,7 +145,7 @@ public class WebSocketTransport extends BaseTransport { return; } - WebSocketClient client = new WebSocketClient(channel, ackManager, disconnectableHub, sessionId); + WebSocketClient client = new WebSocketClient(channel, ackManager, disconnectableHub, sessionId, getTransport()); channelId2Client.put(channel.getId(), client); sessionId2Client.put(sessionId, client); @@ -159,6 +155,10 @@ public class WebSocketTransport extends BaseTransport { removeHandler(channel.getPipeline()); } + protected Transport getTransport() { + return Transport.WEBSOCKET; + } + protected void removeHandler(ChannelPipeline pipeline) { pipeline.remove(SocketIOPipelineFactory.FLASH_SOCKET_TRANSPORT); } diff --git a/src/main/java/com/corundumstudio/socketio/transport/XHRPollingClient.java b/src/main/java/com/corundumstudio/socketio/transport/XHRPollingClient.java index 599ac9a..69380f1 100644 --- a/src/main/java/com/corundumstudio/socketio/transport/XHRPollingClient.java +++ b/src/main/java/com/corundumstudio/socketio/transport/XHRPollingClient.java @@ -21,6 +21,7 @@ import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelFuture; import com.corundumstudio.socketio.DisconnectableHub; +import com.corundumstudio.socketio.Transport; import com.corundumstudio.socketio.ack.AckManager; import com.corundumstudio.socketio.messages.XHRNewChannelMessage; import com.corundumstudio.socketio.messages.XHRPacketMessage; @@ -30,8 +31,8 @@ public class XHRPollingClient extends BaseClient { private String origin; - public XHRPollingClient(AckManager ackManager, DisconnectableHub disconnectable, UUID sessionId) { - super(sessionId, ackManager, disconnectable); + public XHRPollingClient(AckManager ackManager, DisconnectableHub disconnectable, UUID sessionId, Transport transport) { + super(sessionId, ackManager, disconnectable, transport); } public void update(Channel channel, String origin) { diff --git a/src/main/java/com/corundumstudio/socketio/transport/XHRPollingTransport.java b/src/main/java/com/corundumstudio/socketio/transport/XHRPollingTransport.java index b5d55b6..acc4030 100644 --- a/src/main/java/com/corundumstudio/socketio/transport/XHRPollingTransport.java +++ b/src/main/java/com/corundumstudio/socketio/transport/XHRPollingTransport.java @@ -40,6 +40,7 @@ import org.slf4j.LoggerFactory; import com.corundumstudio.socketio.Configuration; import com.corundumstudio.socketio.DisconnectableHub; import com.corundumstudio.socketio.SocketIOClient; +import com.corundumstudio.socketio.Transport; import com.corundumstudio.socketio.ack.AckManager; import com.corundumstudio.socketio.handler.AuthorizeHandler; import com.corundumstudio.socketio.messages.PacketsMessage; @@ -184,7 +185,7 @@ public class XHRPollingTransport extends BaseTransport { } private XHRPollingClient createClient(String origin, Channel channel, UUID sessionId) { - XHRPollingClient client = new XHRPollingClient(ackManager, disconnectable, sessionId); + XHRPollingClient client = new XHRPollingClient(ackManager, disconnectable, sessionId, Transport.XHRPOLLING); sessionId2Client.put(sessionId, client); client.update(channel, origin);