internal void HandlePacket(Packet packet)
{
Action<string> ack = args => m_socket.SendPacket(new Packet { Type = PacketType.Ack, Args = args, AckId = packet.Id });
switch (packet.Type)
{
case PacketType.Connect:
EmitLocally("connect");
break;
case PacketType.Disconnect:
EmitLocally("disconnect", packet.Reason);
break;
case PacketType.Message:
case PacketType.Json:
if (packet.Ack != null && packet.Ack != "data")
{
ack(null);
}
EmitLocally("message", packet.Data, packet.Ack == "data" ? ack : null);
break;
case PacketType.Event:
var args = JsonConvert.DeserializeObject<object[]>(packet.Args);
EmitLocally(packet.Name, args, packet.Ack == "data" ? ack : null);
break;
case PacketType.Ack:
if (m_acks.ContainsKey(packet.AckId))
{
var ackToCall = m_acks[packet.AckId];
m_acks.Remove(packet.AckId);
ackToCall(packet.Args);
}
break;
case PacketType.Error:
EmitLocally(packet.Reason == "unauthorized" ? "connect_failed" : "error", packet.Reason);
break;
}
}