Exemplo n.º 1
0
 private void DealData()
 {
     while (true)
     {
         m_semaphoreData.WaitOne(); //阻塞当前线程,知道被其它线程唤醒
         // 获取对data内存缓存的访问权
         m_mutexListDatas.WaitOne();
         List <HDModemDataStruct> dataListTmp = m_listDatas;
         m_listDatas = new List <HDModemDataStruct>(); //开辟一快新的缓存区
         m_mutexListDatas.ReleaseMutex();
         for (int i = 0; i < dataListTmp.Count; ++i)
         {
             try
             {
                 HDModemDataStruct dat        = dataListTmp[i];
                 string            data       = System.Text.Encoding.Default.GetString(dat.m_data_buf);
                 string            temp       = data.Trim();
                 WriteToFileClass  writeClass = new WriteToFileClass("ReceivedLog");
                 Thread            t          = new Thread(new ParameterizedThreadStart(writeClass.WriteInfoToFile));
                 t.Start("GPRS: " + "长度:" + data.Length + " " + data + "\r\n");
                 if (temp.Contains("$"))
                 {
                     string[] dataList = temp.Split('$');
                     //数据解析
                     for (int j = 0; i < dataList.Length; j++)
                     {
                         if (dataList[j].Length < 20)
                         {
                             continue;
                         }
                         string        dataGram        = dataList[j].Substring(0, dataList[j].IndexOf(';'));
                         CReportStruct report          = new CReportStruct();
                         Protocol.Data.ZFXY.UpParse up = new Data.ZFXY.UpParse();
                         if (up.Parse(dataGram, out report))
                         {
                             report.ChannelType = EChannelType.GPRS;
                             report.ListenPort  = this.GetListenPort().ToString();
                             if (this.UpDataReceived != null)
                             {
                                 InvokeMessage(dataGram, "[GPRS]接收");
                                 this.UpDataReceived.Invoke(null, new UpEventArgs()
                                 {
                                     Value = report, RawData = temp
                                 });
                             }
                         }
                     }
                 }
             }
             catch (Exception e)
             {
                 Debug.WriteLine("" + e.Message);
             }
         }
     }
 }
Exemplo n.º 2
0
        private void DealData()
        {
            while (true)
            {
                try
                {
                    m_semephoreData.WaitOne();
                    Thread.Sleep(1000);
                    string           data       = string.Empty;
                    string           rawdata    = System.Text.Encoding.ASCII.GetString(m_inputBuffer.ToArray());
                    WriteToFileClass writeClass = new WriteToFileClass("ReceivedLog");
                    Thread           t          = new Thread(new ParameterizedThreadStart(writeClass.WriteInfoToFile));
                    t.Start("GPRS: " + "长度:" + rawdata.Length + " " + rawdata + "\r\n");
                    //InvokeMessage(rawdata, "原始数据");
                    if (rawdata == null || rawdata == "")
                    {
                        continue;
                    }
                    if (!rawdata.EndsWith(";") && !rawdata.Contains(";") && !rawdata.Contains(";") && !rawdata.Contains(";"))
                    {
                        InvokeMessage("未包含结束符号", "输出");
                        continue;
                    }
                    m_inputBuffer.Clear();
                    string temp   = rawdata.Trim();
                    string result = string.Empty;
                    //InvokeMessage(temp, "原始数据");
                    //TODO 判定结束符
                    if (rawdata.Contains("$"))
                    {
                        data = rawdata;
                        string[] dataList = data.Split('$');
                        //上行报文接收需回复TRU

                        //数据解析
                        for (int i = 0; i < dataList.Count(); i++)
                        {
                            string        oneGram          = dataList[i];
                            CReportStruct report           = new CReportStruct();
                            Protocol.Data.ZFXY.UpParse up1 = new Data.ZFXY.UpParse();
                            //UpPaser up = new UpPaser();
                            if (up1.Parse(oneGram, out report))
                            {
                                report.ChannelType = EChannelType.Cable;
                                report.ListenPort  = "COM" + this.Port.PortName;
                                if (this.UpDataReceived != null)
                                {
                                    InvokeMessage(oneGram, "[CABLE]接收");
                                    this.UpDataReceived.Invoke(null, new UpEventArgs()
                                    {
                                        Value = report, RawData = oneGram
                                    });
                                }
                            }
                        }
                    }
                }
                catch (Exception exp)
                {
                    Debug.WriteLine(exp.Message);
                    m_inputBuffer.Clear();
                    //InvokeMessage(rawdata, "接收");
                }
            }//end of while
        }