/** * Initializes {@link Socket} instances for each namespaces. * * @param nsp namespace. * @return a socket instance for the namespace. */ public Socket socket(String nsp) { Socket socket = this.nsps.get(nsp); if (socket == null) { socket = new Socket(this, nsp); Socket _socket = this.nsps.putIfAbsent(nsp, socket); if (_socket != null) { socket = _socket; } else { final Manager self = this; final Socket s = socket; socket.on( Socket.EVENT_CONNECTING, new Listener() { @Override public void call(Object... args) { self.connecting.add(s); } }); socket.on( Socket.EVENT_CONNECT, new Listener() { @Override public void call(Object... objects) { s.id = self.engine.id(); } }); } } return socket; }
@Test(timeout = TIMEOUT) public void receiveEmoji() throws InterruptedException { final BlockingQueue<Object> values = new LinkedBlockingQueue<Object>(); socket = new Socket(createOptions()); socket.on( Socket.EVENT_OPEN, new Emitter.Listener() { @Override public void call(Object... args) { socket.send("\uD800-\uDB7F\uDB80-\uDBFF\uDC00-\uDFFF\uE000-\uF8FF"); socket.on( Socket.EVENT_MESSAGE, new Emitter.Listener() { @Override public void call(Object... args) { if ("hi".equals(args[0])) return; values.offer(args[0]); socket.close(); } }); } }); socket.open(); assertThat((String) values.take(), is("\uD800-\uDB7F\uDB80-\uDBFF\uDC00-\uDFFF\uE000-\uF8FF")); }
@Test(timeout = TIMEOUT) public void receiveMultibyteUTF8StringsWithPolling() throws InterruptedException { final BlockingQueue<Object> values = new LinkedBlockingQueue<Object>(); socket = new Socket(createOptions()); socket.on( Socket.EVENT_OPEN, new Emitter.Listener() { @Override public void call(Object... args) { socket.send("cash money €€€"); socket.on( Socket.EVENT_MESSAGE, new Emitter.Listener() { @Override public void call(Object... args) { if ("hi".equals(args[0])) return; values.offer(args[0]); socket.close(); } }); } }); socket.open(); assertThat((String) values.take(), is("cash money €€€")); }
@Test(timeout = TIMEOUT) public void connectToLocalhost() throws InterruptedException { final BlockingQueue<Object> values = new LinkedBlockingQueue<Object>(); socket = new Socket(createOptions()); socket.on( Socket.EVENT_OPEN, new Emitter.Listener() { @Override public void call(Object... args) { socket.on( Socket.EVENT_MESSAGE, new Emitter.Listener() { @Override public void call(Object... args) { values.offer(args[0]); socket.close(); } }); } }); socket.open(); assertThat((String) values.take(), is("hi")); }
@Test(timeout = TIMEOUT) public void notSendPacketsIfSocketCloses() throws InterruptedException { final BlockingQueue<Object> values = new LinkedBlockingQueue<Object>(); socket = new Socket(createOptions()); socket.on( Socket.EVENT_OPEN, new Emitter.Listener() { @Override public void call(Object... args) { final boolean[] noPacket = new boolean[] {true}; socket.on( Socket.EVENT_PACKET_CREATE, new Emitter.Listener() { @Override public void call(Object... args) { noPacket[0] = false; } }); socket.close(); Timer timer = new Timer(); timer.schedule( new TimerTask() { @Override public void run() { values.offer(noPacket[0]); } }, 1200); } }); socket.open(); assertThat((Boolean) values.take(), is(true)); }
@Test(timeout = TIMEOUT) public void receiveBinaryDataAndMultibyteUTF8String() throws InterruptedException { final BlockingQueue<Object> values = new LinkedBlockingQueue<Object>(); final byte[] binaryData = new byte[5]; for (int i = 0; i < binaryData.length; i++) { binaryData[i] = (byte) i; } final int[] msg = new int[] {0}; Socket.Options opts = new Socket.Options(); opts.port = PORT; opts.transports = new String[] {Polling.NAME}; socket = new Socket(opts); socket.on( Socket.EVENT_OPEN, new Emitter.Listener() { @Override public void call(Object... args) { socket.send(binaryData); socket.send("cash money €€€"); socket.on( Socket.EVENT_MESSAGE, new Emitter.Listener() { @Override public void call(Object... args) { if ("hi".equals(args[0])) return; values.offer(args[0]); msg[0]++; } }); } }); socket.open(); assertThat((byte[]) values.take(), is(binaryData)); assertThat((String) values.take(), is("cash money €€€")); socket.close(); }