package se.rhel.server;
import se.rhel.Connection;
import se.rhel.Server;
import se.rhel.observer.ServerObserver;
import se.rhel.packet.BasePacketHandler;
import se.rhel.packet.ConnectionDetailPacket;
import se.rhel.packet.IdlePacket;
import se.rhel.packet.LatencyPacket;
/**
* Created by rkh on 2014-03-05.
*/
public class ServerPacketHandler extends BasePacketHandler {
Server mServer;
public ServerPacketHandler(Server server) {
mServer = server;
}
@Override
public synchronized void handlePacket(byte[] data) {
super.handlePacket(data);
Connection fromConnection;// = mServer.getConnection(mBuf.getInt());
if (mObj instanceof IdlePacket) {
IdlePacket ip = (IdlePacket)mObj;
fromConnection = mServer.getConnection(ip.mPlayerId);
fromConnection.packageReceived();
}
else if (mObj instanceof LatencyPacket) {
//Sending a dummy response, i.e for latency measurement
LatencyPacket lp = (LatencyPacket)mObj;
fromConnection = mServer.getConnection(lp.mPlayerId);
mServer.sendTCP(new LatencyPacket(0), fromConnection);
}
else if (mObj instanceof ConnectionDetailPacket) {
ConnectionDetailPacket cdp = (ConnectionDetailPacket)mObj;
Connection c = mServer.getConnection(cdp.mPlayerId);
c.setUdpPort(cdp.mUdpPort);
}
else {
int id = mUnknownPacket.getInt();
fromConnection = mServer.getConnection(id);
((ServerObserver)mObserver).received(fromConnection, mObj);
}
}
}