improve Socket#emit

This commit is contained in:
nkzawa
2017-07-14 00:09:44 +09:00
parent b1935ea6b3
commit 06068654c3

View File

@@ -182,51 +182,27 @@ public class Socket extends Emitter {
return; return;
} }
List<Object> _args = new ArrayList<Object>(args.length + 1); Ack ack;
_args.add(event); Object[] _args;
_args.addAll(Arrays.asList(args)); int lastIndex = args.length - 1;
JSONArray jsonArgs = new JSONArray(); if (args.length > 0 && args[lastIndex] instanceof Ack) {
for (Object arg : _args) { _args = new Object[lastIndex];
jsonArgs.put(arg); for (int i = 0; i < lastIndex; i++) {
} _args[i] = args[i];
int parserType = HasBinary.hasBinary(jsonArgs) ? Parser.BINARY_EVENT : Parser.EVENT; }
Packet<JSONArray> packet = new Packet<JSONArray>(parserType, jsonArgs); ack = (Ack) args[lastIndex];
if (_args.get(_args.size() - 1) instanceof Ack) {
logger.fine(String.format("emitting packet with ack id %d", Socket.this.ids));
Socket.this.acks.put(Socket.this.ids, (Ack)_args.remove(_args.size() - 1));
jsonArgs = remove(jsonArgs, jsonArgs.length() - 1);
packet.data = jsonArgs;
packet.id = Socket.this.ids++;
}
if (Socket.this.connected) {
Socket.this.packet(packet);
} else { } else {
Socket.this.sendBuffer.add(packet); _args = args;
ack = null;
} }
emit(event, _args, ack);
} }
}); });
return this; return this;
} }
private static JSONArray remove(JSONArray a, int pos) {
JSONArray na = new JSONArray();
for (int i = 0; i < a.length(); i++){
if (i != pos) {
Object v;
try {
v = a.get(i);
} catch (JSONException e) {
v = null;
}
na.put(v);
}
}
return na;
}
/** /**
* Emits an event with an acknowledge. * Emits an event with an acknowledge.
* *
@@ -239,25 +215,28 @@ public class Socket extends Emitter {
EventThread.exec(new Runnable() { EventThread.exec(new Runnable() {
@Override @Override
public void run() { public void run() {
List<Object> _args = new ArrayList<Object>() {{
add(event);
if (args != null) {
addAll(Arrays.asList(args));
}
}};
JSONArray jsonArgs = new JSONArray(); JSONArray jsonArgs = new JSONArray();
for (Object _arg : _args) { jsonArgs.put(event);
jsonArgs.put(_arg);
if (args != null) {
for (Object arg : args) {
jsonArgs.put(arg);
}
} }
int parserType = HasBinary.hasBinary(jsonArgs) ? Parser.BINARY_EVENT : Parser.EVENT;
Packet<JSONArray> packet = new Packet<JSONArray>(parserType, jsonArgs);
logger.fine(String.format("emitting packet with ack id %d", ids)); Packet<JSONArray> packet = new Packet<JSONArray>(Parser.EVENT, jsonArgs);
Socket.this.acks.put(ids, ack);
packet.id = ids++;
Socket.this.packet(packet); if (ack != null) {
logger.fine(String.format("emitting packet with ack id %d", ids));
Socket.this.acks.put(ids, ack);
packet.id = ids++;
}
if (Socket.this.connected) {
Socket.this.packet(packet);
} else {
Socket.this.sendBuffer.add(packet);
}
} }
}); });
return this; return this;
@@ -371,9 +350,7 @@ public class Socket extends Emitter {
jsonArgs.put(arg); jsonArgs.put(arg);
} }
int type = HasBinary.hasBinary(jsonArgs) Packet<JSONArray> packet = new Packet<JSONArray>(Parser.ACK, jsonArgs);
? Parser.BINARY_ACK : Parser.ACK;
Packet<JSONArray> packet = new Packet<JSONArray>(type, jsonArgs);
packet.id = id; packet.id = id;
self.packet(packet); self.packet(packet);
} }