diff --git a/docs/README.md b/docs/README.md index a612746..67e80ea 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,13 +2,13 @@
Build Scalable Node.js WebSocket Applications

- +

- GitHub license - - Maintain + + + Maintain

@@ -17,5 +17,5 @@

- Find more about ClusterWS JavaScript Client in Wiki Documentation + Find more about ClusterWS Java Client in Wiki Documentation

\ No newline at end of file diff --git a/src/main/java/com/clusterws/ClusterWS.java b/src/main/java/com/clusterws/ClusterWS.java index b77af17..414b8d3 100644 --- a/src/main/java/com/clusterws/ClusterWS.java +++ b/src/main/java/com/clusterws/ClusterWS.java @@ -21,6 +21,7 @@ public class ClusterWS { private PingHandler mPingHandler; private List mChannels; private ReconnectionParams mReconnectionParams; + private static final byte[] PONG = "A".getBytes(); public ClusterWS(String url) { if (url == null) { @@ -130,7 +131,10 @@ private void createSocket() { mSocket = new Socket(URI.create(mUrl), new ISocketEvents() { @Override public void onOpen() { - mClusterWSListener.onConnected(); + for (Channel channel : + mChannels) { + channel.subscribe(); + } } @Override @@ -145,8 +149,10 @@ public void onClose(int code, String reason) { if (mPingHandler.getPingTimer() != null) { mPingHandler.getPingTimer().cancel(); } - if (mReconnectionParams.isAutoReconnect() && code != 1000 && (mReconnectionParams.getReconnectionAttempts() == 0 || mReconnectionParams.getReconnectionsAttempted() < mReconnectionParams.getReconnectionAttempts())) { - if (mSocket.getReadyState() == WebSocket.READYSTATE.CLOSED || mSocket.getReadyState() == WebSocket.READYSTATE.NOT_YET_CONNECTED) { + if (mReconnectionParams.isAutoReconnect() + && code != 1000 + && (mReconnectionParams.getReconnectionAttempts() == 0 || mReconnectionParams.getReconnectionsAttempted() < mReconnectionParams.getReconnectionAttempts())) { + if (mSocket.getReadyState() == WebSocket.READYSTATE.CLOSED || mSocket.getReadyState() == WebSocket.READYSTATE.NOT_YET_CONNECTED || mSocket.getReadyState() == WebSocket.READYSTATE.CLOSING) { mReconnectionParams.incrementReconnectionsAttempted(); int randomDelay = ThreadLocalRandom.current().nextInt(1, mReconnectionParams.getReconnectionIntervalMax() - @@ -165,8 +171,17 @@ public void run() { @Override public void onBinaryMessage(ByteBuffer bytes) { - String message = StandardCharsets.UTF_8.decode(bytes).toString(); - onMessageReceived(message); + System.out.println("GOT MESSAGE"); + byte[] arr = new byte[bytes.remaining()]; + bytes.get(arr); + if (arr.length == 1 && arr[0] == 57) { + mPingHandler.setMissedPingToZero(); + mSocket.send(PONG); + } else { + String message = new String(arr, StandardCharsets.UTF_8); + onMessageReceived(message); + } + } @Override @@ -181,11 +196,7 @@ public void onMessage(String message) { } private void onMessageReceived(String message) { - if (message.equals("#0")) { - mPingHandler.setMissedPingToZero(); - send("#1", null, "ping"); - } else { - mMessageHandler.messageDecode(ClusterWS.this, message); - } + System.out.println("MESSAGE IS " + message); + mMessageHandler.messageDecode(ClusterWS.this, message); } } diff --git a/src/test/java/com/clusterws/ChannelServerTest.java b/src/test/java/com/clusterws/ChannelServerTest.java index 6d7ea33..39f1643 100644 --- a/src/test/java/com/clusterws/ChannelServerTest.java +++ b/src/test/java/com/clusterws/ChannelServerTest.java @@ -16,7 +16,7 @@ public class ChannelServerTest { @Before public void init() throws Exception { - mClusterWS = new ClusterWS("ws://localhost:80"); + mClusterWS = new ClusterWS("ws://localhost:3000"); mGotTheData = false; mReceivedData = null; } @@ -189,7 +189,7 @@ public void onDataReceived(String channelName, Object data) { } }); mClusterWS.disconnect(4001, "hui"); - Thread.sleep(1000); + Thread.sleep(3000); channel.publish("testData"); Thread.sleep(1000); assertTrue("Did not get the data", mGotTheData); diff --git a/src/test/java/com/clusterws/ClusterWSTest.java b/src/test/java/com/clusterws/ClusterWSTest.java index 7d2b387..c189b88 100644 --- a/src/test/java/com/clusterws/ClusterWSTest.java +++ b/src/test/java/com/clusterws/ClusterWSTest.java @@ -20,7 +20,7 @@ public class ClusterWSTest { @Before public void init() { - mClusterWS = new ClusterWS("ws://localhost:80"); + mClusterWS = new ClusterWS("ws://localhost:3000"); receivedData = null; gotTheData = false; } @@ -36,7 +36,7 @@ public void connect() throws Exception { mClusterWS.connect(); Thread.sleep(1000); - assertEquals("Socket did not connect", WebSocket.READYSTATE.OPEN,mClusterWS.getState()); + assertEquals("Socket did not connect", WebSocket.READYSTATE.OPEN, mClusterWS.getState()); } @Test @@ -233,24 +233,24 @@ public void onDisconnected(int code, String reason) { } @Test - public void testReconnection() throws Exception{ - mClusterWS.setReconnection(true,1000,2000,null); + public void testReconnection() throws Exception { + mClusterWS.setReconnection(true, 1000, 2000, null); mClusterWS.connect(); Thread.sleep(1000); - mClusterWS.disconnect(3002,"test"); - Thread.sleep(2000); + mClusterWS.disconnect(3002, "test"); + Thread.sleep(4000); assertEquals("Did not reconnect", WebSocket.READYSTATE.OPEN, mClusterWS.getState()); } @Test - public void testPingPong() throws Exception{ + public void testPingPong() throws Exception { mClusterWS.connect(); Thread.sleep(1900); - assertEquals("Websocket disconnected", WebSocket.READYSTATE.OPEN,mClusterWS.getState()); + assertEquals("Websocket disconnected", WebSocket.READYSTATE.OPEN, mClusterWS.getState()); } @Test(expected = NullPointerException.class) - public void testNullUrl() throws Exception{ + public void testNullUrl() throws Exception { mClusterWS = new ClusterWS(null); }