Beispiel #1
0
        public async Task PrepareUserAsync(string credential = null)
        {
            if (User != null)
            {
                throw new InvalidOperationException("Already user prepared!");
            }

            if (UserInitiator == null)
            {
                await LoginAsync(credential);
            }

            _userEventObserver = (UserEventObserver)Channel.CreateObserver <IUserEventObserver>(this);

            try
            {
                UserContext = await UserInitiator.Load(_userEventObserver);
            }
            catch (ResultException e)
            {
                if (e.ResultCode == ResultCodeType.UserNeedToBeCreated)
                {
                    UserContext = await UserInitiator.Create(_userEventObserver, "Created");
                }
                else
                {
                    throw;
                }
            }

            User = UserInitiator.Cast <UserRef>();
        }
Beispiel #2
0
 public UserActor(ClusterNodeContext clusterContext, string id, IUserEventObserver observer)
 {
     _logger         = LogManager.GetLogger($"UserActor({id})");
     _clusterContext = clusterContext;
     _id             = id;
     _eventObserver  = (UserEventObserver)observer;
     _enteredRoomMap = new Dictionary <string, RoomRef>();
 }
        private async Task OnUserInitiated(TrackableUserContext userContext, IUserEventObserver observer)
        {
            _userContext = userContext.Clone();
            _userContext.SetDefaultTracker();
            _userContextSaveTracker = new TrackableUserContextTracker();
            _userEventObserver      = (UserEventObserver)observer;

            _channel.WithNoReply().UnbindType(Self, new[] { typeof(IUserInitiator) });
            await _channel.BindType(Self, new TaggedType[] { typeof(IUser) });
        }
Beispiel #4
0
        public async Task <UserRef> LoginAsync(string id, string password)
        {
            if (User != null)
            {
                throw new InvalidOperationException("Already logined");
            }

            _userEventObserver = (UserEventObserver)Channel.CreateObserver <IUserEventObserver>(this);

            var ret = await UserLogin.Login(id, password, _userEventObserver);

            User   = (UserRef)ret;
            UserId = id;
            return(User);
        }
Beispiel #5
0
        private async Task<bool> LoginAsync(string userId, string password)
        {
            var userLogin = _comm.Channels[0].CreateRef<UserLoginRef>();
            var observer = _comm.ObserverRegistry.Create<IUserEventObserver>(this);

            try
            {
                _user = (UserRef)(await userLogin.Login(userId, password, observer));
                if (_user.IsChannelConnected() == false)
                    await _user.ConnectChannelAsync();
                _userEventObserver = (UserEventObserver)observer;
                _comm.Channels.Last().StateChanged += (_, state) => { if (state == ChannelStateType.Closed) _channelCloseCts?.Cancel(); };
                ConsoleUtil.Sys($"{userId} logined.");
                return true;
            }
            catch (Exception e)
            {
                _comm.ObserverRegistry.Remove(observer);
                ConsoleUtil.Err($"Failed to login {userId} with " + e);
                return false;
            }
        }