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>(); }
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) }); }
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); }
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; } }