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 async Task ReplaceUserAsync(int uid, TrackableUserContext user) { var bson = _userMapper.ConvertToBsonDocument(user); await Collection.ReplaceOneAsync( Builders<BsonDocument>.Filter.Eq("_id", uid), bson); }
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>(); }
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) }); }
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); }
public async Task PrepareUserAsync(string id, string password, string userName = null) { if (User != null) throw new InvalidOperationException("Already user prepared!"); if (UserInitiator == null) await LoginAsync(id, password); _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, userName ?? id.ToUpper()); else throw; } User = UserInitiator.Cast<UserRef>(); }
public Task CreateUserAsync(int uid, TrackableUserContext user) { return _userMapper.CreateAsync(this[_collectionName], user, uid); }
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 Task CreateUserAsync(int uid, TrackableUserContext user) { return _userMapper.CreateAsync(_connection, user, uid); }
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)); }