private void ServerService_PasswordChanged(object sender, Server server)
        {
            AdminClientRegisterInfo newInfo = new AdminClientRegisterInfo(server, adminPortClientFactory.Create(new ServerInfo(
                                                                                                                    server.ServerIp, server.ServerPort, server.ServerPassword)));

            newInfo.Client.EventReceived += this.Client_EventReceived;

            this.RegisterInfo.AddOrUpdate(server.GetUniqueKey(),
                                          (_) => newInfo, (_, old) =>
            {
                old.Client.EventReceived -= this.Client_EventReceived;
                foreach (var user in old.GetRegisteredUsers())
                {
                    newInfo.AddUser(user);
                }

                return(newInfo);
            });
        }
        public async Task Register(IAdminPortClientUser owner, Server server)
        {
            AdminClientRegisterInfo info = RegisterInfo.GetOrAdd(server.GetUniqueKey(), (_) =>
            {
                IAdminPortClient client = this.adminPortClientFactory.Create(
                    new ServerInfo(server.ServerIp, server.ServerPort, server.ServerPassword)
                    );

                client.EventReceived += Client_EventReceived;

                return(new AdminClientRegisterInfo(server, client));
            });

            if (info.Client.ConnectionState == AdminConnectionState.Idle)
            {
                await info.Client.Join();
            }

            info.AddUser(owner);
        }