/// <summary> /// 将数据打包发送 /// </summary> /// <param name="displayController"></param> /// <param name="screenIp"></param> /// <param name="screenPort"></param> /// <param name="rowData"></param> private void PackSendData(DisplayController displayController, string screenIp, int screenPort, object rowData) { try { MsgGeneral general = new MsgGeneral(); general.FrameHead = BitConverter.GetBytes((ushort)0x5AA5); Array.Reverse(general.FrameHead); //大小端 general.FrameLen = (byte)(Marshal.SizeOf(rowData) + 1); //因含0x82一个字节 general.FrameConst = 0x82; byte[] arraySendData = general.StructToBytes().MergeBytes(rowData.StructToBytes()); TCPMessageEx tcpMessage = new TCPMessageEx(screenIp, screenPort, arraySendData); displayController.DisplayDataEnqueue(new PivasEventArgs <TCPMessageEx>(tcpMessage)); } catch (Exception ex) { InternalLogger.Log.Error("打包发送;需将data分成指定格式出错:" + ex.Message); } }
/// <summary> /// 从队列中读取display数据,然后发送到屏 /// </summary> /// <param name="ip"></param> /// <param name="port"></param> /// <param name="buf"></param> /// <param name="frameMaxLen"></param> /// <returns></returns> void DisplayDataSend() { TCPMessageEx displayMsgModel = null; while (true) { try { displayMsgModel = null; Thread.Sleep(6);//屏硬件要求,发完一帧要间隔6毫秒左右(一般5即可,这里做预留) if (displayQueue.Count > 0) { lock (displayQueue) { displayMsgModel = displayQueue.Dequeue(); } } //从连接列表中找到tcp对象,调用send方法,发送 DisplayTcpClient displayTcpClient = null; if (displayMsgModel != null) { bool bContainDisplayTcpClient = ContainTcpClient(displayMsgModel.ServerIp, displayMsgModel.ServerPort, out displayTcpClient); if (bContainDisplayTcpClient) { displayTcpClient.Send(displayMsgModel.TcpData); } } } catch (Exception ex) { InternalLogger.Log.Error("循环读取display数据出错:" + ex.Message); } } }