Esempio n. 1
0
        public bool ProcessAndAddMessageToQueue(byte[] RecvBytes, TcpClient Client)
        {
            bool        Re        = false;
            bool        CheckData = false;
            TcpMeasType MeasType  = TcpMeasType.MEAS_TYPE_NONE;
            int         MeasCode  = 0;

            //根据制定的协议校验数据
            //..........
            CheckData = true;

            //分析数据,把数据添加到队列m_TcpMeas
            if (CheckData)
            {
                TcpMeas TempMeas = new TcpMeas();
                TempMeas.Client   = Client;
                TempMeas.MeasType = MeasType;
                TempMeas.MeasCode = MeasCode;
                TempMeas.Param    = System.Text.Encoding.ASCII.GetBytes("Just for test !");

                if (TempMeas != null)
                {
                    m_RecvMeasQueue.Enqueue(TempMeas);
                }

                Re = true;
            }

            return(Re);
        }
Esempio n. 2
0
        public void ParseAndAddMessageToQueue(byte[] RecvBytes, int RecvCount, TcpClient Client, ref int parseCount, byte[] arrayParse)
        {
            //匹配比较数组, -1表示不需要比较,忽略
            int[] arrayCompare = new int[CommunicationProtocol.MessageLength]
            {
                CommunicationProtocol.MessStartCode, CommunicationProtocol.MessVID1, CommunicationProtocol.MessVID2, -1, CommunicationProtocol.MessRightState, -1, -1, -1,
                -1, -1, -1, -1, -1, -1, -1, -1,
                -1, -1, -1, -1, -1, -1, -1, -1,
                -1, -1, -1, -1, -1, -1, -1, CommunicationProtocol.MessEndCode,
            };

            for (int i = 0; i < RecvCount; i++)
            {
                if (arrayCompare[parseCount] != -1)               //需要匹配
                {
                    if (RecvBytes[i] == arrayCompare[parseCount]) //相等
                    {
                        arrayParse[parseCount++] = RecvBytes[i];
                    }
                    else  //不相等,复位计数器
                    {
                        parseCount = 0;
                    }
                }
                else  //不需要比较,直接赋值,并更新计数器
                {
                    arrayParse[parseCount++] = RecvBytes[i];
                }

                if (parseCount >= CommunicationProtocol.MessageLength)
                {
                    parseCount = 0;                                                       //和校验

                    if (MyMath.CheckSum(arrayParse, CommunicationProtocol.MessageLength)) //分析数据,把数据添加到队列m_TcpMeas
                    {
                        TcpMeasType MeasType = TcpMeasType.MEAS_TYPE_CONTROLER_BOARD;
                        byte        MeasCode = arrayParse[CommunicationProtocol.MessageCommandIndex];
                        TcpMeas     TempMeas = new TcpMeas();
                        if (TempMeas != null)
                        {
                            TempMeas.Client   = Client;
                            TempMeas.MeasType = MeasType;
                            TempMeas.MeasCode = MeasCode;
                            Array.Copy(arrayParse, TempMeas.Param, TempMeas.Param.Length);
                            m_RecvMeasQueue.Enqueue(TempMeas);
                        }

                        Array.Clear(arrayParse, 0, arrayParse.Length);
                    }
                    else  //校验和错误,则更新错误码后发回
                    {
                        arrayParse[CommunicationProtocol.MessageStateIndex] = CommunicationProtocol.MessErrorState;
                        arrayParse[CommunicationProtocol.MessageSumCheck]   = 0x00;
                        arrayParse[CommunicationProtocol.MessageSumCheck]   = MyMath.CalculateSum(arrayParse, CommunicationProtocol.MessageLength);

                        Client.GetStream().Write(arrayParse, 0, arrayParse.Length);
                    }
                }
            }
        }
Esempio n. 3
0
        public void ParseAndAddMessageToQueue(byte[] RecvBytes, int RecvCount, TcpClient Client, ref int parseCount, byte[] arrayParse)
        {
            //匹配比较数组, -1表示不需要比较,忽略
            int[] arrayCompare = new int[Message.MessageLength]
            {
                Message.MessStartCode, Message.MessVID1, Message.MessVID2, -1, -1, -1, -1, -1,
                -1, -1, -1, -1, -1, -1, -1, -1,
                -1, -1, -1, -1, -1, -1, -1, -1,
                -1, -1, -1, -1, -1, -1, -1, Message.MessEndCode,
            };

            for (int i = 0; i < RecvCount; i++)
            {
                if (arrayCompare[parseCount] != -1)               //需要匹配
                {
                    if (RecvBytes[i] == arrayCompare[parseCount]) //相等
                    {
                        arrayParse[parseCount++] = RecvBytes[i];
                    }
                    else  //不相等,复位计数器
                    {
                        parseCount = 0;
                    }
                }
                else  //不需要比较,直接赋值,并更新计数器
                {
                    arrayParse[parseCount++] = RecvBytes[i];
                }

                if (parseCount >= Message.MessageLength)
                {
                    parseCount = 0;                                         //和校验

                    if (MyMath.CheckSum(arrayParse, Message.MessageLength)) //分析数据,把数据添加到队列m_TcpMeas
                    {
                        TcpMeasType MeasType = TcpMeasType.MEAS_TYPE_ARM;
                        byte        MeasCode = arrayParse[Message.MessageCommandIndex];

                        TcpMeas TempMeas = new TcpMeas();
                        if (TempMeas != null)
                        {
                            TempMeas.Client   = Client;
                            TempMeas.MeasType = MeasType;
                            TempMeas.MeasCode = MeasCode;
                            Array.Copy(RecvBytes, TempMeas.Param, TempMeas.Param.Length);
                            m_RecvMeasQueue.Enqueue(TempMeas);
                        }
                    }
                    else  //校验和错误,则更新错误码后发回
                    {
                        arrayParse[Message.MessageStateIndex] = Message.MessErrorState;
                        using (NetworkStream stream = Client.GetStream())
                        {
                            stream.Write(arrayParse, 0, arrayParse.Length);
                        }
                    }
                }
            }
        }