private void HandleAccept(NetEndPointMessage message)
        {
            this.LocalAcceptor = Network.CreateAcceptor(IPEndPointHelper.GetIPEndPoint(message), ProtocalType.Tcp, network =>
            {
                InAcceptNetworks[network.Id] = network;
            }, network =>
            {
                InAcceptNetworks.Remove(network.Id);
                this.InnerNetMapManager.Remove(network);

                if (this.IsCenterServer)
                {
                    return;
                }
            });

            if (this.IsCenterServer)
            {
                Log.Info($"中心服务启动成功.", LoggerBllType.System);
            }
            else if (this.IsProxyServer)
            {
                Log.Info($"代理服务启动成功.", LoggerBllType.System);
            }
            else
            {
                Log.Info($"监听内网端口:{message.Port}成功.", LoggerBllType.System);
            }
        }
示例#2
0
        public static IPEndPoint GetIPEndPoint(NetEndPointMessage message)
        {
            var ip   = IPAddress.Parse(message.Host);
            var port = message.Port;

            return(new IPEndPoint(ip, port));
        }
 internal void BroadcastAddNewService(Network network, NetEndPointMessage message)
 {
     this.InnerNetMapManager.Add(network, message);
     //network.Broadcast(message, (ushort)SysNetCommand.AddInnerServerCmd);
     foreach (var info in this.InnerNetMapManager.ConnectMessageInfos)
     {
         network.Broadcast(info, (ushort)SysNetCommand.AddInnerServerCmd);
     }
 }
示例#4
0
        internal virtual void Add(Network network, NetEndPointMessage message)
        {
            if (this.ConnectInfos.Contains(message))
            {
                return;
            }

            this.ConnectInfos.Add(message);
            this.NetworkMapMessages[network.Id]         = message;
            this.HCodeMapChannel[message.GetHashCode()] = network;
        }
示例#5
0
        internal virtual void Remove(NetEndPointMessage message)
        {
            if (this.ConnectInfos.Remove(message))
            {
                if (!this.HCodeMapChannel.TryGetValue(message.GetHashCode(), out Network network))
                {
                    return;
                }

                this.HCodeMapChannel.Remove(message.GetHashCode());
                this.NetworkMapMessages.Remove(network.Channel.Id);
            }
        }
        private void Connecting(NetEndPointMessage message)
        {
            if (this.InConnectedNetworks.ContainsKey(message))
            {
                return;
            }

            //如果存在就不再创建新的Network
            if (this.DisconnectedNetworks.ContainsKey(message))
            {
                return;
            }

            if (this.IsCenterServer)
            {
                return;
            }

            //不连接进程内的监听端口
            if (message == this.Config.GetLocalMessage())
            {
                return;
            }

            var connector = Network.CreateConnector(IPEndPointHelper.GetIPEndPoint(message), ProtocalType.Tcp, network =>
            {
                OnClientConnect(network, message);
            }, network =>
            {
                OnClientDisconnect(network, message);
            });

            if (message == this.Config.GetCenterMessage())
            {
                this.CenterConnector = connector;
            }
            else
            {
                this.InConnectedNetworks[message]   = connector;
                this.NotExistProxyNetworks[message] = connector;
            }
        }
        private void OnClientDisconnect(Network network, NetEndPointMessage message)
        {
            if (message == this.Config.GetCenterMessage())
            {
                Log.Info($"当前中心服务挂掉.", LoggerBllType.System);
                return;
            }

            if (this.InConnectedNetworks.TryRemove(message, out Network oldNetwork))
            {
                this.NotExistProxyNetworks.TryRemove(message, out Network value);
                this.DisconnectedNetworks[message] = oldNetwork;
            }

            this.InnerNetMapManager.Remove(message);
            this.OuterNetMapManager.Remove(network);


            this.OnDisconnected?.Invoke(network);
        }
        internal void AddNetwork(NetEndPointMessage message)
        {
            if (this.IsCenterServer)
            {
                return;
            }

            //排除掉本地服务
            if (message == this.Config.GetLocalMessage())
            {
                return;
            }

            //排除中心服务
            if (message == this.Config.GetCenterMessage())
            {
                return;
            }

            Connecting(message);
        }
        private async void OnClientConnect(Network network, NetEndPointMessage message)
        {
            if (this.DisconnectedNetworks.TryRemove(message, out Network oldNetwork))
            {
                this.InConnectedNetworks[message]   = oldNetwork;
                this.NotExistProxyNetworks[message] = oldNetwork;
            }

            this.InnerNetMapManager.Add(network, message);

            //发送本地进程连接信息
            SendConnections(network);

            if (message == this.Config.GetCenterMessage())
            {
                Log.Info("连接中心服务成功.", LoggerBllType.System);
                return;
            }

            var outerMessage = await network.CallMessageAsync <OuterEndPointMessage>((ushort)SysNetCommand.GetOuterServerCmd);

            this.OuterNetMapManager.Add(network, outerMessage);

            if (this.IsProxyServer)
            {
                return;
            }

            var serverType = await network.CallMessageAsync <ServerType>((ushort)SysNetCommand.GetServerType);

            if (serverType != ServerType.Default)
            {
                //删掉连接中的代理服务
                this.NotExistProxyNetworks.TryRemove(message, out Network valu);
                return;
            }

            this.OnConnected?.Invoke(network);
        }
示例#10
0
 private bool TryGetFromChannelId(Network network, out NetEndPointMessage message)
 {
     return(this.NetworkMapMessages.TryGetValue(network.Id, out message));
 }
示例#11
0
 internal bool Existed(NetEndPointMessage message)
 {
     return(this.ConnectInfos.Contains(message));
 }