public bool Enter(string nickname, out string message)
        {
            if (_client == null)
            {
                _client = new MessengerServiceClient(new InstanceContext(this));
            }

            EnterData enterData;

            try
            {
                enterData = _client.EnterService(nickname);
            }
            catch
            {
                HandleDisconnect();
                message = "Couldn't enter because service is unavailable.";

                return(false);
            }

            message = enterData.Message;

            if (!enterData.Status)
            {
                return(false);
            }

            _userId = enterData.Id;

            var userList = _client.GetUserList();

            UserController?.AddConnectedUsers(userList);

            try
            {
                _client.NotifyClientIsReady(_userId);
                IsConnected = true;
            }
            catch
            {
                _client.Abort();
                HandleDisconnect();
                message = "Couldn't notify server that client is ready.";

                return(false);
            }

            Task.Run(() =>
            {
                for (; ;)
                {
                    Task.Delay(PulseInterval).Wait();

                    try
                    {
                        if (_tokenSource.IsCancellationRequested)
                        {
                            break;
                        }

                        _client.Pulse(_userId);
                    }
                    catch
                    {
                        _client.Abort();
                        HandleDisconnect();
                        DisconnectController?.HandleDisconnect("Connection aborted.");
                        break;
                    }
                }
            });

            return(true);
        }