コード例 #1
0
        /// <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);
            }
        }
コード例 #2
0
        /// <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);
                }
            }
        }