/// <summary> /// 销毁由 <see cref="CreateServer"/> 创建的服务端对象 /// <para>注意:静态函数,非引用参数 server, 需实例变量 设为 null </para> /// </summary> /// <param name="server"></param> /// <exception cref="ArgumentNullException"></exception> public static void DisposeServer(this HPSocket.IServer server) { if (server == null) { throw new ArgumentNullException("参数 server 不能为空"); } ushort port = server.Port; string address = server.Address; Type type = server.GetType(); SpaceCGUtils.RemoveAnonymousEvents(server, "OnSend"); SpaceCGUtils.RemoveAnonymousEvents(server, "OnClose"); SpaceCGUtils.RemoveAnonymousEvents(server, "OnAccept"); SpaceCGUtils.RemoveAnonymousEvents(server, "OnReceive"); SpaceCGUtils.RemoveAnonymousEvents(server, "OnShutdown"); SpaceCGUtils.RemoveAnonymousEvents(server, "OnHandShake"); SpaceCGUtils.RemoveAnonymousEvents(server, "OnPrepareListen"); List <IntPtr> clients = server.GetAllConnectionIds(); foreach (IntPtr client in clients) { if (server.IsConnected(client)) { server.Disconnect(client, true); } } server.Dispose(); server = null; SpaceCGUtils.Log.InfoFormat("服务端({0}) {1}:{2} 已停止服务并销毁释放", type, address, port); }
/// <summary> /// HPSokcet.IServer 广播数据 /// </summary> /// <param name="server"></param> /// <param name="connId">不对此 connId 广播,或可为 null </param> /// <param name="bytes"></param> public static void Broadcast(this HPSocket.IServer server, IntPtr connId, byte[] bytes) { if (server == null) { throw new ArgumentNullException("参数 server 不能为空"); } List <IntPtr> clients = server.GetAllConnectionIds(); foreach (IntPtr client in clients) { if (client != connId && server.IsConnected(client)) { server.Send(client, bytes, bytes.Length); } } }