public async Task Handle(InitGameEvent message, CancellationToken cancellationToken) { var player = message.Player; await _queueHandler.SendQueueMessage(new ReceiveEmailQueue(player.Id)); var model = await _chatOnlineProvider.GetPlayerOnline(player.Id); var isOnline = model != null; if (isOnline) { await _mudProvider.ShowMessage(player.Id, $"<font color=#FF5555>你重新连接到【{_appConfig.Site.Name}】。</font>"); } else { await _mudProvider.ShowMessage(player.Id, _appConfig.Site.WelcomeWords.Replace("{name}", player.Name)); } //await CheckPlayerMainQuest(player); await _queueHandler.SendQueueMessage(new CheckPlayerMainQuestQueue(player.Id)); await _queueHandler.SendQueueMessage(new CheckPlayerNewbieQuestQueue(player.Id)); }
public async Task <string> CreateAsync(string userId, CreateGameModel model) { string userHeroId = string.Empty; string opponentHeroId = string.Empty; Task userTask = _userRepository.GetByIdAsync(userId).ContinueWith(r => { User result = r.Result; if (result?.Heroes != null && result.Heroes.Count > 0) { userHeroId = result.Heroes[0].Id; } }); Task opponentTask = string.IsNullOrEmpty(model.OpponentId) ? Task.FromResult(true) : _userRepository.GetByIdAsync(model.OpponentId).ContinueWith(r => { User result = r.Result; if (result?.Heroes != null && result.Heroes.Count > 0) { opponentHeroId = result.Heroes[0].Id; } }); await Task.WhenAll(userTask, opponentTask); if (string.IsNullOrEmpty(userHeroId) || (!string.IsNullOrEmpty(model.OpponentId) && string.IsNullOrEmpty(opponentHeroId))) { throw new KeyNotFoundException("Hero not found"); } var gameId = Guid.NewGuid(); GameModel gameModel = new GameModel { Id = gameId.ToString(), CreatedBy = userId, UserHeroId = userHeroId, OpponentId = model.OpponentId, OpponentHeroId = opponentHeroId, Status = GameStatus.Requesting, CreatedAt = DateTime.UtcNow, Position = new PositionModel { Lat = model.Lat, Lng = model.Lng }, OpponentExtInfo = model.OpponentExtInfo, SelfPlaying = model.SelfPlaying, Speed = model.Speed, Difficulty = model.Difficulty, UserArmySetting = model.UserArmySetting }; GameModel game = gameModel; using (IEventStream stream = _store.CreateStream(new Guid(game.Id))) { var initEvent = new InitGameEvent { UserId = userId, UserHeroId = userHeroId, OpponentId = model.OpponentId, OpponentHeroId = opponentHeroId, SelfPlaying = model.SelfPlaying, Speed = model.Speed, Difficulty = model.Difficulty, UserArmySetting = Mapper.Map <GameArmySetting>(model.UserArmySetting), UserTroopTypes = Mapper.Map <List <CastleTroopType> >(await GetRandomTroopTypes()), OpponentTroopTypes = Mapper.Map <List <CastleTroopType> >(await GetRandomTroopTypes()), }; initEvent.UserProducedTroopTypes = new List <string>() { initEvent.UserTroopTypes .First(e => e.UpkeepCoins == initEvent.UserTroopTypes.Min(f => f.UpkeepCoins)) .ResourceType }; initEvent.OpponentProducedTroopTypes = new List <string>() { initEvent.OpponentTroopTypes .First(e => e.UpkeepCoins == initEvent.OpponentTroopTypes.Min(f => f.UpkeepCoins)) .ResourceType }; stream.Add(new EventMessage { Body = initEvent }); stream.Add(new EventMessage { Body = new ChangeGameStatusEvent { Status = GameStatus.Requesting } }); stream.CommitChanges(Guid.NewGuid()); } await Repository.AddAsync(Mapper.Map <Game>(game)); _domain.Build(gameId, InitGameSnapshot); return(game.Id); }