Esempio n. 1
0
 public void OnParsed(DataEventArgs eventArgs)
 {
     if (DoParse != null)
     {
         DoParse(this, eventArgs);
     }
 }
Esempio n. 2
0
        public override void RecvThread(object o)
        {
            TcpClient client = null;
            try
            {
                using (client = o as TcpClient)
                {
                    var myReadBuffer = new byte[4100];
                    var stream = client.GetStream();
                    while (stream.CanRead)
                    {
                        Array.Clear(myReadBuffer, 0, 4100); //置零
                        int numberOfBytesRead = 0;
                        int id = BitConverter.ToInt32(myReadBuffer, 0);
                        stream.Read(myReadBuffer, 0, 32); //先读包头
                        var packetLength = BitConverter.ToUInt32(myReadBuffer, 8);
                        // Incoming message may be larger than the buffer size.
                        do
                        {
                            int n = stream.Read(myReadBuffer, 32 + numberOfBytesRead, (int)(packetLength - numberOfBytesRead));
                            numberOfBytesRead += n;

                        } while (numberOfBytesRead != packetLength);
                        var e = new DataEventArgs(id,null,myReadBuffer);
                        OnParsed(e);
                    }
                }
            }
            catch (Exception exception)
            {
                UnitCore.Instance.EventAggregator.PublishMessage(new ErrorEvent( exception,
                    LogType.Both));
            }
            finally
            {
                if (client != null)
                    client.Close();
            }
        }
        public override void RecvThread(object obj)
        {
            USBLListenerService server = null;
            server = obj as USBLListenerService;
            if (server != null)
            {
                var myReadBuffer = new byte[32768];
                while (true)
                {
                    try
                    {
                        server.LinkerClient = server._tcpListener.AcceptTcpClient();
                        NetworkStream stream = server.LinkerClient.GetStream();
                        while (stream.CanRead)
                        {
                            Array.Clear(myReadBuffer, 0, 32768); //置零
                            int numberOfBytesRead = 0;

                            stream.Read(myReadBuffer, 0, 32); //先读包头
                            var packetLength = BitConverter.ToUInt32(myReadBuffer, 8)-32;
                            // Incoming message may be larger than the buffer size.
                            do
                            {
                                int n = stream.Read(myReadBuffer, 32 + numberOfBytesRead,
                                    (int)(packetLength - numberOfBytesRead));
                                numberOfBytesRead += n;

                            } while (numberOfBytesRead != packetLength);
                            int id = BitConverter.ToInt32(myReadBuffer, 0);
                            var e = new DataEventArgs(id, null, myReadBuffer);
                            OnParsed(e);
                        }
                    }
                    catch (Exception exception)
                    {
                        UnitCore.Instance.EventAggregator.PublishMessage(new ErrorEvent(exception,
                            LogType.OnlyLog));
                    }
                    finally
                    {
                        if (server.LinkerClient != null)
                            server.LinkerClient.Close();
                        server.LinkerClient = null;
                    }
                }

            }
        }
 protected override void CheckQueue(ref List<byte> queue)
 {
     var bytes = new byte[queue.Count];
     queue.CopyTo(bytes);
     if (queue.Count>1)
     {
         if ((bytes[queue.Count - 2] == '\r') && (bytes[queue.Count - 1] == '\n'))
         {
             var strcmd = Encoding.ASCII.GetString(bytes);
             queue.Clear();
             var arg = new DataEventArgs((int)TypeId.GPS, strcmd, bytes);
             OnParsed(arg);
         }
     }
 }
        protected void CheckQueue(ref List<byte> queue)
        {
            var bytes = new byte[queue.Count];
            queue.CopyTo(bytes);
            byte[] ch = new byte[4096];
            //对串口接收的数据进行解析
            if (queue.Count != 0)
            {
                check.WriteData(bytes, (uint)queue.Count);//写入循环缓冲区,取完整帧和校验
                while (check.IsFull())//取出所有完整帧
                {
                    //校验在PalnS1处理
                    uint lenth = 0;
                    check.GetFullData(ch, ref lenth);//得到完整帧以及帧的长度
                    byte[] DataBuffer = new byte[lenth];
                    int id = (int)TypeId.Pose; //与网络包格式一致
                    Buffer.BlockCopy(ch, 0, DataBuffer, 0, (int)lenth);
                    var e = new DataEventArgs(id, null, DataBuffer);
                    OnParsed(e);
                    //break;//只取出一组完整的帧
                }
                queue.Clear();

            }
        }