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; } }