public void OnGameOver(byte playerId) { Send(new NetworkPacketId(NetworkPacketTypes.GameOver, playerId)); MushroomAI.Stop(); PigAI.Stop(); }
public void OnClientFinish(Client client) { Client outClient; while (!Clients.TryRemove(client.PlayerId, out outClient)) { Thread.Sleep(1); } Send(new NetworkPacketRemovePlayer(client.PlayerId), client); MushroomAI.OnClientFinish(client); PigAI.OnClientFinish(client); TrapManager.OnClientFinish(this, client); }
public Server() { Clients = new ConcurrentDictionary <byte, Client>(Config.MaxPlayers + 1, Config.MaxPlayers); Terrain = new Terrain(); VegetationManager = new VegetationManager(Terrain); ItemsManager = new ItemsManager(this); PigAI = new PigAI(this); MushroomAI = new MushroomAI(this); TrapManager = new TrapManager(); try { var server = new Socket(AddressFamily.Unspecified, Config.SocketType, Config.ProtocolType); server.Bind(new IPEndPoint(IPAddress.Any, Config.Port)); server.Listen(Config.Backlog); Console.WriteLine("Server started. Waiting for Clients..."); new Thread(PigAI.Start).Start(); new Thread(MushroomAI.Start).Start(); while (true) { Socket socket = server.Accept(); byte playerId = 0; while (Clients.Keys.Contains(playerId)) { playerId++; } if (playerId > Config.MaxPlayers) { continue; } var newClient = new Client(this, socket, playerId); foreach (Client client in Clients.Values) { newClient.Send(new NetworkPacketAddPlayer(client.PlayerId, Config.PlayerColors[client.PlayerId], Config.RainbowPositions[client.PlayerId])); } Send(new NetworkPacketAddPlayer(newClient.PlayerId, Config.PlayerColors[newClient.PlayerId], Config.RainbowPositions[newClient.PlayerId])); while (!Clients.TryAdd(playerId, newClient)) { Thread.Sleep(1); } new Thread(newClient.Start).Start(); } } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.ReadKey(); }