Skip to content

Commit 05f6a2a

Browse files
authored
Merge pull request #439 from socketio/fix/compatible-v2
Make compatible with Socket.IO v2
2 parents 9b5c684 + eeadb50 commit 05f6a2a

File tree

14 files changed

+738
-590
lines changed

14 files changed

+738
-590
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
<dependency>
6363
<groupId>io.socket</groupId>
6464
<artifactId>engine.io-client</artifactId>
65-
<version>0.9.0</version>
65+
<version>1.0.0-SNAPSHOT</version>
6666
</dependency>
6767
<dependency>
6868
<groupId>org.json</groupId>

src/main/java/io/socket/client/IO.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,13 @@
33

44
import io.socket.parser.Parser;
55
import okhttp3.Call;
6-
import okhttp3.OkHttpClient;
76
import okhttp3.WebSocket;
87

9-
import java.util.logging.Level;
10-
import javax.net.ssl.HostnameVerifier;
11-
import javax.net.ssl.SSLContext;
128
import java.net.URI;
139
import java.net.URISyntaxException;
1410
import java.net.URL;
1511
import java.util.concurrent.ConcurrentHashMap;
12+
import java.util.logging.Level;
1613
import java.util.logging.Logger;
1714

1815

src/main/java/io/socket/client/Manager.java

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,24 @@
22

33
import io.socket.backo.Backoff;
44
import io.socket.emitter.Emitter;
5+
import io.socket.parser.IOParser;
56
import io.socket.parser.Packet;
67
import io.socket.parser.Parser;
78
import io.socket.thread.EventThread;
89
import okhttp3.Call;
910
import okhttp3.WebSocket;
1011

11-
import javax.net.ssl.HostnameVerifier;
12-
import javax.net.ssl.SSLContext;
1312
import java.net.URI;
14-
import java.util.*;
13+
import java.util.ArrayList;
14+
import java.util.Date;
15+
import java.util.HashSet;
16+
import java.util.LinkedList;
17+
import java.util.List;
18+
import java.util.Map;
19+
import java.util.Queue;
20+
import java.util.Set;
21+
import java.util.Timer;
22+
import java.util.TimerTask;
1523
import java.util.concurrent.ConcurrentHashMap;
1624
import java.util.logging.Level;
1725
import java.util.logging.Logger;
@@ -148,8 +156,8 @@ public Manager(URI uri, Options opts) {
148156
this.uri = uri;
149157
this.encoding = false;
150158
this.packetBuffer = new ArrayList<Packet>();
151-
this.encoder = new Parser.Encoder();
152-
this.decoder = new Parser.Decoder();
159+
this.encoder = opts.encoder != null ? opts.encoder : new IOParser.Encoder();
160+
this.decoder = opts.decoder != null ? opts.decoder : new IOParser.Decoder();
153161
}
154162

155163
private void emitAll(String event, Object... args) {
@@ -163,11 +171,17 @@ private void emitAll(String event, Object... args) {
163171
* Update `socket.id` of all sockets
164172
*/
165173
private void updateSocketIds() {
166-
for (Socket socket : this.nsps.values()) {
167-
socket.id = this.engine.id();
174+
for (Map.Entry<String, Socket> entry : this.nsps.entrySet()) {
175+
String nsp = entry.getKey();
176+
Socket socket = entry.getValue();
177+
socket.id = this.generateId(nsp);
168178
}
169179
}
170180

181+
private String generateId(String nsp) {
182+
return ("/".equals(nsp) ? "" : (nsp + "#")) + this.engine.id();
183+
}
184+
171185
public boolean reconnection() {
172186
return this._reconnection;
173187
}
@@ -383,12 +397,12 @@ public void call(Object... objects) {
383397
Manager.this.onclose((String)objects[0]);
384398
}
385399
}));
386-
this.subs.add(On.on(this.decoder, Parser.Decoder.EVENT_DECODED, new Listener() {
400+
this.decoder.onDecoded(new Parser.Decoder.Callback() {
387401
@Override
388-
public void call(Object... objects) {
389-
Manager.this.ondecoded((Packet) objects[0]);
402+
public void call (Packet packet) {
403+
Manager.this.ondecoded(packet);
390404
}
391-
}));
405+
});
392406
}
393407

