Пример #1
0
        /// <summary>
        /// 【客户端】socket协议得到的数据转成当前请求响应,步骤【四】
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>

        public CurrentResponse ToResponse(OnReceivedSocketEventArgs e)
        {
            int offset = 0;
            var resp   = new CurrentResponse()
            {
                Id = this.DecodeUInt64(e.Buffer, offset, out offset),
            };

            //读取encoding
            var encoding = this.DecodeEncoding(e.Buffer, Encoding.ASCII, offset, out offset);

            //读取命令
            var command = this.DecodeString(e.Buffer, encoding, offset, out offset);

            //设置命令
            var response = new Response(encoding, command);

            resp.Response = response;

            response.Query   = this.DecodeNameValueCollection(e.Buffer, encoding, offset, out offset);
            response.Form    = this.DecodeNameValueCollection(e.Buffer, encoding, offset, out offset);
            response.Headers = this.DecodeNameValueCollection(e.Buffer, encoding, offset, out offset);

            //设置body
            var bodylength = this.DecodeInt64(e.Buffer, offset, out offset);

            if (bodylength > 0)
            {
                var memorystream = new MemoryStream(e.Buffer, offset, e.Buffer.Length - offset);
                memorystream.Flush();
                response.Body = memorystream;
            }

            return(resp);
        }
Пример #2
0
        /// <summary>
        /// 【服务端】=> 【服务端】socket协议得到的数据转成当前请求参数,步骤【二】
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        public CurrentRequest ToRequest(OnReceivedSocketEventArgs e)
        {
            int offset         = 0;
            var currentRequest = new CurrentRequest()
            {
                Id = this.DecodeUInt64(e.Buffer, offset, out offset),
            };

            //读取encoding
            var encoding = this.DecodeEncoding(e.Buffer, Encoding.ASCII, offset, out offset);

            //读取命令
            var command = this.DecodeString(e.Buffer, encoding, offset, out offset);

            //设置命令
            var request = new Request(encoding, command);

            currentRequest.Request = request;

            request.Query   = this.DecodeNameValueCollection(e.Buffer, encoding, offset, out offset);
            request.Form    = this.DecodeNameValueCollection(e.Buffer, encoding, offset, out offset);
            request.Headers = this.DecodeNameValueCollection(e.Buffer, encoding, offset, out offset);

            //设置body
            var bodylength = this.DecodeInt64(e.Buffer, offset, out offset);

            request.Writer.Write(encoding.GetChars(e.Buffer, offset, e.Buffer.Length - offset));
            request.Writer.Flush();

            return(currentRequest);
        }
Пример #3
0
        private byte[] Client_OnMessageReceived(object sender, OnReceivedSocketEventArgs e)
        {
            var response = this.remoteProtocol.ToResponse(e);

            if (this.all.TryRemove(response.Id, out var current))
            {
                current.Response.TrySetResult(response.Response);
            }

            try
            {
                this.OnMessageReceived?.Invoke(sender, response.Response, e);
            }
            finally
            {
            }

            return(null);
        }
Пример #4
0
        /// <summary>
        /// 数据到达后
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <returns></returns>
        private byte[] Service_OnMessageReceived(object sender, OnReceivedSocketEventArgs e)
        {
            CurrentRequest current;

            try
            {
                current = this.Protocol.ToRequest(e);
            }
            catch
            {
                return(null);
            }

            if (this.ResponseHandler == null)
            {
                try
                {
                    this.OnMessageReceived?.Invoke(sender, current.Request, e);
                }
                finally
                {
                }

                return(null);
            }

            var response = this.ResponseHandler.Excute(new ResponseHandlerContext()
            {
                EventArgs = e
            }, current.Request);

            if (response == null)
            {
                try
                {
                    this.OnMessageReceived?.Invoke(sender, current.Request, e);
                }
                finally
                {
                }

                return(null);
            }

            try
            {
                this.OnMessageReceived?.Invoke(sender, current.Request, e);
            }
            finally
            {
            }

            try
            {
                return(this.Protocol.FromResponse(current, response));
            }
            catch
            {
                return(null);
            }
        }
Пример #5
0
        private void RequestHandler_OnMessageReceived(object sender, IRemoteResponse response, OnReceivedSocketEventArgs args)
        {
            if (this.allFiles == null || this.saveFile == null)
            {
                return;
            }

            if (response.CommandType.IsEquals(ConfigFileCommand.Pull))
            {
                System.Threading.ThreadPool.QueueUserWorkItem(x =>
                {
                    foreach (var file in this.allFiles)
                    {
                        this.Push(file.FileName);
                    }
                });
            }
        }
Пример #6
0
        private void RequestHandler_OnMessageReceived(object sender, IRemoteRequest request, OnReceivedSocketEventArgs e2)
        {
            var reqs = request as Request;

            if (reqs == null)
            {
                return;
            }

            if (request.CommandType.IsEquals(ConfigFileCommand.Push))
            {
                if (this.sessions.ContainsKey(e2.Connection.Id))
                {
                    return;
                }

                var fileName = reqs.Query == null ? null : reqs.Query["file"];
                if (fileName == null)
                {
                    return;
                }

                this.sessions[e2.Connection.Id] = new KeyValuePair <string, Encoding>(fileName, reqs.Encoding);
                return;
            }
        }
Пример #7
0
        private void RequestHandler_OnMessageReceived(object sender, IRemoteResponse response, OnReceivedSocketEventArgs args)
        {
            //你发送了test命令,对方响应了,这个时候你又收到了test消息,那么你这里又开始发消息,这个就形成了死循环,所以收到了消息只能是服务器主动发送的消息
            if (this.allFiles == null || this.saveFile == null)
            {
                return;
            }

            if (response.CommandType.IsEquals(ConfigFileCommand.Pull))
            {
                System.Threading.ThreadPool.QueueUserWorkItem(x =>
                {
                    foreach (var file in this.allFiles)
                    {
                        this.Push(file.FileName);
                    }
                });
            }
        }