From 4811368854a8599eac0bf798ce28fa262cce210f Mon Sep 17 00:00:00 2001 From: nkzawa Date: Wed, 12 Jul 2017 01:09:11 +0900 Subject: [PATCH] send query on connecti --- src/main/java/io/socket/client/IO.java | 7 ++++++- src/main/java/io/socket/client/Manager.java | 13 +++++++++++-- src/main/java/io/socket/client/Socket.java | 14 ++++++++++++-- src/main/java/io/socket/parser/Packet.java | 1 + src/test/java/io/socket/client/SocketTest.java | 17 +++++++++++++++++ 5 files changed, 47 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/socket/client/IO.java b/src/main/java/io/socket/client/IO.java index bcf266d..07aa46c 100644 --- a/src/main/java/io/socket/client/IO.java +++ b/src/main/java/io/socket/client/IO.java @@ -85,7 +85,12 @@ public class IO { io = managers.get(id); } - return io.socket(parsed.getPath()); + String query = parsed.getQuery(); + if (query != null && (opts.query == null || opts.query.isEmpty())) { + opts.query = query; + } + + return io.socket(parsed.getPath(), opts); } diff --git a/src/main/java/io/socket/client/Manager.java b/src/main/java/io/socket/client/Manager.java index e4c4651..c20e0db 100644 --- a/src/main/java/io/socket/client/Manager.java +++ b/src/main/java/io/socket/client/Manager.java @@ -418,12 +418,13 @@ public class Manager extends Emitter { * Initializes {@link Socket} instances for each namespaces. * * @param nsp namespace. + * @param opts options. * @return a socket instance for the namespace. */ - public Socket socket(String nsp) { + public Socket socket(String nsp, Options opts) { Socket socket = this.nsps.get(nsp); if (socket == null) { - socket = new Socket(this, nsp); + socket = new Socket(this, nsp, opts); Socket _socket = this.nsps.putIfAbsent(nsp, socket); if (_socket != null) { socket = _socket; @@ -447,6 +448,10 @@ public class Manager extends Emitter { return socket; } + public Socket socket(String nsp) { + return socket(nsp, null); + } + /*package*/ void destroy(Socket socket) { this.connecting.remove(socket); if (!this.connecting.isEmpty()) return; @@ -458,6 +463,10 @@ public class Manager extends Emitter { logger.fine(String.format("writing packet %s", packet)); final Manager self = this; + if (packet.query != null && !packet.query.isEmpty() && packet.type == Parser.CONNECT) { + packet.nsp += "?" + packet.query; + } + if (!self.encoding) { self.encoding = true; this.encoder.encode(packet, new Parser.Encoder.Callback() { diff --git a/src/main/java/io/socket/client/Socket.java b/src/main/java/io/socket/client/Socket.java index cd998f4..c309030 100644 --- a/src/main/java/io/socket/client/Socket.java +++ b/src/main/java/io/socket/client/Socket.java @@ -79,6 +79,7 @@ public class Socket extends Emitter { }}; /*package*/ String id; + /*package*/ String query; private volatile boolean connected; private int ids; @@ -89,9 +90,12 @@ public class Socket extends Emitter { private final Queue> receiveBuffer = new LinkedList>(); private final Queue> sendBuffer = new LinkedList>(); - public Socket(Manager io, String nsp) { + public Socket(Manager io, String nsp, Manager.Options opts) { this.io = io; this.nsp = nsp; + if (opts != null) { + this.query = opts.query; + } } private void subEvents() { @@ -268,7 +272,13 @@ public class Socket extends Emitter { logger.fine("transport is open - connecting"); if (!"/".equals(this.nsp)) { - this.packet(new Packet(Parser.CONNECT)); + if (this.query != null && !this.query.isEmpty()) { + Packet packet = new Packet(Parser.CONNECT); + packet.query = this.query; + this.packet(packet); + } else { + this.packet(new Packet(Parser.CONNECT)); + } } } diff --git a/src/main/java/io/socket/parser/Packet.java b/src/main/java/io/socket/parser/Packet.java index ae5e35b..da65f68 100644 --- a/src/main/java/io/socket/parser/Packet.java +++ b/src/main/java/io/socket/parser/Packet.java @@ -8,6 +8,7 @@ public class Packet { public String nsp; public T data; public int attachments; + public String query; public Packet() {} diff --git a/src/test/java/io/socket/client/SocketTest.java b/src/test/java/io/socket/client/SocketTest.java index 708e7cb..3006005 100644 --- a/src/test/java/io/socket/client/SocketTest.java +++ b/src/test/java/io/socket/client/SocketTest.java @@ -168,4 +168,21 @@ public class SocketTest extends Connection { socket.disconnect(); } + + @Test(timeout = TIMEOUT) + public void shouldStoreQueryStringAsAProperty() throws URISyntaxException, InterruptedException { + IO.Options opts = new IO.Options(); + opts.query = "a=b"; + Socket socket = IO.socket(this.uri() + "/abc", opts); + + Socket socket2 = IO.socket(this.uri() + "/abc?b=c&d=e"); + + IO.Options opts3 = new IO.Options(); + opts.query = "%26a=%26%3D%3Fa"; + Socket socket3 = IO.socket(this.uri() + "/abc", opts); + + assertThat(socket.query, is("a=b")); + assertThat(socket2.query, is("b=c&d=e")); + assertThat(socket3.query, is("%26a=%26%3D%3Fa")); + } }