private void PCT_FlowControl(DataLayerEvent _event) { switch (NetworkLayerDataBuffer.GetFS_DLSign(_event.listData)) { case FlowControlType.ContinueToSend: BufferMultiFrameReceive.MinInterval = _event.listData[2]; if (BufferMultiFrameReceive.MinInterval >= 0x80 && BufferMultiFrameReceive.MinInterval <= 0xF0 || BufferMultiFrameReceive.MinInterval >= 0xFA) { BufferMultiFrameReceive.MinInterval = 0x7F; } BufferMultiFrameSend.RemainFrameCount = _event.listData[1]; ThreadPool.QueueUserWorkItem(NetworkLayerSendMultiFrame); break; case FlowControlType.Wait: //StopTimer(); //停止发送定时器 break; case FlowControlType.Overflow: BufferMultiFrameSend.ClearMessage(); return; default: BufferMultiFrameSend.ClearMessage(); break; } }
private void ReceiveConsecutiveFrame(DataLayerEvent _event) { if (BufferMultiFrameReceive.ExpectedSN != NetworkLayerDataBuffer.GetSN_DLSign(_event.listData)) { return; } if (BufferMultiFrameReceive.ListNetLayerByteData.Count > BufferMultiFrameReceive.Offset) { BufferMultiFrameReceive.ExpectedSN = (byte)((BufferMultiFrameReceive.ExpectedSN + 1) % 0x10); int nReceiveLength = System.Math.Min(7, BufferMultiFrameReceive.ListNetLayerByteData.Count - BufferMultiFrameReceive.Offset); for (int i = 0; i != nReceiveLength; ++i) { if (BufferMultiFrameReceive.Offset + i <= BufferMultiFrameReceive.ListNetLayerByteData.Count) { BufferMultiFrameReceive.ListNetLayerByteData[(int)(BufferMultiFrameReceive.Offset + i)] = _event.listData[(int)(i + 1)]; } } BufferMultiFrameReceive.Offset += nReceiveLength; --BufferMultiFrameReceive.RemainFrameCount; if (BufferMultiFrameReceive.Offset > BufferMultiFrameReceive.ListNetLayerByteData.Count) { BufferMultiFrameReceive.ClearMessage(); } else { if (BufferMultiFrameReceive.RemainFrameCount <= 0) { ActionRecvFun(BufferMultiFrameReceive); } } } }
private void ReceiveSingleFrame(DataLayerEvent _event) { BufferMultiFrameReceive.nID = _event.ID; BufferMultiFrameReceive.DataLen = NetworkLayerDataBuffer.GetSF_DLSign(_event.listData); if (BufferMultiFrameReceive.DataLen == 0 || BufferMultiFrameReceive.DataLen > 7) { return; } int nnDataIndex = 1; BufferMultiFrameReceive.ListNetLayerByteData.Clear(); BufferMultiFrameReceive.ListNetLayerByteData = new List <byte>(new byte[BufferMultiFrameReceive.DataLen]); for (int i = (int)nnDataIndex; i != BufferMultiFrameReceive.DataLen + 1; ++i) { BufferMultiFrameReceive.ListNetLayerByteData[(int)(i - nnDataIndex)] = _event.listData[i]; } ActionRecvFun(BufferMultiFrameReceive); }
public ActionResult Index() { //_testService.DoSomething(); _dataLayer.PageInstanceID = "Home-TestSite"; _dataLayer.Page.PageInfo.PageName = "home page"; DataLayerEvent dataEvent = new DataLayerEvent(); dataEvent.EventInfo = new EventInfo(); dataEvent.EventInfo.Effect = "effect1"; dataEvent.EventInfo.EventAction = "addtocart"; dataEvent.EventInfo.EventName = "click"; dataEvent.EventInfo.EventPoints = 1; dataEvent.EventInfo.TimeStamp = DateTime.Now; dataEvent.EventInfo.Type = "eventType"; dataEvent.Attributes.Add("productID", "123456"); dataEvent.Attributes.Add("sku", "182839"); _dataLayer.Events.Add(dataEvent); return(View()); }
private void ReceiveFirstFrame(DataLayerEvent _event) { BufferMultiFrameReceive.nID = _event.ID; BufferMultiFrameReceive.DataLen = NetworkLayerDataBuffer.GetFF_DLSign(_event.listData); if (BufferMultiFrameReceive.DataLen < 8) { return; } int nDataIndex = 2; BufferMultiFrameReceive.ListNetLayerByteData.Clear(); BufferMultiFrameReceive.ListNetLayerByteData = new List <byte>(new byte[BufferMultiFrameReceive.DataLen]); for (int i = nDataIndex; i != 8; ++i) { BufferMultiFrameReceive.ListNetLayerByteData[(int)(i - nDataIndex)] = _event.listData[i]; } int nCount = 0; if ((BufferMultiFrameReceive.DataLen - 6) / 7 == 0) { nCount = (BufferMultiFrameReceive.DataLen - 6) / 7; } else { nCount = (BufferMultiFrameReceive.DataLen - 6) / 7 + 1; } BufferMultiFrameReceive.Offset = 6; BufferMultiFrameReceive.ProCtrlType = ProtocolCtrlType.FlowControl; BufferMultiFrameReceive.RemainFrameCount = nCount; BufferMultiFrameReceive.ExpectedSN = 1; DataLinkLayer.ActionDllSendFuc(BufferMultiFrameReceive.SendFlowControl()); }
public void DisposeReceivedFrame(DataLayerEvent _event) { switch ((ProtocolCtrlType)NetworkLayerDataBuffer.GetHeadSign(_event.listData)) { case ProtocolCtrlType.SingleFrame: //如果接收到的是单帧则立刻把该单帧上传到应用层 ReceiveSingleFrame(_event); break; case ProtocolCtrlType.FirstFrame: //如果接收到的是首帧,则发送流控帧到数据链路层,然后准备接收该多帧信息 ReceiveFirstFrame(_event); break; case ProtocolCtrlType.ConsecutiveFrame: //接收首帧中指定服务的连续帧 ReceiveConsecutiveFrame(_event); break; case ProtocolCtrlType.FlowControl: ReceiveFlowControlFrame(_event); break; } }
private void ReceiveFlowControlFrame(DataLayerEvent _event) { PCT_FlowControl(_event); }