//处理订阅收到的数据,然后发送给指定的Client
        protected virtual void ProcessSubscribe(object o, NetMQSocketEventArgs e)
        {
            //TODO https://netmq.readthedocs.io/en/latest/poller/   #Performance

            if (Logger.IsTraceEnabled)
            {
                Logger.Trace($"ProcessSubscribe -> ThreadID = {Thread.CurrentThread.ManagedThreadId}");
            }

            var topic = e.Socket.ReceiveFrameBytes();//TryReceiveMultipartMessage();
            var msg   = e.Socket.ReceiveFrameBytes();

            var dout = msg.FromProtobuf <Out>();

            var protocolPackage = NetSend.GetProtocolPackage(dout.Id);

            if (protocolPackage == null)
            {
                return;
            }

            var response = new PirateXResponsePackage()
            {
                HeaderBytes  = dout.HeaderBytes,
                ContentBytes = dout.BodyBytes
            };

            var bytes = protocolPackage.PackPacketToBytes(response);

            protocolPackage.Send(bytes);
        }
Beispiel #2
0
        private void menuItem100_Click(object sender, EventArgs e)
        {
            m.writeXml("d_netsend", "ma", "");
            m.writeXml("d_netsend", "ten", "");
            NetSend f = new NetSend();

            f.ShowDialog(this);
        }
        /// <summary>
        /// 收到客户端请求,通过 REQ/REP的模式向远端Actor请求处理,并获得数据
        /// </summary>
        /// <param name="protocolPackage"></param>
        /// <param name="body"></param>
        public virtual Out ProcessRequest(IProtocolPackage protocolPackage, byte[] body)
        {
            //LRU
            //REQ --- Router/Router --- REQ

            if (protocolPackage == null)
            {
                return(null);
            }
            if (Logger.IsDebugEnabled)
            {
                Logger.Debug($"request from #{protocolPackage.Id}# {protocolPackage.RemoteEndPoint}");
            }

            if (protocolPackage.CryptoByte > 0)
            {
                var last = NetSend.GetProtocolPackage(protocolPackage.Rid);
                if (!Equals(last.Id, protocolPackage.Id))
                {
                    if (Logger.IsDebugEnabled)
                    {
                        Logger.Warn($"!Equals(last.Id, protocolPackage.Id)");
                    }

                    protocolPackage.Close();

                    if (Logger.IsDebugEnabled)
                    {
                        Logger.Debug($"#{protocolPackage.Id}# !Equals(last.Id, protocolPackage.Id)");
                    }
                    return(null);
                }
            }
            //解密Cient数据包
            var request = protocolPackage.UnPackToPacket(body);

            var din = new In()
            {
                Version     = 1,
                Action      = PirateXAction.Req,
                HeaderBytes = request.HeaderBytes,
                QueryBytes  = request.ContentBytes,
                Ip          = (protocolPackage.RemoteEndPoint as IPEndPoint).Address.ToString(),
                LastNo      = protocolPackage.LastNo,
                SessionId   = protocolPackage.Id,
                FrontendID  = FrontendID,
            };

            if (ProfilerLog.ProfilerLogger.IsInfoEnabled)
            {
                din.Profile.Add("_tin_", $"{DateTime.UtcNow.Ticks}");
            }

            return(RequestToRemoteResponseSocket(din));
        }
Beispiel #4
0
    public static void ThreadUpdate(System.Object obj)
    {
        Main mainobj = (Main)obj;

        StartListening();
        BattlePlayersInfo.instance.InitPlayerInfoTest();
        while (mainobj.isRunning)
        {
            // do send queue
            NetSend.SendLogic();
            // do receive msg queue
            NetReceive.ReceiveLogic();

            // sleep
            System.Threading.Thread.Sleep(100);
        }
        CloseListening();
    }
Beispiel #5
0
    private void ConnectCallback(IAsyncResult asyncConnect)
    {
        try
        {
            this._socket = (Socket)asyncConnect.AsyncState;

            this._net_send    = new NetSend(this._socket, this._send_queue);
            this._net_receive = new NetReceive(this._socket, this._receive_queue);

            this._socket.EndConnect(asyncConnect);

            EventMgr.Inst.SendEvent(EventDef.NetConnectSuccess);
        }
        catch (Exception e)
        {
            EventMgr.Inst.SendEvent(EventDef.NetConnectFaild);
            Debug.LogError("socket connect faild error: " + e);
        }
    }
Beispiel #6
0
        //服务器向客户端下发数据
        protected virtual void ProcessResponse(object o, NetMQSocketEventArgs e)
        {
            //TODO https://netmq.readthedocs.io/en/latest/poller/   #Performance
            var msg = responseSocket.ReceiveMultipartMessage();//TryReceiveMultipartMessage();
            //msg[0].Buffer //版本号
            var action    = msg[1].ConvertToString();
            var sessionid = msg[2].ConvertToString();

            var clientkey = msg[3].Buffer;
            var serverkey = msg[4].Buffer;

            var header  = msg[5].Buffer;
            var content = msg[6].Buffer;

            var response = new PirateXResponsePackage()
            {
                HeaderBytes  = header,
                ContentBytes = content
            };

            var protocolPackage = NetSend.GetProtocolPackage(sessionid);

            //将消息下发到客户端
            if (protocolPackage == null)
            {
                return;
            }
            if (protocolPackage.PackKeys == null)
            {
                protocolPackage.PackKeys = serverkey;
            }
            if (protocolPackage.UnPackKeys == null)
            {
                protocolPackage.UnPackKeys = clientkey;
            }

            var bytes = protocolPackage.PackPacketToBytes(response);

            NetSend.Send(sessionid, bytes);
        }
