public EGameWorkerResult Invite(InviteQuery query)
        {
            var freeBot = botRepository.GetFreeBot();

            if (freeBot == null)
            {
                logger.Warn($"There are no avaliable bots. Users with ids are not invited: {string.Join(",", query.UserIds)}");
                return(EGameWorkerResult.NoFreeBots);
            }

            var botManager = new BotManager(botRepository, freeBot);

            steamClient.ConnectBot(botManager);

            steamClient.DoBotAction(x => steamClient.InviteToParty((InviteQuery)x), query);

            var botActionsResult = steamClient.WaitBotActions();

            if (!botActionsResult)
            {
                return(Invite(query));
            }

            return(EGameWorkerResult.Ok);
        }
Exemple #2
0
        public void InviteMethodIsCalledWhenFreeBotIsConnected()
        {
            dataContext.AddBotWith("plaprobot2", EBotState.Free);
            var query = new InviteQuery {
                UserIds = new ulong[] { 123 }
            };

            gameWorker.Invite(query);

            CollectionAssert.AreEqual(query.UserIds, steamClient.InvitationRecepient, "Invitations were not sent.");
        }
Exemple #3
0
        public void FreeBotIsConnectedWhenExists()
        {
            dataContext.AddBotWith("plaprobot2", EBotState.Free);
            var query = new InviteQuery {
                UserIds = new ulong[] { 123 }
            };

            gameWorker.Invite(query);

            Assert.IsTrue(steamClient.IsBotConnected, "Free bot is not connected to steam.");
        }
Exemple #4
0
        public void ReturnNoFreeBotsResultWhenAllBotsAreWorkedOrCrashed()
        {
            dataContext.AddBotWith("plaprobot2", EBotState.Crashed);
            var query = new InviteQuery {
                UserIds = new ulong[] { 123 }
            };

            var result = gameWorker.Invite(query);

            Assert.AreEqual(EGameWorkerResult.NoFreeBots, result, "Test does not return 'NoFreeBots' result.");
        }
        public EGameWorkerResult Invite([FromBody] InviteQuery query)
        {
            if (query.UserIds == null || query.UserIds.Length < 1)
            {
                return(EGameWorkerResult.InvalidQuery);
            }

            var botRepository = new BotRepository(botDataContext);
            var steamClient   = new SteamClient(logger);
            var gameWorker    = new GameWorker(botRepository, logger, steamClient);

            var result = gameWorker.Invite(query);

            return(result);
        }
Exemple #6
0
        public void InviteToParty(InviteQuery query)
        {
            logger.Info($"Inviting to party with userIds from {string.Join(", ", query.UserIds)}:");

            foreach (var userId in query.UserIds)
            {
                var cmMsg = new ClientGCMsgProtobuf <CMsgInviteToParty>((uint)EGCBaseMsg.k_EMsgGCInviteToParty);
                cmMsg.Body.steam_id = userId;
                gameCoordinator.Send(cmMsg, Dota2AppId);
                logger.Info($"User with id {userId} is sent.");
            }

            ProPlayerId = query.UserIds.FirstOrDefault();

            WaitLeavePartyBot(query.BotLeaveTime);
        }
 public void InviteToParty(InviteQuery query)
 {
     InvitationRecepient.AddRange(query.UserIds);
 }