fix #8 Ack without params causes MissingFormatArgumentException
This commit is contained in:
@@ -295,15 +295,20 @@ public class Socket extends Emitter {
|
|||||||
final boolean[] sent = new boolean[] {false};
|
final boolean[] sent = new boolean[] {false};
|
||||||
return new Ack() {
|
return new Ack() {
|
||||||
@Override
|
@Override
|
||||||
public synchronized void call(Object... args) {
|
public void call(final Object... args) {
|
||||||
if (sent[0]) return;
|
EventThread.exec(new Runnable() {
|
||||||
sent[0] = true;
|
@Override
|
||||||
logger.fine(String.format("sending ack %s", args));
|
public void run() {
|
||||||
|
if (sent[0]) return;
|
||||||
|
sent[0] = true;
|
||||||
|
logger.fine(String.format("sending ack %s", args.length != 0 ? args : null));
|
||||||
|
|
||||||
int type = HasBinaryData.hasBinary(args) ? Parser.BINARY_ACK : Parser.ACK;
|
int type = HasBinaryData.hasBinary(args) ? Parser.BINARY_ACK : Parser.ACK;
|
||||||
Packet<JSONArray> packet = new Packet<JSONArray>(type, new JSONArray(Arrays.asList(args)));
|
Packet<JSONArray> packet = new Packet<JSONArray>(type, new JSONArray(Arrays.asList(args)));
|
||||||
packet.id = id;
|
packet.id = id;
|
||||||
self.packet(packet);
|
self.packet(packet);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,8 +9,7 @@ import org.junit.runners.JUnit4;
|
|||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.util.concurrent.Semaphore;
|
import java.util.concurrent.Semaphore;
|
||||||
|
|
||||||
import static org.hamcrest.CoreMatchers.is;
|
import static org.hamcrest.CoreMatchers.*;
|
||||||
import static org.hamcrest.CoreMatchers.nullValue;
|
|
||||||
import static org.junit.Assert.assertThat;
|
import static org.junit.Assert.assertThat;
|
||||||
|
|
||||||
@RunWith(JUnit4.class)
|
@RunWith(JUnit4.class)
|
||||||
@@ -25,12 +24,15 @@ public class ServerConnectionTest extends Connection {
|
|||||||
socket = client();
|
socket = client();
|
||||||
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
|
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
|
||||||
@Override
|
@Override
|
||||||
public void call(Object... objects) {
|
public void call(Object... args) {
|
||||||
|
assertThat(args.length, is(0));
|
||||||
socket.disconnect();
|
socket.disconnect();
|
||||||
}
|
}
|
||||||
}).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
|
}).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
|
||||||
@Override
|
@Override
|
||||||
public void call(Object... objects) {
|
public void call(Object... args) {
|
||||||
|
assertThat(args.length, is(1));
|
||||||
|
assertThat(args[0], is(instanceOf(String.class)));
|
||||||
semaphore.release();
|
semaphore.release();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -138,7 +140,7 @@ public class ServerConnectionTest extends Connection {
|
|||||||
socket.emit("ack", null, new Ack() {
|
socket.emit("ack", null, new Ack() {
|
||||||
@Override
|
@Override
|
||||||
public void call(Object... args) {
|
public void call(Object... args) {
|
||||||
assertThat(args, is(new Object[] {}));
|
assertThat(args.length, is(0));
|
||||||
socket.disconnect();
|
socket.disconnect();
|
||||||
semaphore.release();
|
semaphore.release();
|
||||||
}
|
}
|
||||||
@@ -148,4 +150,35 @@ public class ServerConnectionTest extends Connection {
|
|||||||
socket.connect();
|
socket.connect();
|
||||||
semaphore.acquire();
|
semaphore.acquire();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(timeout = TIMEOUT)
|
||||||
|
public void ackWithoutArgsFromClient() throws URISyntaxException, InterruptedException {
|
||||||
|
final Semaphore semaphore = new Semaphore(0);
|
||||||
|
|
||||||
|
socket = client();
|
||||||
|
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
|
||||||
|
@Override
|
||||||
|
public void call(Object... objects) {
|
||||||
|
socket.on("ack", new Emitter.Listener() {
|
||||||
|
@Override
|
||||||
|
public void call(Object... args) {
|
||||||
|
assertThat(args.length, is(1));
|
||||||
|
assertThat(args[0], is(instanceOf(Ack.class)));
|
||||||
|
Ack ack = (Ack)args[0];
|
||||||
|
ack.call();
|
||||||
|
}
|
||||||
|
}).on("ackBack", new Emitter.Listener() {
|
||||||
|
@Override
|
||||||
|
public void call(Object... args) {
|
||||||
|
assertThat(args.length, is(0));
|
||||||
|
socket.disconnect();
|
||||||
|
semaphore.release();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
socket.emit("callAck");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
socket.connect();
|
||||||
|
semaphore.acquire();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user