package com.esotericsoftware.kryonet;
import java.io.IOException;
import java.util.Arrays;
import com.esotericsoftware.kryo.Kryo;
public class MultipleThreadTest extends KryoNetTestCase {
int receivedServer, receivedClient1, receivedClient2;
public void testMultipleThreads () throws IOException {
receivedServer = 0;
final int messageCount = 10;
final int threads = 5;
final int sleepMillis = 50;
final int clients = 3;
final Server server = new Server(16384, 8192);
server.getKryo().register(String[].class);
startEndPoint(server);
server.bind(tcpPort, udpPort);
server.addListener(new Listener() {
public void received (Connection connection, Object object) {
receivedServer++;
if (receivedServer == messageCount * clients) stopEndPoints();
}
});
// ----
for (int i = 0; i < clients; i++) {
Client client = new Client(16384, 8192);
client.getKryo().register(String[].class);
startEndPoint(client);
client.addListener(new Listener() {
int received;
public void received (Connection connection, Object object) {
if (object instanceof String) {
received++;
if (received == messageCount * threads) {
for (int i = 0; i < messageCount; i++) {
connection.sendTCP("message" + i);
try {
Thread.sleep(50);
} catch (InterruptedException ignored) {
}
}
}
}
}
});
client.connect(5000, host, tcpPort, udpPort);
}
for (int i = 0; i < threads; i++) {
new Thread() {
public void run () {
Connection[] connections = server.getConnections();
for (int i = 0; i < messageCount; i++) {
for (int ii = 0, n = connections.length; ii < n; ii++)
connections[ii].sendTCP("message" + i);
try {
Thread.sleep(sleepMillis);
} catch (InterruptedException ignored) {
}
}
}
}.start();
}
waitForThreads(5000);
assertEquals(messageCount * clients, receivedServer);
}
}