AutoCSer.Net.TcpServer.ReturnValue <bool> appendLog(AutoCSer.Net.TcpRegister.ServerLog server) { AutoCSer.Net.TcpServer.AutoWaitReturnValue <TcpInternalServer._p5> _wait_ = AutoCSer.Net.TcpServer.AutoWaitReturnValue <TcpInternalServer._p5> .Pop(); try { AutoCSer.Net.TcpInternalServer.ClientSocketSender _socket_ = _TcpClient_.Sender; if (_socket_ != null) { TcpInternalServer._p4 _inputParameter_ = new TcpInternalServer._p4 { p0 = server, }; TcpInternalServer._p5 _outputParameter_ = new TcpInternalServer._p5 { }; AutoCSer.Net.TcpServer.ReturnType _returnType_ = _socket_.WaitGet <TcpInternalServer._p4, TcpInternalServer._p5>(_c3, ref _wait_, ref _inputParameter_, ref _outputParameter_); return(new AutoCSer.Net.TcpServer.ReturnValue <bool> { Type = _returnType_, Value = _outputParameter_.Return }); } } finally { if (_wait_ != null) { AutoCSer.Net.TcpServer.AutoWaitReturnValue <TcpInternalServer._p5> .PushNotNull(_wait_); } } return(new AutoCSer.Net.TcpServer.ReturnValue <bool> { Type = AutoCSer.Net.TcpServer.ReturnType.ClientException }); }
/// <summary> /// 注销服务 /// </summary> /// <param name="log"></param> private void removeServer(ServerLog log) { HashString name = log.Name; ClientServerSet serverSet; Monitor.Enter(serverSetLock); try { if (serverSets.TryGetValue(name, out serverSet)) { serverSet.Remove(log); } } finally { Monitor.Exit(serverSetLock); } }
internal void Add(ServerLog log) { bool isMainChanged; if (serverSet == null) { serverSet = new ServerSet(log); isMainChanged = true; } else { serverSet.Add(log, out isMainChanged); } if (isMainChanged) { onServerChange(serverSet); } }
/// <summary> /// 删除注册TCP服务端 /// </summary> /// <param name="server"></param> internal void RemoveRegister(IServer server) { #if NoAutoCSer throw new Exception(); #else ServerLog log = server.CreateServerLog(LogType.RemoveServer); Monitor.Enter(registerLock); try { servers.Remove(server); registerClient.appendLog(log); } catch (Exception error) { server.AddLog(error); } finally { Monitor.Exit(registerLock); } #endif }
/// <summary> /// 注册服务 /// </summary> /// <param name="log"></param> private void registerServer(ServerLog log) { HashString name = log.Name; ClientServerSet serverSet; Monitor.Enter(serverSetLock); try { if (serverSets.TryGetValue(name, out serverSet)) { serverSet.Add(log); } else { serverSets.Add(name, serverSet = new ClientServerSet(log)); } } finally { Monitor.Exit(serverSetLock); } }
protected virtual bool appendLog(ServerLog server) { if (server != null && server.HostToIpAddress()) { ServerSet serverSet; bool isLog = true; switch (server.LogType) { case LogType.RegisterServer: HashString serverName = server.Name; if (serverSets.TryGetValue(serverName, out serverSet)) { bool isMainChanged; isLog = serverSet.Add(server, out isMainChanged); } else { serverSets.Add(serverName, serverSet = new ServerSet(server)); } break; case LogType.RemoveServer: if (serverSets.TryGetValue(server.Name, out serverSet)) { serverSet.Remove(server); } break; default: AutoCSer.Log.Pub.Log.Add(Log.LogType.Error, "未知的 TCP 内部注册服务更新日志类型 " + server.toJson()); return(false); } if (isLog) { onLog(server); return(true); } } return(false); }
/// <summary> /// 查找匹配服务位置 /// </summary> /// <param name="server"></param> /// <returns></returns> private int indexOf(ServerLog server) { if (Servers.Length == 0) { return(-1); } int count = Servers.Length; ServerLog[] serverArray = Servers.Array; foreach (ServerLog nextServer in serverArray) { if (server.HostPortEquals(nextServer)) { return(Servers.Length - count); } if (--count == 0) { return(-1); } } return(-1); }
/// <summary> /// 移除 TCP 服务注册信息 /// </summary> /// <param name="server"></param> /// <returns>主服务是否被修改</returns> internal bool Remove(ServerLog server) { if (Server != null) { if (server.HostPortEquals(Server)) { if (server.Random == Server.Random) { Server = Servers.Length == 0 ? null : Servers.Array[--Servers.Length]; return(true); } } else { int index = indexOf(server); if (index >= 0 && server.Random == Servers.Array[index].Random) { Servers.Array[index] = Servers.Array[--Servers.Length]; } } } return(false); }
/// <summary> /// 注册TCP服务端 /// </summary> /// <param name="server"></param> /// <returns>是否注册成功</returns> internal bool Register(IServer server) { #if NoAutoCSer throw new Exception(); #else ServerLog serverInfo = server.CreateServerLog(LogType.RegisterServer); Monitor.Enter(registerLock); try { servers.Add(server); if (registerClient.appendLog(serverInfo).Value) { return(true); } } catch (Exception error) { server.AddLog(error); } finally { Monitor.Exit(registerLock); } #endif return(false); }
AutoCSer.Net.TcpServer.AwaiterBox <bool> appendLogAwaiter(AutoCSer.Net.TcpRegister.ServerLog server) { AutoCSer.Net.TcpServer.AwaiterBox <bool> _awaiter_ = new AutoCSer.Net.TcpServer.AwaiterBox <bool>(); AutoCSer.Net.TcpInternalServer.ClientSocketSender _socket_ = _TcpClient_.Sender; if (_socket_ != null) { TcpInternalServer._p4 _inputParameter_ = new TcpInternalServer._p4 { p0 = server, }; AutoCSer.Net.TcpServer.ReturnType _returnType_; AutoCSer.Net.TcpServer.AwaiterReturnValueBox <bool> _outputParameter_ = default(AutoCSer.Net.TcpServer.AwaiterReturnValueBox <bool>); _returnType_ = _socket_.GetAwaiter <TcpInternalServer._p4, AutoCSer.Net.TcpServer.AwaiterReturnValueBox <bool> >(_a3, _awaiter_, ref _inputParameter_, ref _outputParameter_); if (_returnType_ != AutoCSer.Net.TcpServer.ReturnType.Success) { _awaiter_.Call(_returnType_); } } else { _awaiter_.Call(AutoCSer.Net.TcpServer.ReturnType.ClientException); } return(_awaiter_); }
/// <summary> /// 添加 TCP 服务注册信息 /// </summary> /// <param name="server"></param> /// <param name="isMainChanged">主服务是否被修改</param> /// <returns>日志是否需要推送到客户端</returns> internal bool Add(ServerLog server, out bool isMainChanged) { if (Server == null) { Server = server; return(isMainChanged = true); } server.Name = Server.Name; if (server.IsSingle ^ Server.IsSingle) { AutoCSer.LogHelper.Warn("TCP 服务 " + server.Name + " 单实例定义冲突 " + server.IsSingle.ToString(), LogLevel.Warn | LogLevel.AutoCSer); } if (server.HostPortEquals(Server)) { if (server.Random == Server.Random) { return(isMainChanged = false); } if (server.IsSingle) { Servers.Length = 0; } Server = server; isMainChanged = false; return(true); } if (server.IsSingle || Server.IsSingle) { Servers.Length = 0; Server = server; return(isMainChanged = true); } int index = indexOf(server); if (!Server.IsMain || server.IsMain) { Server.IsMain = false; if (index < 0) { Servers.Add(Server); } else { Servers.Array[index] = Server; } Server = server; return(isMainChanged = true); } isMainChanged = false; if (index < 0) { Servers.Add(server); return(true); } if (server.Random == Servers.Array[index].Random) { return(false); } Servers.Array[index] = server; return(true); }
/// <summary> /// TCP 服务信息集合 /// </summary> /// <param name="server"></param> internal ServerSet(ServerLog server) { Server = server; }
public bool HostPortEquals(ServerLog server) { return(Port == server.Port && Host == server.Host); }
/// <summary> /// 客户端 TCP 服务信息集合 /// </summary> /// <param name="log"></param> internal ClientServerSet(ServerLog log) { serverSet = new ServerSet(log); }
internal void Set(string name, ServerSet serverSet) { Name = name; Server = serverSet.Server.Server; Servers = serverSet.Servers.Length == 0 ? null : serverSet.Servers.GetArray(value => value.Server); }