/// <summary> /// Intializes the player identification with CWSRestart /// </summary> /// <param name="c"></param> private static void EnablePlayerIdentification(CWSProtocol.Client c) { string database; if ((database = c.GetPlayersDatabase()) != null && c.SetPlayerIdentification(true)) { Helper.Settings.Instance.Logger.AddMessage(MessageType.INFO, String.Format("Playerdatabase: {0}", database)); knownPlayers = new KnownPlayers(database); knownPlayers.ClearConnectedPlayers(); foreach (KeyValuePair <string, MITMMessageHandler> kvp in ConnectedPlayers) { knownPlayers.AddConnectedPlayer(kvp.Value.IP, kvp.Value.Name); } #if DEBUG knownPlayers.AddKnownPlayer("192.168.178.1", "Name 1-1"); knownPlayers.AddKnownPlayer("192.168.178.2", "Name 2-2"); knownPlayers.AddKnownPlayer("192.168.178.2", "Name 3-2"); knownPlayers.AddKnownPlayer("192.168.178.3", "Name 4-3"); knownPlayers.AddKnownPlayer("192.168.178.3", "Name 5-3"); knownPlayers.AddKnownPlayer("192.168.178.5", "Name 6-5"); #endif } }
private static MITMMessageHandler prepareClient(TcpClient client) { wait.Set(); TcpClient toServer = new TcpClient(); toServer.Connect(cubeWorldIP, (int)serverPort); NetworkStream clientStream = client.GetStream(); NetworkStream serverStream = toServer.GetStream(); IPAddress clientIP = ((IPEndPoint)client.Client.RemoteEndPoint).Address; Helper.Settings.Instance.Logger.AddMessage(Utilities.Logging.MessageType.INFO, String.Format("{1} connected to {0}", client.Client.LocalEndPoint.ToString(), clientIP.ToString())); MITMMessageHandler handler = new MITMMessageHandler(clientStream, serverStream, clientIP.ToString()); handler.OnClientDisconnected = new Action <MITMMessageHandler>(h => { if (ConnectedPlayers.ContainsKey(h.IP)) { ConnectedPlayers.Remove(h.IP); } if (PremiumPlayers.ContainsKey(h.IP)) { PremiumPlayers.Remove(h.IP); } if (knownPlayers != null) { knownPlayers.RemoveConnectedPlayer(h.IP); } }); handler.OnClientIdentified = new Action <MITMMessageHandler>(h => { if (KnownNames.ContainsKey(h.IP) && !KnownNames[h.IP].Contains(h.Name)) { KnownNames[h.IP].Add(h.Name); } else if (!KnownNames.ContainsKey(h.IP)) { List <string> tmp = new List <string>(); tmp.Add(h.Name); KnownNames.Add(h.IP, tmp); } if (knownPlayers != null) { if (ConnectedPlayers.ContainsKey(h.IP)) { knownPlayers.AddConnectedPlayer(h.IP, h.Name); } knownPlayers.AddKnownPlayer(h.IP, h.Name); } if (!playerAllowed(h.Level, h.HP, h.IP)) { h.Disconnect(); Helper.Settings.Instance.Logger.AddMessage(Utilities.Logging.MessageType.INFO, String.Format("{0} was kicked, because his character is not allowed (HP:{2}, Level:{1}).", h.Name, h.Level, h.HP)); } }); if (ConnectedPlayers.ContainsKey(handler.IP)) { ConnectedPlayers[handler.IP].Disconnect(); ConnectedPlayers.Remove(handler.IP); } return(handler); }