コード例 #1
0
        public Command Parse(string message, CommandObjectParams referencedObjects )
        {
            string commandName = string.Empty;
            List<string> comandParams = new List<string>();
            string tmpParceCommand = string.Empty;
            for (int i = 0; i < message.Length; i++)
            {
                if(message[i]==Settings.RequestLineBreakerChar)
                {
                    if(commandName==string.Empty)
                    {
                        commandName = tmpParceCommand;
                    }
                    else
                    {
                        comandParams.Add(tmpParceCommand);
                    }

                    tmpParceCommand = string.Empty;
                    continue;
                }
                else
                {
                    tmpParceCommand += message[i];
                }
            }

            switch (commandName)
            {
                default:
                    {
                        return new EmptyCommand(comandParams, referencedObjects);
                    }
            }
        }
コード例 #2
0
ファイル: User.cs プロジェクト: Detnoi/Adom-like_game
        public User(TcpClient Client)
        {
            // Объявим строку, в которой будет хранится запрос клиента
            string Request = "";
            // Буфер для хранения принятых от клиента данных
            byte[] Buffer = new byte[1024];
            // Переменная для хранения количества байт, принятых от клиента
            int Count;
            // Читаем из потока клиента до тех пор, пока от него поступают данные
            while ((Count = Client.GetStream().Read(Buffer, 0, Buffer.Length)) > 0)
            {
                // Преобразуем эти данные в строку и добавим ее к переменной Request
                Request += Encoding.ASCII.GetString(Buffer, 0, Count);
                // Запрос должен обрываться последовательностью \r\n\r\n
                // Либо обрываем прием данных сами, если длина строки Request превышает 4 килобайта
                // Нам не нужно получать данные из POST-запроса (и т. п.), а обычный запрос
                // по идее не должен быть больше 4 килобайт
                if (Request.IndexOf("\r\n\r\n") >= 0 || Request.Length > Settings.MaxRequestLength)
                {
                    break;
                }
            }

            // Парсим строку запроса с использованием регулярных выражений
            // При этом отсекаем все переменные GET-запроса
            Match ReqMatch = Regex.Match(Request, @"^\w+\s+([^\s\?]+)[^\s]*\s+HTTP/.*|");

            // Если запрос не удался
            if (ReqMatch == Match.Empty)
            {
                // Передаем клиенту ошибку 400 - неверный запрос
                //_sendError(400);
                return;
            }

            CommandObjectParams userCreatedParams = new CommandObjectParams();
            userCreatedParams.Add(this);

            CommandManager.Instance.Parse(Request.Replace("\r\n\r\n", string.Empty), userCreatedParams).Execute();
        }
コード例 #3
0
ファイル: Command.cs プロジェクト: Detnoi/Adom-like_game
 public Login(List<string> stringCommandParameters, CommandObjectParams referencedObjects)
 {
     _username = stringCommandParameters[0];
     _user = (User)referencedObjects.Get(0);
 }
コード例 #4
0
ファイル: Command.cs プロジェクト: Detnoi/Adom-like_game
 public EmptyCommand(List<string> stringCommandParameters, CommandObjectParams referencedObjects)
 {
     //no parameters
 }