| 369 | } |
| 370 | |
| 371 | private Ack ack(final int id) { |
| 372 | final Socket self = this; |
| 373 | final boolean[] sent = new boolean[] {false}; |
| 374 | return new Ack() { |
| 375 | @Override |
| 376 | public void call(final Object... args) { |
| 377 | EventThread.exec(new Runnable() { |
| 378 | @Override |
| 379 | public void run() { |
| 380 | if (sent[0]) return; |
| 381 | sent[0] = true; |
| 382 | if (logger.isLoggable(Level.FINE)) { |
| 383 | logger.fine(String.format("sending ack %s", args.length != 0 ? args : null)); |
| 384 | } |
| 385 | |
| 386 | JSONArray jsonArgs = new JSONArray(); |
| 387 | for (Object arg : args) { |
| 388 | jsonArgs.put(arg); |
| 389 | } |
| 390 | |
| 391 | Packet<JSONArray> packet = new Packet<>(Parser.ACK, jsonArgs); |
| 392 | packet.id = id; |
| 393 | self.packet(packet); |
| 394 | } |
| 395 | }); |
| 396 | } |
| 397 | }; |
| 398 | } |
| 399 | |
| 400 | private void onack(Packet<JSONArray> packet) { |
| 401 | Ack fn = this.acks.remove(packet.id); |