/// <summary> /// 获取无效的网关数数据回复 /// </summary> /// <param name="request">网关请求对象</param> /// <param name="bizRespBytes">业务返回字节数</param> public static NetworkSwitchResponse GetInvalidSwitchResponse(NetworkSwitchRequest request, byte[] bizRespBytes) { NetworkSwitchResponse resp = new NetworkSwitchResponse(); resp.ESP_SuccessFlag = EaseSuccessFlag.Error; resp.ESP_CustomCode = request.ESP_CustomeCode; resp.ESP_LeaveLength = bizRespBytes.Length; if (request.ESP_SuccessFlag != EaseSuccessFlag.SuccessExpress) { resp.ESP_DataTotalLength = bizRespBytes.Length; resp.ESP_DataIndex = 0; resp.ESP_DateEndIndex = 0; resp.ESP_LeaveLength += 4 * 3; } resp.ESP_TransferData = bizRespBytes; return(resp); }
/// <summary> /// 填充绑定词典 /// </summary> public override void CustomPropertyBindAction() { BindBuilder.Instance() .Add((NetworkSwitchRequest req) => req.ESP_SocketParamCount, //SOCKET头参数个数(7) (s, p, obj) => { NetworkSwitchRequest cRequest = (NetworkSwitchRequest)obj; PropertyBindState state = new PropertyBindState(); if (cRequest.ESP_SuccessFlag == EaseSuccessFlag.Success || cRequest.ESP_SuccessFlag == EaseSuccessFlag.SuccessUserAgent) { state.StreamBind = true; cRequest.ESP_SocketParamCount = s.ReadNetworkStreamAsEntity <short>(2); state.PropertyValue = cRequest.ESP_SocketParamCount; } return(state); }) .Add((NetworkSwitchRequest req) => req.ESP_EncodeType, //客户端编码(9) (s, p, obj) => { NetworkSwitchRequest cRequest = (NetworkSwitchRequest)obj; PropertyBindState state = new PropertyBindState(); if (cRequest.ESP_SuccessFlag == EaseSuccessFlag.Success || cRequest.ESP_SuccessFlag == EaseSuccessFlag.SuccessUserAgent) { state.StreamBind = true; cRequest.ESP_EncodeType = s.ReadNetworkStreamAsEntity <EaseEncode>(1); state.PropertyValue = cRequest.ESP_EncodeType; } return(state); }) .Add((NetworkSwitchRequest req) => req.ESP_DataIndex, //返回数据起始位置(11) (s, p, obj) => { NetworkSwitchRequest cRequest = (NetworkSwitchRequest)obj; PropertyBindState state = new PropertyBindState(); if (cRequest.ESP_SuccessFlag == EaseSuccessFlag.Success || cRequest.ESP_SuccessFlag == EaseSuccessFlag.SuccessUserAgent) { state.StreamBind = true; cRequest.ESP_DataIndex = s.ReadNetworkStreamAsEntity <int>(4); state.PropertyValue = cRequest.ESP_DataIndex; } return(state); }) .Add((NetworkSwitchRequest req) => req.ESP_DateEndIndex, //数据终止位置(13) (s, p, obj) => { NetworkSwitchRequest cRequest = (NetworkSwitchRequest)obj; PropertyBindState state = new PropertyBindState(); if (cRequest.ESP_SuccessFlag == EaseSuccessFlag.Success || cRequest.ESP_SuccessFlag == EaseSuccessFlag.SuccessUserAgent) { state.StreamBind = true; cRequest.ESP_DateEndIndex = s.ReadNetworkStreamAsEntity <int>(4); state.PropertyValue = cRequest.ESP_DateEndIndex; } return(state); }) .Add((NetworkSwitchRequest req) => req.ESP_AppServerID, //应用服务器的地址ID(15) (s, p, obj) => { NetworkSwitchRequest cRequest = (NetworkSwitchRequest)obj; PropertyBindState state = new PropertyBindState(); if (cRequest.ESP_SuccessFlag == EaseSuccessFlag.Success || cRequest.ESP_SuccessFlag == EaseSuccessFlag.SuccessUserAgent) { state.StreamBind = true; cRequest.ESP_AppServerID = s.ReadNetworkStreamAsEntity <short>(2); state.PropertyValue = cRequest.ESP_AppServerID; } return(state); }) .Add((NetworkSwitchRequest req) => req.ESP_Link, //请求链接(17) (s, p, obj) => { NetworkSwitchRequest cRequest = (NetworkSwitchRequest)obj; //45 PropertyBindState state = new PropertyBindState(); if (cRequest.ESP_SuccessFlag == EaseSuccessFlag.Success || cRequest.ESP_SuccessFlag == EaseSuccessFlag.SuccessUserAgent) { state.StreamBind = true; cRequest.ESP_Link = s.DataBind <EaseString>(p); state.PropertyValue = cRequest.ESP_Link; } return(state); }) .Add((NetworkSwitchRequest req) => req.ESP_TransferLength, //应用请求数据(19) (s, p, obj) => { NetworkSwitchRequest cRequest = (NetworkSwitchRequest)obj; PropertyBindState state = new PropertyBindState(); if (cRequest.ESP_SuccessFlag == EaseSuccessFlag.Success || cRequest.ESP_SuccessFlag == EaseSuccessFlag.SuccessUserAgent) { state.StreamBind = true; cRequest.ESP_TransferLength = s.ReadNetworkStreamAsEntity <int>(4); state.PropertyValue = cRequest.ESP_TransferLength; } return(state); }) .Add((NetworkSwitchRequest req) => req.ESP_TransferData, /*ESP_TransferData*/ (s, p, obj) => { NetworkSwitchRequest cRequest = (NetworkSwitchRequest)obj; int readLen = (cRequest.ESP_SuccessFlag == EaseSuccessFlag.Success || cRequest.ESP_SuccessFlag == EaseSuccessFlag.SuccessUserAgent) ? cRequest.ESP_TransferLength : cRequest.ESP_LeaveLength; cRequest.ESP_TransferData = s.ReadNetworkStreamBytes(readLen, true); return(new PropertyBindState { PropertyValue = cRequest.ESP_TransferData, StreamBind = true }); }) .End <NetworkSwitchRequest>(); }
public void DoTest() { int i = 0; start: NetworkSwitchRequest request = new NetworkSwitchRequest(); request.ESP_SuccessFlag = (i == 0) ? EaseSuccessFlag.SuccessExpress : EaseSuccessFlag.Success; request.ESP_CustomeCode = 0; request.ESP_TransferData = Encoding.UTF8.GetBytes("123456"); if (request.ESP_SuccessFlag == EaseSuccessFlag.Success) { byte[] testLinkBytes = Encoding.UTF8.GetBytes("http://118.123.205.218:888/images/testpic.gif"); #region 设置完整参数 request.ESP_SocketParamCount = 3; request.ESP_EncodeType = EaseEncode.UTF8; request.ESP_DataIndex = 0; request.ESP_DateEndIndex = 0; request.ESP_AppServerID = 1; request.ESP_Link = new EaseString { ESP_Data = testLinkBytes, ESP_Length = (ushort)testLinkBytes.Length }; request.ESP_TransferLength = request.ESP_TransferData.Length; #endregion } if (request.ESP_SuccessFlag == EaseSuccessFlag.SuccessExpress) { request.ESP_LeaveLength = request.ESP_TransferData.Length; } else { request.ESP_LeaveLength = 2 + 1 + 4 + 4 + 2 + 4 + (int)request.ESP_Link.GetContentLength(); //后续长度 } //Console.WriteLine("后续长度:{0}", request.ESP_LeaveLength); byte[] networkBytes = request.GetNetworkBytes(); //Console.WriteLine("Total:{0}\r\n{1}", networkBytes.ESP_Length, networkBytes.GetHexViewString()); NetworkSwitchRequest request2 = new NetworkSwitchRequest(); MemoryStream ms = new MemoryStream(networkBytes); ms.Position = 0; request2.BindFromNetworkStream(ms, 0, false); //Console.WriteLine("########################################"); //Console.WriteLine(request2.GetNetworkBytes().GetHexViewString()); //Console.WriteLine("########################################"); ms.Dispose(); Assert.That(SpecUtil.AreEqual(request2.GetNetworkBytes(), networkBytes)); i++; if (i < 2) { //Console.WriteLine("\r\n下一次测试:\r\n"); goto start; } }