Browse Source

Merge pull request #166 from tormozok/json-decode-fix

Json decode fix (copy jsonSupport for all namespaces)
master
Nikita Koksharov 11 years ago
parent
commit
be851bbbe6
  1. 2
      src/main/java/com/corundumstudio/socketio/Configuration.java
  2. 5
      src/main/java/com/corundumstudio/socketio/JsonSupportWrapper.java
  3. 2
      src/main/java/com/corundumstudio/socketio/SocketIOChannelInitializer.java
  4. 6
      src/main/java/com/corundumstudio/socketio/namespace/Namespace.java
  5. 11
      src/main/java/com/corundumstudio/socketio/protocol/JacksonJsonSupport.java
  6. 4
      src/main/java/com/corundumstudio/socketio/protocol/JsonSupport.java
  7. 13
      src/main/java/com/corundumstudio/socketio/protocol/PacketDecoder.java
  8. 3
      src/test/java/com/corundumstudio/socketio/parser/DecoderBaseTest.java
  9. 5
      src/test/java/com/corundumstudio/socketio/parser/DecoderEventPacketTest.java
  10. 2
      src/test/java/com/corundumstudio/socketio/parser/EncoderBaseTest.java
  11. 5
      src/test/java/com/corundumstudio/socketio/parser/PayloadTest.java

2
src/main/java/com/corundumstudio/socketio/Configuration.java

