Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 public async Task ReplaceUserAsync(int uid, TrackableUserContext user)
 {
     var bson = _userMapper.ConvertToBsonDocument(user);
     await Collection.ReplaceOneAsync(
         Builders<BsonDocument>.Filter.Eq("_id", uid),
         bson);
 }
Esempio n. 3
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>();
        }
        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);
        }
Esempio n. 6
0
        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>();
        }
Esempio n. 7
0
 public Task CreateUserAsync(int uid, TrackableUserContext user)
 {
     return _userMapper.CreateAsync(this[_collectionName], user, uid);
 }
Esempio n. 8
0
        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;
        }
Esempio n. 9
0
        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) });
        }
Esempio n. 10
0
 public Task CreateUserAsync(int uid, TrackableUserContext user)
 {
     return _userMapper.CreateAsync(_connection, user, uid);
 }
Esempio n. 11
0
    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));
    }