コード例 #1
0
ファイル: RequestAgent.cs プロジェクト: wenfeifei/Bumblebee
        private void OnReveive(IClient c, ClientReceiveArgs reader)
        {
            PipeStream stream = reader.Stream.ToPipeStream();

            if (Status >= RequestStatus.Responding)
            {
                ResponseStatus(stream);
                ResponseHeader(stream);
                ResponseBody(stream);
            }
            else
            {
                stream.ReadFree((int)stream.Length);
            }
        }
コード例 #2
0
 private void OnClientReceive(IClient c, ClientReceiveArgs reader)
 {
     if (Status == RunStatus.Runing)
     {
         AsyncTcpClient client = (AsyncTcpClient)c;
         ClientToken    token  = (ClientToken)client.Token;
         long           time   = TimeWatch.GetElapsedMilliseconds() - token.RequestTime;
         this.CodeStatistics.Add(time);
         PipeStream stream = reader.Stream.ToPipeStream();
         int        length = (int)stream.Length;
         this.CodeStatistics.Receive(length);
         stream.ReadFree(length);
         if (Setting.Mode == "Response")
         {
             SendMessage(client);
         }
     }
 }
コード例 #3
0
 void EventClientReceive(IClient client, ClientReceiveArgs reader)
 {
     try
     {
         var pipeStream = reader.Stream.ToPipeStream();
         if (!pipeStream.TryReadLine(out var msg) || msg == null)
         {
             return;
         }
         msg = msg.Trim('\0').Trim();
         if (msg.IsBlank())
         {
             return;
         }
         IInlineMessage message;
         if (msg[0] == '#')
         {
             message = new InlineMessage
             {
                 ID    = msg[1..],
コード例 #4
0
        private void OnReceive(IClient c, ClientReceiveArgs reader)
        {
            if (Command.NetworkReceive != null)
            {
                var result = Command.NetworkReceive(this, reader.Stream.ToPipeStream());
                if (result != null)
                {
                    Result = result;
                    OnCompleted(ResultType.Object, null);
                }
            }
            else
            {
                ResultType resultType;
                string     msg;
                PipeStream pipeStream = reader.Stream.ToPipeStream();
                if (mFreeLength > 0)
                {
                    pipeStream.ReadFree(mFreeLength);
                    mFreeLength = 0;
                }
                if (Result.Status == ResultStatus.None)
                {
                    if (pipeStream.TryReadLine(out string line))
                    {
                        char type = line[0];
                        switch (type)
                        {
                        case '+':
                            resultType = ResultType.Simple;
                            msg        = line.Substring(1, line.Length - 1);
                            OnCompleted(resultType, msg);
                            return;

                        case '-':
                            resultType = ResultType.Error;
                            msg        = line.Substring(1, line.Length - 1);
                            OnCompleted(resultType, msg);
                            return;

                        case ':':
                            Result.Data.Add(new ResultItem {
                                Type = ResultType.Integers, Data = long.Parse(line.Substring(1, line.Length - 1))
                            });
                            Result.Status = ResultStatus.Completed;
                            OnCompleted(ResultType.Integers, null);
                            return;

                        case '$':
                            Result.ResultType = ResultType.Bulck;
                            Result.ArrayCount = 1;
                            Result.BodyLength = int.Parse(line.Substring(1, line.Length - 1));
                            Result.Status     = ResultStatus.Loading;
                            break;

                        case '*':
                            Result.ResultType = ResultType.Arrays;
                            Result.ArrayCount = int.Parse(line.Substring(1, line.Length - 1));
                            Result.Status     = ResultStatus.Loading;
                            break;
                        }
                    }
                }
                if (Result.Status == ResultStatus.Loading)
                {
                    if (Result.ResultType == ResultType.Arrays)
                    {
                        LoadArray(pipeStream);
                    }
                    else if (Result.ResultType == ResultType.Bulck)
                    {
                        LoadBulck(pipeStream);
                    }
                }
            }
        }