@ -66,7 +66,7 @@ public class Configuration {
private StoreFactory storeFactory = new MemoryStoreFactory();
private JsonSupport jsonSupport = new JacksonJsonSupport(this);
private JsonSupport jsonSupport = new JacksonJsonSupport();
private AuthorizationListener authorizationListener = new SuccessAuthorizationListener();

5
src/main/java/com/corundumstudio/socketio/JsonSupportWrapper.java

@ -82,6 +82,11 @@ class JsonSupportWrapper implements JsonSupport {
delegate.removeEventMapping(eventName);
}
@Override
public JsonSupport clone() {
return new JsonSupportWrapper(delegate.clone());
}
@Override
public <T> T readValue(String src, Class<T> valueType) throws IOException {
return delegate.readValue(src, valueType);

2
src/main/java/com/corundumstudio/socketio/SocketIOChannelInitializer.java

@ -99,7 +99,7 @@ public class SocketIOChannelInitializer extends ChannelInitializer<Channel> impl
JsonSupport jsonSupport = configuration.getJsonSupport();
PacketEncoder encoder = new PacketEncoder(configuration, jsonSupport);
PacketDecoder decoder = new PacketDecoder(jsonSupport, ackManager);
PacketDecoder decoder = new PacketDecoder(jsonSupport, namespacesHub, ackManager);
String connectPath = configuration.getContext() + "/";

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

@ -76,7 +76,7 @@ public class Namespace implements SocketIONamespace {
public Namespace(String name, Configuration configuration) {
super();
this.name = name;
this.jsonSupport = configuration.getJsonSupport();
this.jsonSupport = configuration.getJsonSupport().clone();
this.storeFactory = configuration.getStoreFactory();
this.exceptionListener = configuration.getExceptionListener();
this.ackMode = configuration.getAckMode();
@ -331,6 +331,10 @@ public class Namespace implements SocketIONamespace {
return Collections.unmodifiableCollection(allClients.values());
}
public JsonSupport getJsonSupport() {
return jsonSupport;
}
public SocketIOClient getClient(UUID uuid) {
return allClients.get(uuid);
}

11
src/main/java/com/corundumstudio/socketio/protocol/JacksonJsonSupport.java

@ -176,11 +176,7 @@ public class JacksonJsonSupport implements JsonSupport {
private final Logger log = LoggerFactory.getLogger(getClass());
public JacksonJsonSupport(Configuration configuration) {
this(configuration, null);
}
public JacksonJsonSupport(Configuration configuration, Module... modules) {
public JacksonJsonSupport(Module... modules) {
if (modules != null && modules.length > 0) {
objectMapper.registerModules(modules);
jsonpObjectMapper.registerModules(modules);
@ -245,5 +241,8 @@ public class JacksonJsonSupport implements JsonSupport {
return objectMapper.readValue(src, valueType);
}
@Override
public JsonSupport clone() {
return new JacksonJsonSupport();
}
}

4
src/main/java/com/corundumstudio/socketio/protocol/JsonSupport.java

@ -28,7 +28,7 @@ import com.corundumstudio.socketio.AckCallback;
* to JSON support operations.
*
*/
public interface JsonSupport {
public interface JsonSupport extends Cloneable {
void writeJsonpValue(ByteBufOutputStream out, Object value) throws IOException;
@ -44,4 +44,6 @@ public interface JsonSupport {
void removeEventMapping(String eventName);
JsonSupport clone();
}

13
src/main/java/com/corundumstudio/socketio/protocol/PacketDecoder.java

@ -15,6 +15,8 @@
*/
package com.corundumstudio.socketio.protocol;
import com.corundumstudio.socketio.namespace.Namespace;
import com.corundumstudio.socketio.namespace.NamespacesHub;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufInputStream;
import io.netty.buffer.Unpooled;
@ -35,10 +37,12 @@ public class PacketDecoder {
private final JsonSupport jsonSupport;
private final AckManager ackManager;
private final NamespacesHub nspHub;
public PacketDecoder(JsonSupport jsonSupport, AckManager ackManager) {
public PacketDecoder(JsonSupport jsonSupport, NamespacesHub nspHub, AckManager ackManager) {
this.jsonSupport = jsonSupport;
this.ackManager = ackManager;
this.nspHub = nspHub;
}
// TODO optimize
@ -213,6 +217,13 @@ public class PacketDecoder {
packet.setNsp(readString(frame));
}
JsonSupport jsonSupport = this.jsonSupport;
Namespace nsp = nspHub.get(packet.getNsp());
if(nsp != null) {
jsonSupport = nsp.getJsonSupport();
}
if (packet.getSubType() == PacketType.ACK) {
ByteBufInputStream in = new ByteBufInputStream(frame);
AckCallback<?> callback = ackManager.getCallback(head.getSessionId(), packet.getAckId());

3
src/test/java/com/corundumstudio/socketio/parser/DecoderBaseTest.java

@ -15,6 +15,7 @@
*/
package com.corundumstudio.socketio.parser;
import com.corundumstudio.socketio.namespace.NamespacesHub;
import org.junit.Before;
import mockit.Mocked;
@ -34,7 +35,7 @@ public class DecoderBaseTest {
@Before
public void before() {
decoder = new PacketDecoder(new JacksonJsonSupport(new Configuration()), ackManager);
decoder = new PacketDecoder(new JacksonJsonSupport(), new NamespacesHub(new Configuration()), ackManager);
}
}

5
src/test/java/com/corundumstudio/socketio/parser/DecoderEventPacketTest.java

@ -19,6 +19,7 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.corundumstudio.socketio.namespace.NamespacesHub;
import org.junit.Assert;
import org.junit.Test;
@ -48,9 +49,9 @@ public class DecoderEventPacketTest extends DecoderBaseTest {
@Test
public void testDecodeWithData() throws IOException {
JacksonJsonSupport jsonSupport = new JacksonJsonSupport(new Configuration());
JacksonJsonSupport jsonSupport = new JacksonJsonSupport();
jsonSupport.addEventMapping("edwald", HashMap.class, Integer.class, String.class);
PacketDecoder decoder = new PacketDecoder(jsonSupport, ackManager);
PacketDecoder decoder = new PacketDecoder(jsonSupport, new NamespacesHub(new Configuration()), ackManager);
Packet packet = decoder.decodePacket("5:::{\"name\":\"edwald\",\"args\":[{\"a\": \"b\"},2,\"3\"]}", null);
Assert.assertEquals(PacketType.EVENT, packet.getType());

2
src/test/java/com/corundumstudio/socketio/parser/EncoderBaseTest.java

@ -21,6 +21,6 @@ import com.corundumstudio.socketio.protocol.JacksonJsonSupport;
public class EncoderBaseTest {
final PacketEncoder encoder = new PacketEncoder(new Configuration(), new JacksonJsonSupport(new Configuration()));
final PacketEncoder encoder = new PacketEncoder(new Configuration(), new JacksonJsonSupport());
}

5
src/test/java/com/corundumstudio/socketio/parser/PayloadTest.java

@ -15,6 +15,7 @@
*/
package com.corundumstudio.socketio.parser;
import com.corundumstudio.socketio.namespace.NamespacesHub;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.buffer.UnpooledByteBufAllocator;
@ -38,8 +39,8 @@ import com.corundumstudio.socketio.protocol.PacketType;
public class PayloadTest {
private final JacksonJsonSupport support = new JacksonJsonSupport(new Configuration());
private final PacketDecoder decoder = new PacketDecoder(support, null);
private final JacksonJsonSupport support = new JacksonJsonSupport();
private final PacketDecoder decoder = new PacketDecoder(support, new NamespacesHub(new Configuration()), null);
private final PacketEncoder encoder = new PacketEncoder(new Configuration(), support);
@Test

Loading…
Cancel
Save