Example #1
0
            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
                });
            }
Example #2
0
        /// <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); }
        }
Example #3
0
        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);
            }
        }
Example #4
0
        /// <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
        }
Example #5
0
        /// <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); }
        }
Example #6
0
        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);
        }
Example #7
0
        /// <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);
        }
Example #8
0
 /// <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);
 }
Example #9
0
        /// <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);
        }
Example #10
0
 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_);
 }
Example #11
0
        /// <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);
        }
Example #12
0
 /// <summary>
 /// TCP 服务信息集合
 /// </summary>
 /// <param name="server"></param>
 internal ServerSet(ServerLog server)
 {
     Server = server;
 }
Example #13
0
 public bool HostPortEquals(ServerLog server)
 {
     return(Port == server.Port && Host == server.Host);
 }
Example #14
0
 /// <summary>
 /// 客户端 TCP 服务信息集合
 /// </summary>
 /// <param name="log"></param>
 internal ClientServerSet(ServerLog log)
 {
     serverSet = new ServerSet(log);
 }
Example #15
0
 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);
 }