public CommServer() { server = new TcpPackServer(); queue = new BlockingCollection <IMsg>(); server.OnAccept += delegate(IServer sender, IntPtr connId, IntPtr client) { OnConnect?.Invoke(); return(HandleResult.Ok); }; server.OnReceive += delegate(IServer sender, IntPtr connId, byte[] bytes) { Message message = new Message(); message.MergeFrom(bytes); try { queue.Add(message);//理论上这里可能抛出异常ObjectDisposedException或InvalidOperationException } catch (Exception e) { Console.WriteLine("Exception occured when adding an item to the queue:" + e.Message); } OnReceive?.Invoke(); return(HandleResult.Ok); }; }
/// <summary> /// 设置基本配置 /// </summary> /// <param name="numConnections">同时处理的最大连接数</param> /// <param name="receiveBufferSize">用于每个套接字I/O操作的缓冲区大小(接收端)</param> /// <param name="overtime">超时时长,单位秒.(每10秒检查一次),当值为0时,不设置超时</param> /// <param name="port">端口</param> /// <param name="headerFlag">包头</param> public Pack(int numConnections, int receiveBufferSize, int overtime, int port, uint headerFlag) { server = new TcpPackServer(numConnections, receiveBufferSize, overtime, headerFlag); server.OnAccept += Server_OnAccept; server.OnReceive += Server_OnReceive; server.OnSend += Server_OnSend; server.OnClose += Server_OnClose; server.Start(port); }
public NetServer(MsgServer msgserver, ActionBlock <byte[]> actionBlock) { _tcppackserver = new TcpPackServer(); _msgserver = msgserver; _actionBlock = actionBlock; _tcppackserver.OnPrepareListen += _tcppackserver_OnPrepareListen; _tcppackserver.OnAccept += _tcppackserver_OnAccept; _tcppackserver.OnSend += _tcppackserver_OnSend; _tcppackserver.OnReceive += _tcppackserver_OnReceive; _tcppackserver.OnClose += _tcppackserver_OnClose; _tcppackserver.OnShutdown += _tcppackserver_OnShutdown; }
public TcpServerSocket() { server = new TcpPackServer(); server.SocketBufferSize = 1024 * 1; server.KeepAliveTime = 20000; server.KeepAliveInterval = 2000; Timer disconnectLilenceConnections = new Timer(new TimerCallback((obj) => { server.DisconnectSilenceConnections(30000); }), null, 30000, 1000); //ThreadPool.SetMinThreads(100,100); //ThreadPool.SetMaxThreads(655350,655350); server.OnReceive += Server_OnReceive; server.OnAccept += Server_OnAccept; server.OnClose += Server_OnClose; }