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); } } }
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(); }
public Login(List<string> stringCommandParameters, CommandObjectParams referencedObjects) { _username = stringCommandParameters[0]; _user = (User)referencedObjects.Get(0); }
public EmptyCommand(List<string> stringCommandParameters, CommandObjectParams referencedObjects) { //no parameters }