async Task <TrackableUserContext> IUserInitiator.Create(IUserEventObserver observer, string name) { if (string.IsNullOrWhiteSpace(name)) { throw new ResultException(ResultCodeType.ArgumentError); } // create context var userContext = new TrackableUserContext { Data = new TrackableUserData { Name = name.Trim(), RegisterTime = DateTime.UtcNow, LastLoginTime = DateTime.UtcNow, LoginCount = 1, }, Achivements = new TrackableDictionary <int, UserAchievement>() }; await MongoDbStorage.UserContextMapper.CreateAsync( MongoDbStorage.Instance.UserCollection, userContext, _id); await OnUserInitiated(userContext, observer); return(userContext); }
async Task<TrackableUserContext> IUserInitiator.Create(IUserEventObserver observer, string name) { if (string.IsNullOrWhiteSpace(name)) throw new ResultException(ResultCodeType.ArgumentError); // create context var userContext = new TrackableUserContext { Data = new TrackableUserData { Name = name.Trim(), RegisterTime = DateTime.UtcNow, LastLoginTime = DateTime.UtcNow, LoginCount = 1, }, Achivements = new TrackableDictionary<int, UserAchievement>() }; await MongoDbStorage.UserContextMapper.CreateAsync( MongoDbStorage.Instance.UserCollection, userContext, _id); await OnUserInitiated(userContext, observer); return userContext; }
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 static SurrogateForIUserEventObserver Convert(IUserEventObserver value) { if (value == null) { return(null); } var o = (UserEventObserver)value; return(new SurrogateForIUserEventObserver { Channel = o.Channel, ObserverId = o.ObserverId }); }
public override void OnShow(object param) { _userEventObserver = (IUserEventObserver)param; var loginServer = PlayerPrefs.GetString("LoginServer", "127.0.0.1:9001"); var loginServerType = PlayerPrefs.GetString("LoginServerType", "Tcp"); var loginId = PlayerPrefs.GetString("LoginId", "test"); var loginPassword = PlayerPrefs.GetString("LoginPassword", "1234"); ServerInput.text = loginServer; ServerProtocol.value = ServerProtocol.options.FindIndex(v => v.text.Equals(loginServerType, StringComparison.OrdinalIgnoreCase)); IdInput.text = loginId; PasswordInput.text = loginPassword; }
async Task <TrackableUserContext> IUserInitiator.Load(IUserEventObserver observer) { // load context var userContext = (TrackableUserContext)(await RedisStorage.UserContextMapper.LoadAsync(RedisStorage.Db, "User_" + _id)); if (userContext == null) { throw new ResultException(ResultCodeType.UserNeedToBeCreated); } await OnUserInitiated(userContext, observer); return(userContext); }
async Task <TrackableUserContext> IUserInitiator.Create(IUserEventObserver observer, string nickname) { // create context var userContext = new TrackableUserContext { Data = new TrackableUserData { Nickname = nickname, RegisterTime = DateTime.UtcNow, }, Notes = new TrackableDictionary <int, string>() }; await RedisStorage.UserContextMapper.CreateAsync(RedisStorage.Db, userContext, "User_" + _id); await OnUserInitiated(userContext, observer); return(userContext); }
async Task <TrackableUserContext> IUserInitiator.Load(IUserEventObserver observer) { // load context var userContext = (TrackableUserContext)await MongoDbStorage.UserContextMapper.LoadAsync( MongoDbStorage.Instance.UserCollection, _id); if (userContext == null) { throw new ResultException(ResultCodeType.UserNeedToBeCreated); } await OnUserInitiated(userContext, observer); // user post-login handler userContext.SetDefaultTracker(); userContext.Data.LoginCount += 1; userContext.Data.LastLoginTime = DateTime.UtcNow; userContext.Tracker.ApplyTo(_userContextSaveTracker); return(userContext); }
public static SurrogateForIUserEventObserver Convert(IUserEventObserver value) { if (value == null) return null; var o = (UserEventObserver)value; return new SurrogateForIUserEventObserver { Channel = o.Channel, ObserverId = o.ObserverId }; }
async Task<TrackableUserContext> IUserInitiator.Load(IUserEventObserver observer) { // load context var userContext = (TrackableUserContext)await MongoDbStorage.UserContextMapper.LoadAsync( MongoDbStorage.Instance.UserCollection, _id); if (userContext == null) throw new ResultException(ResultCodeType.UserNeedToBeCreated); await OnUserInitiated(userContext, observer); // user post-login handler userContext.SetDefaultTracker(); userContext.Data.LoginCount += 1; userContext.Data.LastLoginTime = DateTime.UtcNow; userContext.Tracker.ApplyTo(_userContextSaveTracker); return userContext; }
async Task <IUser> IUserLogin.Login(string id, string password, IUserEventObserver observer) { if (string.IsNullOrEmpty(id)) { throw new ResultException(ResultCodeType.ArgumentError); } if (string.IsNullOrEmpty(password)) { throw new ResultException(ResultCodeType.ArgumentError); } // check account if (_isInternalAccess == false) { if (id.ToLower().StartsWith("bot") || id.ToLower().StartsWith("test")) { throw new ResultException(ResultCodeType.LoginFailedNoUser); } if (await Authenticator.AuthenticateAsync(id, password) == false) { throw new ResultException(ResultCodeType.LoginFailedIncorrectPassword); } } else { if (id.ToLower().StartsWith("bot") == false && id.ToLower().StartsWith("test") == false) { if (await Authenticator.AuthenticateAsync(id, password) == false) { throw new ResultException(ResultCodeType.LoginFailedIncorrectPassword); } } } // try to create user actor with user-id var user = await _clusterContext.UserTable.WithTimeout(TimeSpan.FromSeconds(30)).GetOrCreate(id, new object[] { observer }); if (user.Actor == null) { throw new ResultException(ResultCodeType.InternalError); } if (user.Created == false) { throw new ResultException(ResultCodeType.LoginFailedAlreadyConnected); } // bound actor to this channel or new channel on user gateway IRequestTarget boundTarget; try { boundTarget = await _channel.BindActorOrOpenChannel( user.Actor, new TaggedType[] { typeof(IUser) }, ActorBindingFlags.OpenThenNotification | ActorBindingFlags.CloseThenStop | ActorBindingFlags.StopThenCloseChannel, "UserGateway", null); } catch (Exception e) { _logger.Error($"BindActorOrOpenChannel error (UserId={id})", e); user.Actor.Tell(InterfacedPoisonPill.Instance); throw new ResultException(ResultCodeType.InternalError); } // once login done, stop this Self.Tell(InterfacedPoisonPill.Instance); return(boundTarget.Cast <UserRef>()); }
private IEnumerator ProcessLogin(ChannelType channelType, string credential) { WriteLine(string.Format("ProcessLogin({0}, {1})", channelType, credential)); // create communicator var communicator = UnityCommunicatorFactory.Create(); { var channelFactory = communicator.ChannelFactory; channelFactory.Type = channelType; channelFactory.ConnectEndPoint = new IPEndPoint(IPAddress.Loopback, 9001); channelFactory.CreateChannelLogger = () => LogManager.GetLogger("Channel"); channelFactory.PacketSerializer = PacketSerializer.CreatePacketSerializer <DomainProtobufSerializer>(); } var channel = communicator.CreateChannel(); // connect to gateway var t0 = channel.ConnectAsync(); yield return(t0.WaitHandle); if (t0.Exception != null) { WriteLine("Connection Failed: " + t0.Exception); yield break; } // login with an user-login actor var userLogin = channel.CreateRef <UserLoginRef>(); var t1 = userLogin.Login("C123"); yield return(t1.WaitHandle); if (t1.Exception != null) { WriteLine("Login Failed: " + t1.Exception); yield break; } // initiate user from user-initiator var userInitiator = (UserInitiatorRef)t1.Result.Item2; if (userInitiator.IsChannelConnected() == false) { yield return(userInitiator.ConnectChannelAsync().WaitHandle); } var observer = communicator.ObserverRegistry.Create <IUserEventObserver>(this); var t2 = userInitiator.Load(observer); yield return(t2.WaitHandle); if (t2.Exception != null) { WriteLine("Load Failed: " + t2.Exception); if (t2.Exception is ResultException && ((ResultException)t2.Exception).ResultCode == ResultCodeType.UserNeedToBeCreated) { var t3 = userInitiator.Create(observer, "Unity"); yield return(t3.WaitHandle); if (t3.Exception != null) { WriteLine("Create Failed: " + t3.Exception); yield break; } _userContext = t3.Result; } else { yield break; } } else { _userContext = t2.Result; } _communicator = communicator; _user = userInitiator.Cast <UserRef>(); _userObserver = observer; var userJson = JsonConvert.SerializeObject(_userContext, s_jsonSerializerSettings); WriteLine(string.Format("UserLoaded: {0}]\n", userJson)); }