Пример #1
0
 public ClientCommand AcceptClientCommand()
 {
     TcpClient newTcpClient;
     newTcpClient = AcceptTcpClient();
     if (newTcpClient != null)
     {
         ClientCommand newClientCommand = new ClientCommand(newTcpClient);
         return newClientCommand;
     }
     else
     {
         return null;
     }
 }
Пример #2
0
        public ClientCommand AcceptClientCommand()
        {
            TcpClient newTcpClient;

            newTcpClient = AcceptTcpClient();
            if (newTcpClient != null)
            {
                ClientCommand newClientCommand = new ClientCommand(newTcpClient);
                return(newClientCommand);
            }
            else
            {
                return(null);
            }
        }
Пример #3
0
        public void Process(ClientCommand client)
        {
            BaseCommand bcmd = client.ReceiveLastCommand();

            switch (bcmd.ID)
            {
            case 2:
                Intro    command = bcmd as Intro;
                Response answer  = null;
                if (dataOfThisGame.phaseOfGame == phase.game || dataOfThisGame.phaseOfGame == phase.result)
                {
                    answer = new Response("notok", "Game has already start");
                    client.SendNewCommand(answer as BaseCommand);
                    break;
                }
                bool flag = true;

                foreach (KeyValuePair <int, string> player in listOfPlayersAndTheirNickname)
                {
                    if (player.Value == command.Name)
                    {
                        answer = new Response("notok", "Player with this nickname already exists");
                        client.SendNewCommand(answer as BaseCommand);
                        flag = false;
                        break;
                    }
                }
                if (flag)
                {
                    answer = new Response("ok", "welcome, " + command.Name);
                    listOfPlayersAndTheirNickname.Add(client.id, command.Name);
                    clients[client.id].CurrentStatus = status.on;
                    dataOfThisGame.AddNewPlayer(command.Name);


                    client.SendNewCommand(answer as BaseCommand);
                    client.SendNewCommand(dataOfThisGame.FormCommandOfTimeLeft() as BaseCommand);

                    for (int i = 1; i < ClientCommand.nextID; i++)
                    {
                        if (clients.ContainsKey(i) && clients[i].CurrentStatus == status.on)
                        {
                            clients[i].SendNewCommand(dataOfThisGame.FormCommandOfPlayersList() as BaseCommand);
                            //Костыль. Почему так????????
                            Thread.Sleep(100);
                        }
                    }
                }

                break;

            case 4:
                Chat messageCommand = bcmd as Chat;
                Chat messageFromServer;
                messageFromServer = new Chat(messageCommand.Text.ToUpper());
                client.SendNewCommand(messageFromServer as BaseCommand);
                break;

            case 10:
                PlayerMove movement = bcmd as PlayerMove;
                for (int i = 1; i < ClientCommand.nextID; i++)
                {
                    if (clients.ContainsKey(i) && clients[i].CurrentStatus == status.on && client == clients[i])
                    {
                        dataOfThisGame.PlayerMoved(movement.Direction, listOfPlayersAndTheirNickname[i]);
                    }
                }

                for (int i = 1; i <= ClientCommand.nextID; i++)
                {
                    if (clients.ContainsKey(i) && clients[i].CurrentStatus == status.on)
                    {
                        if (client == clients[i])
                        {
                            client.SendNewCommand(dataOfThisGame.FormCommandOfPlayerCoords(listOfPlayersAndTheirNickname[i]) as BaseCommand);
                            client.SendNewCommand(dataOfThisGame.FormCommandOfVisibleObjects(i - 1) as BaseCommand);
                        }
                        clients[i].SendNewCommand(dataOfThisGame.FormCommandOfVisiblePlayers(listOfPlayersAndTheirNickname[i]) as BaseCommand);
                    }
                    Thread.Sleep(100);
                }
                break;

            case 12:
                PlayerDisconnect disconnectCommand = bcmd as PlayerDisconnect;

                for (int j = 1; j <= ClientCommand.nextID; j++)
                {
                    if (clients.ContainsKey(j) && clients[j] == client)
                    {
                        clients[j].Disconnect();
                        clients.Remove(j);
                        Console.WriteLine("Клиент " + listOfPlayersAndTheirNickname[j] + " отключился");
                        dataOfThisGame.DeletePlayer(listOfPlayersAndTheirNickname[j]);
                        listOfPlayersAndTheirNickname.Remove(j);
                    }
                }
                client.Disconnect();
                for (int q = 1; q <= ClientCommand.nextID; q++)
                {
                    if (clients.ContainsKey(q))
                    {
                        clients[q].SendNewCommand(dataOfThisGame.FormCommandOfPlayersList() as BaseCommand);
                        Thread.Sleep(100);
                    }
                }
                break;

            default:
                Console.WriteLine("Неизвестная команда");
                break;
            }
        }
