Example #1
0
 protected virtual void Dispose(bool disposing)
 {
     if (disposing)
     {
         if (waveSocket != null)
         {
             waveSocket.Dispose();
         }
         if (waveDataproc != null)
         {
             waveDataproc.Dispose();
         }
         if (StartRcvEvent != null)
         {
             StartRcvEvent.Dispose();
         }
         if (StartRcvEvent != null)
         {
             StartRcvEvent.Dispose();
         }
         if (RcvThread != null)
         {
             RcvThread.Abort();
             RcvThread = null;
         }
         IsBuilded   = false;
         IsStopRcved = true;
         linkbuffer.Clear();
         Console.WriteLine(@"关闭UDP线程...");
     }
 }
Example #2
0
        void NormalThreadStart()
        {
            IPEndPoint remote       = new IPEndPoint(IPAddress.Any, 0);
            EndPoint   senderRemote = remote;

            Console.WriteLine(@"启动UDP线程...");
            while (true)
            {
                StartRcvEvent.WaitOne();
                if (IsStopRcved)
                {
                    return;
                }
                int index = 0;
                IsRcving = true;
                while (index < frameNums)
                {
                    if (waveSocket == null)
                    {
                        IsRcving = false;
                        break;
                    }

                    int offset = 0;
                    try
                    {
                        while (offset < rcvBuf.Length)
                        {
                            int ret = waveSocket.ReceiveFrom(rcvBuf, offset, rcvBuf.Length - offset, SocketFlags.None, ref senderRemote);
                            offset += ret;
                        }

                        if (!Equals(senderRemote, ConstUdpArg.Dst_NormWaveIp))
                        {
                            Console.WriteLine("接收错误");
                            Console.WriteLine(senderRemote.ToString());
                            continue;
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                        break;
                    }

                    if (WorkSaveDataEventHandler != null)
                    {
                        WorkSaveDataEventHandler(null, rcvBuf);
                    }
                    PutWorkData(rcvBuf, index++);
                    if (index >= frameNums)
                    {
                        index = 0;
                    }
                    waveDataproc.WorkBytesEvent.Set();
                }
            }
        }
Example #3
0
 public void RefreshReceiveData()
 {
     StartRcvEvent.Set();
 }
Example #4
0
 public void StopReceiveData()
 {
     StartRcvEvent.Reset();
     RcvThread.Abort();
 }
        void OrigThreadStart()
        {
            IPEndPoint remote       = new IPEndPoint(IPAddress.Any, 0);
            EndPoint   senderRemote = remote;

            Console.WriteLine(@"启动UDP线程...");
            while (true)
            {
                while (true)
                {
                    StartRcvEvent.WaitOne();
                    int index = 0;
                    IsRcving = true;
                    while (index < FrameNums)
                    {
                        if (waveSocket == null)
                        {
                            IsRcving = false;
                            break;
                        }
                        int offset = 0;
                        try {
                            //接收数据
                            int ret = waveSocket.ReceiveFrom(rcvBuf, offset, rcvBuf.Length - offset, SocketFlags.None, ref senderRemote);
                        }
                        catch (Exception e) {
                            Console.WriteLine(e);
                            IsRcving = false;
                            break;
                        }

                        switch (WaveType)
                        {
                        case ConstUdpArg.WaveType.Normal:
                            if (WorkSaveDataEventHandler != null)
                            {
                                WorkSaveDataEventHandler(null, rcvBuf);
                            }
                            PutWorkData(rcvBuf, index++);
                            if (index >= FrameNums)
                            {
                                index = 0;
                            }
                            waveDataproc.WorkBytesEvent.Set();
                            break;

                        case ConstUdpArg.WaveType.Orig:
                            PutOrigData(rcvBuf);
                            waveDataproc.OrigBytesEvent.Set();
                            index++;
                            index++;
                            if (index >= FrameNums)
                            {
                                index = 0;
                            }
                            break;

                        case ConstUdpArg.WaveType.Delay:
                            PutDelayData(rcvBuf);
                            index++;
                            if (index >= FrameNums)
                            {
                                index = 0;
                            }
                            waveDataproc.DelayBytesEvent.Set();
                            break;

                        default:
                            throw new ArgumentOutOfRangeException();
                        }
                    }
                }
            }
        }