394408
private void onping() {
@@ -425,7 +439,7 @@ private void onerror(Exception err) {
425439
* @param opts options.
426440
* @return a socket instance for the namespace.
427441
*/
428-
public Socket socket(String nsp, Options opts) {
442+
public Socket socket(final String nsp, Options opts) {
429443
Socket socket = this.nsps.get(nsp);
430444
if (socket == null) {
431445
socket = new Socket(this, nsp, opts);
@@ -444,7 +458,7 @@ public void call(Object... args) {
444458
socket.on(Socket.EVENT_CONNECT, new Listener() {
445459
@Override
446460
public void call(Object... objects) {
447-
s.id = self.engine.id();
461+
s.id = self.generateId(nsp);
448462
}
449463
});
450464
}
@@ -506,6 +520,7 @@ private void cleanup() {
506520

507521
On.Handle sub;
508522
while ((sub = this.subs.poll()) != null) sub.destroy();
523+
this.decoder.onDecoded(null);
509524

510525
this.packetBuffer.clear();
511526
this.encoding = false;
@@ -631,6 +646,8 @@ public static class Options extends io.socket.engineio.client.Socket.Options {
631646
public long reconnectionDelay;
632647
public long reconnectionDelayMax;
633648
public double randomizationFactor;
649+
public Parser.Encoder encoder;
650+
public Parser.Decoder decoder;
634651

635652
/**
636653
* Connection timeout (ms). Set -1 to disable.

src/main/java/io/socket/client/Socket.java

Lines changed: 40 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
package io.socket.client;
22

33
import io.socket.emitter.Emitter;
4-
import io.socket.hasbinary.HasBinary;
54
import io.socket.parser.Packet;
65
import io.socket.parser.Parser;
76
import io.socket.thread.EventThread;
87
import org.json.JSONArray;
98
import org.json.JSONException;
109
import org.json.JSONObject;
1110

12-
import java.util.*;
11+
import java.util.ArrayList;
12+
import java.util.Arrays;
13+
import java.util.HashMap;
14+
import java.util.LinkedList;
15+
import java.util.List;
16+
import java.util.Map;
17+
import java.util.Queue;
1318
import java.util.logging.Level;
1419
import java.util.logging.Logger;
1520

@@ -79,12 +84,12 @@ public class Socket extends Emitter {
7984
}};
8085

8186
/*package*/ String id;
82-
/*package*/ String query;
8387

8488
private volatile boolean connected;
8589
private int ids;
8690
private String nsp;
8791
private Manager io;
92+
private String query;
8893
private Map<Integer, Ack> acks = new HashMap<Integer, Ack>();
8994
private Queue<On.Handle> subs;
9095
private final Queue<List<Object>> receiveBuffer = new LinkedList<List<Object>>();
@@ -182,51 +187,27 @@ public void run() {
182187
return;
183188
}
184189

185-
List<Object> _args = new ArrayList<Object>(args.length + 1);
186-
_args.add(event);
187-
_args.addAll(Arrays.asList(args));
190+
Ack ack;
191+
Object[] _args;
192+
int lastIndex = args.length - 1;
188193

189-
JSONArray jsonArgs = new JSONArray();
190-
for (Object arg : _args) {
191-
jsonArgs.put(arg);
192-
}
193-
int parserType = HasBinary.hasBinary(jsonArgs) ? Parser.BINARY_EVENT : Parser.EVENT;
194-
Packet<JSONArray> packet = new Packet<JSONArray>(parserType, jsonArgs);
195-
196-
if (_args.get(_args.size() - 1) instanceof Ack) {
197-
logger.fine(String.format("emitting packet with ack id %d", Socket.this.ids));
198-
Socket.this.acks.put(Socket.this.ids, (Ack)_args.remove(_args.size() - 1));
199-
jsonArgs = remove(jsonArgs, jsonArgs.length() - 1);
200-
packet.data = jsonArgs;
201-
packet.id = Socket.this.ids++;
202-
}
203-
204-
if (Socket.this.connected) {
205-
Socket.this.packet(packet);
194+
if (args.length > 0 && args[lastIndex] instanceof Ack) {
195+
_args = new Object[lastIndex];
196+
for (int i = 0; i < lastIndex; i++) {
197+
_args[i] = args[i];
198+
}
199+
ack = (Ack) args[lastIndex];
206200
} else {
207-
Socket.this.sendBuffer.add(packet);
201+
_args = args;
202+
ack = null;
208203
}
204+
205+
emit(event, _args, ack);
209206
}
210207
});
211208
return this;
212209
}
213210

214-
private static JSONArray remove(JSONArray a, int pos) {
215-
JSONArray na = new JSONArray();
216-
for (int i = 0; i < a.length(); i++){
217-
if (i != pos) {
218-
Object v;
219-
try {
220-
v = a.get(i);
221-
} catch (JSONException e) {
222-
v = null;
223-
}
224-
na.put(v);
225-
}
226-
}
227-
return na;
228-
}
229-
230211
/**
231212
* Emits an event with an acknowledge.
232213
*
@@ -239,25 +220,28 @@ public Emitter emit(final String event, final Object[] args, final Ack ack) {
239220
EventThread.exec(new Runnable() {
240221
@Override
241222
public void run() {
242-
List<Object> _args = new ArrayList<Object>() {{
243-
add(event);
244-
if (args != null) {
245-
addAll(Arrays.asList(args));
246-
}
247-
}};
248-
249223
JSONArray jsonArgs = new JSONArray();
250-
for (Object _arg : _args) {
251-
jsonArgs.put(_arg);
224+
jsonArgs.put(event);
225+
226+
if (args != null) {
227+
for (Object arg : args) {
228+
jsonArgs.put(arg);
229+
}
252230
}
253-
int parserType = HasBinary.hasBinary(jsonArgs) ? Parser.BINARY_EVENT : Parser.EVENT;
254-
Packet<JSONArray> packet = new Packet<JSONArray>(parserType, jsonArgs);
255231

256-
logger.fine(String.format("emitting packet with ack id %d", ids));
257-
Socket.this.acks.put(ids, ack);
258-
packet.id = ids++;
232+
Packet<JSONArray> packet = new Packet<JSONArray>(Parser.EVENT, jsonArgs);
233+
234+
if (ack != null) {
235+
logger.fine(String.format("emitting packet with ack id %d", ids));
236+
Socket.this.acks.put(ids, ack);
237+
packet.id = ids++;
238+
}
259239

260-
Socket.this.packet(packet);
240+
if (Socket.this.connected) {
241+
Socket.this.packet(packet);
242+
} else {
243+
Socket.this.sendBuffer.add(packet);
244+
}
261245
}
262246
});
263247
return this;
@@ -377,9 +361,7 @@ public void run() {
377361
jsonArgs.put(arg);
378362
}
379363

380-
int type = HasBinary.hasBinary(jsonArgs)
381-
? Parser.BINARY_ACK : Parser.ACK;
382-
Packet<JSONArray> packet = new Packet<JSONArray>(type, jsonArgs);
364+
Packet<JSONArray> packet = new Packet<JSONArray>(Parser.ACK, jsonArgs);
383365
packet.id = id;
384366
self.packet(packet);
385367
}

0 commit comments

Comments
 (0)