Пример #4
0
        public void Process(ClientCommand client)
        {
            BaseCommand bcmd = client.ReceiveLastCommand();
            switch (bcmd.ID)
            {
                case 2:
                    Intro command = bcmd as Intro;
                    Response answer = null;
                    if (dataOfThisGame.phaseOfGame == phase.game || dataOfThisGame.phaseOfGame == phase.result)
                    {
                        answer = new Response("notok", "Game has already start");
                        client.SendNewCommand(answer as BaseCommand);
                        break;
                    }
                    bool flag = true;

                    foreach (KeyValuePair<int, string> player in listOfPlayersAndTheirNickname)
                    {
                        if (player.Value == command.Name)
                        {
                           answer = new Response("notok", "Player with this nickname already exists");
                           client.SendNewCommand(answer as BaseCommand);
                           flag = false;
                           break;
                        }
                    }
                    if (flag)
                    {
                        answer = new Response("ok", "welcome, " + command.Name);
                        listOfPlayersAndTheirNickname.Add(client.id, command.Name);
                        clients[client.id].CurrentStatus = status.on;
                        dataOfThisGame.AddNewPlayer(command.Name);

                        client.SendNewCommand(answer as BaseCommand);
                        client.SendNewCommand(dataOfThisGame.FormCommandOfTimeLeft() as BaseCommand);

                        for (int i = 1; i < ClientCommand.nextID; i++)
                        {
                            if (clients.ContainsKey(i) && clients[i].CurrentStatus == status.on)
                            {
                                clients[i].SendNewCommand(dataOfThisGame.FormCommandOfPlayersList() as BaseCommand);
                                //Костыль. Почему так????????
                                Thread.Sleep(100);
                            }
                        }

                    }

                    break;
                case 4:
                    Chat messageCommand = bcmd as Chat;
                    Chat messageFromServer;
                    messageFromServer = new Chat(messageCommand.Text.ToUpper());
                    client.SendNewCommand(messageFromServer as BaseCommand);
                    break;
                case 10:
                    PlayerMove movement = bcmd as PlayerMove;
                    for (int i = 1; i < ClientCommand.nextID; i++)
                    {
                        if (clients.ContainsKey(i) && clients[i].CurrentStatus == status.on && client == clients[i])
                        {
                            dataOfThisGame.PlayerMoved(movement.Direction, listOfPlayersAndTheirNickname[i]);
                        }
                    }

                    for (int i = 1; i <= ClientCommand.nextID; i++)
                    {
                        if (clients.ContainsKey(i) && clients[i].CurrentStatus == status.on)
                        {
                            if (client == clients[i])
                            {
                                client.SendNewCommand(dataOfThisGame.FormCommandOfPlayerCoords(listOfPlayersAndTheirNickname[i]) as BaseCommand);
                                client.SendNewCommand(dataOfThisGame.FormCommandOfVisibleObjects(i - 1) as BaseCommand);
                            }
                            clients[i].SendNewCommand(dataOfThisGame.FormCommandOfVisiblePlayers(listOfPlayersAndTheirNickname[i]) as BaseCommand);
                       }
                        Thread.Sleep(100);
                    }
                    break;
                case 12:
                    PlayerDisconnect disconnectCommand = bcmd as PlayerDisconnect;

                    for (int j = 1; j <= ClientCommand.nextID; j++)
                    {
                        if (clients.ContainsKey(j) && clients[j] == client)
                        {
                            clients[j].Disconnect();
                            clients.Remove(j);
                            Console.WriteLine("Клиент " + listOfPlayersAndTheirNickname[j] + " отключился");
                            dataOfThisGame.DeletePlayer(listOfPlayersAndTheirNickname[j]);
                            listOfPlayersAndTheirNickname.Remove(j);
                        }
                    }
                    client.Disconnect();
                    for (int q = 1; q <= ClientCommand.nextID; q++)
                    {
                        if (clients.ContainsKey(q))
                        {
                            clients[q].SendNewCommand(dataOfThisGame.FormCommandOfPlayersList() as BaseCommand);
                            Thread.Sleep(100);
                        }
                    }
                    break;
                default:
                    Console.WriteLine("Неизвестная команда");
                    break;
            }
        }