//处理订阅收到的数据,然后发送给指定的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); }
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)); }
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(); }
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); } }
//服务器向客户端下发数据 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); }
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; } }
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()); } }
/// <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); } }