Beispiel #7
0
    private void Closed()
    {
        lock (this._send_queue) { this._send_queue.Clear(); }
        lock (this._receive_queue) { this._receive_queue.Clear(); }

        if (this._socket != null && this._socket.Connected)
        {
            this._socket.Shutdown(SocketShutdown.Both);
            this._socket.Close();
        }
        this._socket = null;

        if (this._net_send != null)
        {
            this._net_send.AppQuit();
            this._net_send = null;
        }
        if (this._net_receive != null)
        {
            this._net_receive.AppQuit();
            this._net_receive = null;
        }
    }
Beispiel #8
0
        static async Task Main(string[] args)
        {
            var send = new NetSend();

            client              = new SocketClient(async_send: send, sync_send: send);
            client.BinaryInput += Client_BinaryInput;
            client.Disconnect  += Client_Disconnect;

            while (true)
            {
                await connect();

                var fiberRw = await client.GetFiberRw();

                async Task Run()
                {
                    while (true)
                    {
                        try
                        {
                            await SendTest(fiberRw);
                        }
                        catch
                        {
                            break;
                        }
                    }
                };


                //var task1 = Task.Factory.StartNew(async () =>
                //   {
                //       while (true)
                //       {
                //           try
                //           {
                //               await SendTest(fiberRw);
                //           }
                //           catch
                //           {
                //               break;
                //           }
                //       }
                //   });

                //var task2 = Task.Factory.StartNew(async () =>
                //{
                //    while (true)
                //    {

                //        try
                //        {
                //            await SendTest(fiberRw);
                //        }
                //        catch
                //        {
                //            break;
                //        }
                //    }
                //});

                //var task3 = Task.Factory.StartNew(async () =>
                //{
                //    while (true)
                //    {

                //        try
                //        {
                //            await SendTest(fiberRw);
                //        }
                //        catch
                //        {
                //            break;
                //        }
                //    }
                //});

                //var task4 = Task.Factory.StartNew(async () =>
                //{
                //    while (true)
                //    {
                //        try
                //        {
                //            await SendTest(fiberRw);
                //        }
                //        catch
                //        {
                //            break;
                //        }
                //    }
                //});



                await Task.WhenAll(Run(), Run(), Run(), Run());
            }
        }
Beispiel #9
0
        /// <summary>
        /// 启动
        /// </summary>
        private void Run()
        {
            if (isDisposed == true)
            {
                throw new ObjectDisposedException("ZYServer is Disposed");
            }


            IPEndPoint myEnd = new IPEndPoint(IPAddress.Any, Port);

            if (Host.Equals("ipv6any", StringComparison.CurrentCultureIgnoreCase))
            {
                myEnd = new IPEndPoint(IPAddress.IPv6Any, Port);
            }
            else if (!Host.Equals("any", StringComparison.CurrentCultureIgnoreCase))
            {
                if (String.IsNullOrEmpty(Host))
                {
                    IPHostEntry p = Dns.GetHostEntry(Dns.GetHostName());

                    foreach (IPAddress s in p.AddressList)
                    {
                        if (!s.IsIPv6LinkLocal && s.AddressFamily != AddressFamily.InterNetworkV6)
                        {
                            myEnd = new IPEndPoint(s, Port);
                            break;
                        }
                    }
                }
                else
                {
                    try
                    {
                        myEnd = new IPEndPoint(IPAddress.Parse(Host), Port);
                    }
                    catch (FormatException)
                    {
                        IPHostEntry p = Dns.GetHostEntry(Dns.GetHostName());

                        foreach (IPAddress s in p.AddressList)
                        {
                            if (!s.IsIPv6LinkLocal)
                            {
                                myEnd = new IPEndPoint(s, Port);
                            }
                        }
                    }
                }
            }

            sock = new Socket(myEnd.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);

            sock.Bind(myEnd);
            sock.Listen(512);
            ReceiveTimeout = 1000;

            var memoryPool = new Thruster.FastMemoryPool <byte>();

            for (int i = 0; i < MaxConnectCout; i++)
            {
                var netSend = new NetSend(true);

                ZYSocketAsyncEventArgs socketasyn = new ZYSocketAsyncEventArgs(
                    new LinesReadStream(MaxBufferSize),
                    new BufferWriteStream(memoryPool, netSend, netSend),
                    netSend,
                    netSend,
                    memoryPool,
                    Encoding.UTF8
                    )
                {
                    DisconnectIt = Disconnect_It
                };
                netSend.SetAccpet(socketasyn);
                socketasyn.Completed += new EventHandler <ZYSocketAsyncEventArgs>(Asyn_Completed);
                Accept(socketasyn);
            }
        }