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); } }
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); } }
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; }
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); }
private bool TryGetFromChannelId(Network network, out NetEndPointMessage message) { return(this.NetworkMapMessages.TryGetValue(network.Id, out message)); }
internal bool Existed(NetEndPointMessage message) { return(this.ConnectInfos.Contains(message)); }