static void ClientRead(Server s, Client c, byte[] e)
{
try
{
//Anti-flood measures.
if (c.Value.IsFlooding())
{
c.Disconnect();
return;
}
object[] values = Packer.Deserialize(e);
if (values == null)
return;
ClientPacket packet = (ClientPacket)values[0];
if (c.Value.Authenticated && c.Value.Verified)
{
switch (packet)
{
case ClientPacket.Channel:
HandleWakeup(c, true); //Supress the packet send here since we are changing rooms anyways.
HandleChannelPacket(c, (byte)values[1]);
break;
case ClientPacket.ChatMessage:
HandleWakeup(c);
HandleChatPacket(c, (string)values[1]);
break;
case ClientPacket.PM:
HandleWakeup(c);
HandlePMPacket(c, (string)values[1], (string)values[2], (string)values[3], values.Length == 5 ? (ushort)values[4] : default(ushort));
break;
case ClientPacket.KeepAlive:
HandleKeepAlivePacket(c);
break;
case ClientPacket.News:
HandleNewsPacket(c);
break;
case ClientPacket.ViewProfile:
HandleViewProfilePacket(c, (string)values[1]);
break;
case ClientPacket.EditProfile:
HandleEditProfilePacket(c, (string)values[1], (string)values[2], (string)values[3]);
break;
case ClientPacket.AuthCode:
HandleAuthCodePacket(c, (string) values[1]);
break;
}
}
else
{
switch (packet)
{
case ClientPacket.SignIn:
HandleSignInPacket(c, (string)values[1], (string)values[2]);
break;
case ClientPacket.Register:
HandleRegisterPacket(c, (string)values[1], (string)values[2], (string)values[3]);
break;
case ClientPacket.ResendVerification:
HandleResendVerificationPacket(c);
break;
case ClientPacket.AuthCode:
HandleAuthCodePacket(c, (string) values[1]);
break;
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
c.Disconnect();
}
}