package com.github.czyzby.websocket;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.utils.Array;
import com.github.czyzby.kiwi.util.gdx.collection.GdxArrays;
import com.github.czyzby.shared.serialization.ClientArrayMessage;
import com.github.czyzby.shared.serialization.ClientListMessage;
import com.github.czyzby.shared.serialization.ClientMessage;
import com.github.czyzby.shared.serialization.Packets;
import com.github.czyzby.shared.serialization.ServerResponse;
import com.github.czyzby.websocket.WebSocketHandler.Handler;
import com.github.czyzby.websocket.serialization.impl.ManualSerializer;
/** Tests {@link ManualSerializer}.
*
* @author MJ */
public class SerializationWebSocketTest extends AbstractWebSocketTest {
@Override
protected int getPort() {
return 8002;
}
@Override
public void send(final String message) {
sendPacket(new ClientMessage(message));
}
@Override
public void send(final String[] message) {
sendPacket(new ClientArrayMessage(message));
}
@Override
public void send(final String message, int times) {
final Array<ClientMessage> messages = GdxArrays.newArray(ClientMessage.class);
while (times-- > 0) {
messages.add(new ClientMessage(message));
}
sendPacket(new ClientListMessage(messages));
}
private void sendPacket(final Object packet) {
final long start = System.currentTimeMillis();
final byte[] serialized = getSocket().getSerializer().serialize(packet);
final long time = System.currentTimeMillis() - start;
Gdx.app.log("gdx-websocket-serialization", "Serialized packet in " + time + " millies.");
getSocket().send(serialized);
}
@Override
protected void registerSerializer(final WebSocket socket) {
final ManualSerializer serializer = new ManualSerializer();
Packets.register(serializer);
socket.setSerializer(serializer);
}
@Override
protected WebSocketListener createListener() {
final WebSocketHandler handler = new WebSocketHandler();
handler.registerHandler(ServerResponse.class, new Handler<ServerResponse>() {
@Override
public boolean handle(final WebSocket webSocket, final ServerResponse packet) {
getListener().onMessage(packet.getMessage());
return WebSocketHandler.FULLY_HANDLED;
}
});
return handler;
}
}