private void HandleJoinTunnelRequest(TcpSession session, Packet p) { var tunnelID = p.ReadUInt32(); var slotID = p.ReadByte(); //_logger.Debug("-C_JOIN_TUNNEL_REQ- Slot: {0} Tunnel: {1}", slotID, tunnelID); Player plr; if (!_players.TryGetValue(session.Guid, out plr)) { session.StopListening(); return; } Room room; if (!_rooms.TryGetValue(tunnelID, out room)) { room = new Room(_rooms, EServerType.Relay) { TunnelID = tunnelID }; _rooms.TryAdd(tunnelID, room); } room.Join(plr); plr.SlotID = slotID; var ack = new Packet(ERelayPacket.SResultAck); ack.Write((uint)3); // error code session.Send(ack); }