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); }
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."); }
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."); }
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); }
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); }