示例#1
0
        private void HandleMessage(DisconnectClientMessage message)
        {
            WorldClient[] array = ServerBase <WorldServer> .Instance.FindClients((WorldClient client) => client.Account != null && client.Account.Id == message.AccountId);

            if (array.Length > 1)
            {
                IPCAccessor.logger.Error("Several clients connected on the same account ({0}). Disconnect them all", message.AccountId);
            }
            bool flag = false;

            for (int i = 0; i < array.Length; i++)
            {
                WorldClient worldClient = array[i];
                if ((flag = (worldClient.Character != null)) && i == 0)
                {
                    worldClient.Character.Saved += delegate(Character chr)
                    {
                        this.OnCharacterSaved(message);
                    };
                }
                worldClient.Disconnect();
            }
            if (!flag)
            {
                base.ReplyRequest(new DisconnectedClientMessage(array.Any <WorldClient>()), message);
            }
        }
示例#2
0
        private void HandleMessage(DisconnectClientMessage message)
        {
            var clients = WorldServer.Instance.FindClients(client => client.Account != null && client.Account.Id == message.AccountId).ToArray();

            if (clients.Length > 1)
            {
                logger.Error("Several clients connected on the same account ({0}). Disconnect them all", message.AccountId);
            }

            var isLogged = false;

            for (var index = 0; index < clients.Length; index++)
            {
                var client = clients[index];
                isLogged = client.Character != null;
                // dirty but whatever
                if (isLogged && index == 0)
                {
                    Action <Character> ev = null;
                    ev = chr =>
                    {
                        client.Character.Saved -= ev;
                        OnCharacterSaved(message);
                    };
                    client.Character.Saved += ev;
                }
                client.Disconnect();
            }

            if (!isLogged && AccountManager.Instance.IsAccountBlocked(message.AccountId, out Character character))
            {
                logger.Warn("Account {0} blocked, waiting release", message.AccountId);
                Action <Character> ev = null;
                ev = chr =>
                {
                    character.AccountUnblocked -= ev;
                    ReplyRequest(new DisconnectedClientMessage(true), message);
                };
                character.AccountUnblocked += ev;
            }
            else if (!isLogged)
            {
                ReplyRequest(new DisconnectedClientMessage(clients.Any()), message);
            }
        }
示例#3
0
 private void OnCharacterSaved(DisconnectClientMessage request)
 {
     ReplyRequest(new DisconnectedClientMessage(true), request);
 }