public void OnParsed(DataEventArgs eventArgs) { if (DoParse != null) { DoParse(this, eventArgs); } }
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(); } }