Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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);
                    }
                }
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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());
        }
Exemplo n.º 5
0
        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());
        }
Exemplo n.º 6
0
        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;
            }
        }
Exemplo n.º 7
0
 private void ReceiveFlowControlFrame(DataLayerEvent _event)
 {
     PCT_FlowControl(_event);
 }