Example #1
0
        public void OnGameOver(byte playerId)
        {
            Send(new NetworkPacketId(NetworkPacketTypes.GameOver, playerId));

            MushroomAI.Stop();
            PigAI.Stop();
        }
Example #2
0
        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);
        }
Example #3
0
        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();
        }