11package io .socket .client ;
22
33import io .socket .emitter .Emitter ;
4- import io .socket .hasbinary .HasBinary ;
54import io .socket .parser .Packet ;
65import io .socket .parser .Parser ;
76import io .socket .thread .EventThread ;
87import org .json .JSONArray ;
98import org .json .JSONException ;
109import 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 ;
1318import java .util .logging .Level ;
1419import 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