/// <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); }
/// <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); }
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); }
/// <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); } }
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); } }); } }
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; } }
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); } }); } }