diff --git a/src/main/java/io/socket/client/Socket.java b/src/main/java/io/socket/client/Socket.java index c309030..0adbcc3 100644 --- a/src/main/java/io/socket/client/Socket.java +++ b/src/main/java/io/socket/client/Socket.java @@ -182,51 +182,27 @@ public class Socket extends Emitter { return; } - List _args = new ArrayList(args.length + 1); - _args.add(event); - _args.addAll(Arrays.asList(args)); + Ack ack; + Object[] _args; + int lastIndex = args.length - 1; - JSONArray jsonArgs = new JSONArray(); - for (Object arg : _args) { - jsonArgs.put(arg); - } - int parserType = HasBinary.hasBinary(jsonArgs) ? Parser.BINARY_EVENT : Parser.EVENT; - Packet packet = new Packet(parserType, jsonArgs); - - 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); + if (args.length > 0 && args[lastIndex] instanceof Ack) { + _args = new Object[lastIndex]; + for (int i = 0; i < lastIndex; i++) { + _args[i] = args[i]; + } + ack = (Ack) args[lastIndex]; } else { - Socket.this.sendBuffer.add(packet); + _args = args; + ack = null; } + + emit(event, _args, ack); } }); 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. * @@ -239,25 +215,28 @@ public class Socket extends Emitter { EventThread.exec(new Runnable() { @Override public void run() { - List _args = new ArrayList() {{ - add(event); - if (args != null) { - addAll(Arrays.asList(args)); - } - }}; - JSONArray jsonArgs = new JSONArray(); - for (Object _arg : _args) { - jsonArgs.put(_arg); + jsonArgs.put(event); + + if (args != null) { + for (Object arg : args) { + jsonArgs.put(arg); + } } - int parserType = HasBinary.hasBinary(jsonArgs) ? Parser.BINARY_EVENT : Parser.EVENT; - Packet packet = new Packet(parserType, jsonArgs); - logger.fine(String.format("emitting packet with ack id %d", ids)); - Socket.this.acks.put(ids, ack); - packet.id = ids++; + Packet packet = new Packet(Parser.EVENT, jsonArgs); - 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; @@ -371,9 +350,7 @@ public class Socket extends Emitter { jsonArgs.put(arg); } - int type = HasBinary.hasBinary(jsonArgs) - ? Parser.BINARY_ACK : Parser.ACK; - Packet packet = new Packet(type, jsonArgs); + Packet packet = new Packet(Parser.ACK, jsonArgs); packet.id = id; self.packet(packet); }