Beispiel #1
0
        public ActAbstract ParseCommand(byte[] bytes, Socket socket)
        {
            var command = AbstractRequest.ToObject(bytes);

            ActAbstract act = null;

            if (command is CreateGameRequest)
            {
                act = new ActCreateGame(command as CreateGameRequest, gameService, sender);
            }
            else if (command is GameListRequest)
            {
                act = new ActGamesList(command as GameListRequest, gameService, sender);
            }
            else if (command is JoinGameRequest)
            {
                act = new ActJoinGame(command as JoinGameRequest, gameService, sender);
            }
            else if (command is LoginRequest)
            {
                act = new ActLogin(command as LoginRequest, socket, loginService, sender);
            }
            else if (command is MoveObjectRequest)
            {
                act = new ActMoveObject(command as MoveObjectRequest, gameService, sender);
            }
            else if (command is SendMazeRequest)
            {
                act = new ActSendMaze(command as SendMazeRequest, gameService, sender);
            }
            else if (command is SendStartPositionRequest)
            {
                act = new ActSendStartPoint(command as SendStartPositionRequest, gameService, sender);
            }
            else if (command is UserCountRequest)
            {
                act = new ActUserCount(command as UserCountRequest, sender);
            }

            return(act);
        }
Beispiel #2
0
        void HandleClient(object obj)
        {
            Socket client = obj as Socket;

            while (IsServerWork)
            {
                try
                {
                    byte[] buffer = new byte[6500];
                    client.Receive(buffer); // Принимаем данные

                    Guid id = Guid.NewGuid();

                    ActAbstract command = commandParser.ParseCommand(buffer, client);

                    if (sender.ExistUser(client))
                    {
                        NewRequest?.Invoke(DateTime.Now, command.ToString().Split('.').Last(), id, sender.GetUserID(client));                          // Событие нового сообщения
                    }
                    else
                    {
                        NewRequest?.Invoke(DateTime.Now, command.ToString().Split('.').Last(), id, Guid.Empty);  // Событие нового сообщения
                    }
                    command.Execute();
                    NewResponse?.Invoke(DateTime.Now, id);
                }
                catch (SocketException)
                {
                    break; // Выходим из цикла
                }
            }

            // Заканчиваем подключение
            sender.RemoveUser(client);
            CliendDisconnect.Invoke();
            client.Shutdown(SocketShutdown.Both);
            client.Disconnect(false);
            client.Dispose();
        }
Beispiel #3
0
 static void Add(ActAbstract act)
 {
     singleton.actListBuffer.Add(act);
 }