Exemplo n.º 1
0
        void DoWorking(object args)
        {
            status = ESrvStatus.Working;
            //大循环
            while (status != ESrvStatus.Stoping)
            {
                //循环直到队列为空,之后线程短暂休眠避免抢占cpu时间
                while (!iQueue.IsEmpty)
                {
                    //尝试从队列取出
                    if (iQueue.TryDequeue(out DataPacket dp))
                    {
                        LogHelper.Logging("ForwardSrv: Dequeue!");

                        //查转发表
                        EndPoint remoteEP = ForwardTable.GetEPByAddr(dp.DstAddr, dp.DstPort);  //!!!注意转发表线程安全
                        if (remoteEP != null)
                        {
                            //发送数据
                            //省略分段
                            DataSocket.Socket.SendTo(dp.RawData, remoteEP);
                        }
                        else
                        {
                            //查询不到EP 目标不可达
                            LogHelper.Logging("DstAddr Unreachable(EP): " + BitConverter.ToString(dp.DstAddr) + ":" + BitConverter.ToString(dp.DstPort));  //!!地址格式化
                        }
                    }
                }
                //休眠
                Thread.Sleep(10);
            }
            status = ESrvStatus.Stoped;
        }
Exemplo n.º 2
0
        void DoWorking(object args)
        {
            status = ESrvStatus.Working;
            //大循环
            while (status != ESrvStatus.Stoping)
            {
                //循环直到队列为空,之后线程短暂休眠避免抢占cpu时间
                while (!iQueue.IsEmpty)
                {
                    //尝试从队列取出
                    if (iQueue.TryDequeue(out DataPacket dp))
                    {
                        LogHelper.Logging("EchoSrv: Dequeue!");

                        //交换Src Dst
                        byte[] swap = dp.DstAddr;
                        dp.DstAddr = dp.SrcAddr;
                        dp.SrcAddr = swap;
                        swap       = dp.DstPort;
                        dp.DstPort = dp.SrcPort;
                        dp.SrcPort = swap;

                        //交给路由队列
                        //先写死用0号服务 反正就是个echo(逃
                        RoutingSrv.SrvPool[0].InputQueue.Enqueue(dp);
                    }
                }
                //休眠
                Thread.Sleep(10);
            }
            status = ESrvStatus.Stoped;
        }
Exemplo n.º 3
0
        void DoWorking(object args)
        {
            status = ESrvStatus.Working;
            //大循环
            while (status != ESrvStatus.Stoping)
            {
                //循环直到队列为空,之后线程短暂休眠避免抢占cpu时间
                while (!iQueue.IsEmpty)
                {
                    //尝试从队列取出
                    if (iQueue.TryDequeue(out DataPacket dp))
                    {
                        LogHelper.Logging("RoutingSrv: Dequeue!");

                        //路由
                        ConcurrentQueue <DataPacket> oQueue = RoutingTable.GetQueueByAddr(dp.DstAddr, dp.DstPort);  //!!!注意路由表线程安全
                        if (oQueue != null)
                        {
                            //交给目标队列
                            oQueue.Enqueue(dp);
                        }
                        else
                        {
                            //查询不到路由 目标不可达
                            LogHelper.Logging("DstAddr Unreachable: " + BitConverter.ToString(dp.DstAddr) + ":" + BitConverter.ToString(dp.DstPort));  //!!地址格式化
                        }
                    }
                }
                //休眠
                Thread.Sleep(10);
            }
            status = ESrvStatus.Stoped;
        }
Exemplo n.º 4
0
        public ForwardSrv()
        {
            //设置状态
            status = ESrvStatus.Initializing;

            //InputQueue
            iQueue = new ConcurrentQueue <DataPacket>();

            //设置SrvPool
            SrvPool.Add(this);

            //设置状态
            status = ESrvStatus.Initialized;
        }
Exemplo n.º 5
0
        void DoWorking(object args)
        {
            status = ESrvStatus.Working;
            //大循环
            while (status != ESrvStatus.Stoping)
            {
                //循环直到队列为空,之后线程短暂休眠避免抢占cpu时间
                while (!iQueue.IsEmpty)
                {
                    //尝试从队列取出
                    if (iQueue.TryDequeue(out DataPacket dp))
                    {
#if DEBUG
                        LogHelper.Logging("ProxySrv: Dequeue!");
#endif
                        switch (((ProxyPacket)dp).State)
                        {
                        case ProxyPacketState.TCP_Connect:
                            //握手
                            sessionTable.Add(new SessionItem());
                            break;

                        case ProxyPacketState.TCP_Connect_Success:
                            break;

                        case ProxyPacketState.TCP_Data:
                            break;

                        case ProxyPacketState.TCP_Fin:
                            break;

                        case ProxyPacketState.TCP_Rst:
                            break;

                        default:
                            break;
                        }
                    }
                }
                //休眠
                Thread.Sleep(10);
            }
            status = ESrvStatus.Stoped;
        }