package com.esotericsoftware.kryonet;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicInteger;
import com.esotericsoftware.kryo.Kryo;
public class BufferTest extends KryoNetTestCase {
AtomicInteger received = new AtomicInteger();
AtomicInteger receivedBytes = new AtomicInteger();
public void testManyLargeMessages () throws IOException {
final int messageCount = 1024;
int objectBufferSize = 10250;
int writeBufferSize = 10250 * messageCount;
Server server = new Server(writeBufferSize, objectBufferSize);
startEndPoint(server);
register(server.getKryo());
server.bind(tcpPort);
server.addListener(new Listener() {
AtomicInteger received = new AtomicInteger();
AtomicInteger receivedBytes = new AtomicInteger();
public void received (Connection connection, Object object) {
if (object instanceof LargeMessage) {
System.out.println("Server sending message: " + received.get());
connection.sendTCP(object);
receivedBytes.addAndGet(((LargeMessage)object).bytes.length);
int count = received.incrementAndGet();
System.out.println("Server received " + count + " messages.");
if (count == messageCount) {
System.out.println("Server received all " + messageCount + " messages!");
System.out.println("Server received and sent " + receivedBytes.get() + " bytes.");
}
}
}
});
final Client client = new Client(writeBufferSize, objectBufferSize);
startEndPoint(client);
register(client.getKryo());
client.connect(5000, host, tcpPort);
client.addListener(new Listener() {
AtomicInteger received = new AtomicInteger();
AtomicInteger receivedBytes = new AtomicInteger();
public void received (Connection connection, Object object) {
if (object instanceof LargeMessage) {
int count = received.incrementAndGet();
System.out.println("Client received " + count + " messages.");
if (count == messageCount) {
System.out.println("Client received all " + messageCount + " messages!");
System.out.println("Client received and sent " + receivedBytes.get() + " bytes.");
stopEndPoints();
}
}
}
});
byte[] b = new byte[1024 * 10];
for (int i = 0; i < messageCount; i++) {
System.out.println("Client sending: " + i);
client.sendTCP(new LargeMessage(b));
}
System.out.println("Client has queued " + messageCount + " messages.");
waitForThreads(5000);
}
private void register (Kryo kryo) {
kryo.register(byte[].class);
kryo.register(LargeMessage.class);
}
public static class LargeMessage {
public byte[] bytes;
public LargeMessage () {
}
public LargeMessage (byte[] bytes) {
this.bytes = bytes;
}
}
}