public MatchmakingController(MatchmakingService matchmakingService,
                              UserManager <ApplicationUser> userManager, IGameRepository gameRepository)
 {
     this.matchmakingService = matchmakingService;
     this.userManager        = userManager;
     this.gameRepository     = gameRepository;
 }
示例#2
0
        public void Cancel_RemovesSession()
        {
            // Arrange
            var sessionId           = Guid.NewGuid();
            var mockMatchRepository = new Mock <IMatchRepository>();

            IList <MatchmakingSession> sessions = new List <MatchmakingSession>()
            {
                new MatchmakingSession
                {
                    Id = sessionId
                }
            };

            var mockMatchSessionService = new Mock <IMatchSessionService>();

            mockMatchSessionService.SetupGet(x => x.Sessions).Returns(sessions);
            mockMatchSessionService.SetupSet(x => x.Sessions).Callback(r => sessions = r);

            var mockBus = new Mock <IBus>();
            var service = new MatchmakingService(mockMatchRepository.Object, mockBus.Object, mockMatchSessionService.Object);

            // Act
            service.Cancel(sessionId);

            // Assert
            Assert.True(sessions.Count == 0);
        }
示例#3
0
        public void GetSession_ReturnsSession()
        {
            // Arrange
            var sessionId           = Guid.NewGuid();
            var mockMatchRepository = new Mock <IMatchRepository>();

            IList <MatchmakingSession> sessions = new List <MatchmakingSession>()
            {
                new MatchmakingSession
                {
                    Id = sessionId
                }
            };

            var mockMatchSessionService = new Mock <IMatchSessionService>();

            mockMatchSessionService.SetupGet(x => x.Sessions).Returns(sessions);
            mockMatchSessionService.SetupSet(x => x.Sessions).Callback(r => sessions = r);

            var mockBus = new Mock <IBus>();
            var service = new MatchmakingService(mockMatchRepository.Object, mockBus.Object, mockMatchSessionService.Object);

            // Act
            var session = service.GetSession(sessionId);

            // Assert
            Assert.Equal(session, sessions.First());
        }
示例#4
0
        public void JoinSession_ReturnsCompletedSession()
        {
            // Arrange
            var sessionId = Guid.NewGuid();
            var userId    = Guid.NewGuid();

            var mockMatchRepository = new Mock <IMatchRepository>();

            IList <MatchmakingSession> sessions = new List <MatchmakingSession>()
            {
                new MatchmakingSession
                {
                    Id           = sessionId,
                    HostPlayerId = Guid.NewGuid()
                }
            };

            var mockMatchSessionService = new Mock <IMatchSessionService>();

            mockMatchSessionService.SetupGet(x => x.Sessions).Returns(sessions);
            mockMatchSessionService.SetupSet(x => x.Sessions).Callback(r => sessions = r);

            var mockBus = new Mock <IBus>();
            var service = new MatchmakingService(mockMatchRepository.Object, mockBus.Object, mockMatchSessionService.Object);

            // Act
            var session = service.JoinSession(sessionId, userId);

            // Assert
            Assert.Equal(session.JoinedPlayerId, userId);
            Assert.False(session.Open);
        }
示例#5
0
        public void JoinSession_AsHost_ThrowsException()
        {
            // Arrange
            var sessionId = Guid.NewGuid();
            var userId    = Guid.NewGuid();

            var mockMatchRepository = new Mock <IMatchRepository>();

            IList <MatchmakingSession> sessions = new List <MatchmakingSession>()
            {
                new MatchmakingSession
                {
                    Id           = sessionId,
                    HostPlayerId = userId
                }
            };

            var mockMatchSessionService = new Mock <IMatchSessionService>();

            mockMatchSessionService.SetupGet(x => x.Sessions).Returns(sessions);
            mockMatchSessionService.SetupSet(x => x.Sessions).Callback(r => sessions = r);

            var mockBus = new Mock <IBus>();
            var service = new MatchmakingService(mockMatchRepository.Object, mockBus.Object, mockMatchSessionService.Object);

            // Act & Assert
            Assert.Throws <HubException>(() => service.JoinSession(sessionId, userId));
        }
示例#6
0
        public async Task LfgCommand(CommandContext ctx)
        {
            var lfgEmbed = new DiscordEmbedBuilder
            {
                Title       = "Matchmaking",
                Description = "",
                Color       = new DiscordColor(28, 128, 219)
            }
            .AddField("Klik hier om naar de website te gaan en andere spelers te zoeken!",
                      "Je kan ook hieronder reageren met de game(s) waarvoor je medespelers zoekt!")
            .WithThumbnail("https://cdn.pixabay.com/photo/2015/12/08/17/40/magnifying-glass-1083378_960_720.png")
            .WithFooter("Reacties worden na 30 seconden geregistreerd.");

            DiscordMessage message;

            if (ctx.Member is not null)
            {
                message = await ctx.Member.SendMessageAsync(lfgEmbed.Build());
            }
            else
            {
                await ctx.TriggerTypingAsync();

                message = await ctx.RespondAsync(lfgEmbed.Build());
            }

            await Task.Delay(100);

            var gamesWithEmoji = MatchmakingService.Games
                                 .Where(g => g.DiscordIconId != null)
                                 .ToImmutableList();

            foreach (var game in gamesWithEmoji)
            {
                await message.CreateReactionAsync(
                    DiscordEmoji.FromGuildEmote(ctx.Client, game.DiscordIconId.GetValueOrDefault())
                    );
            }

            var interactivity = ctx.Client.GetInteractivity();
            var reactions     = await interactivity
                                .CollectReactionsAsync(message, TimeSpan.FromSeconds(30));

            foreach (var reaction in reactions)
            {
                foreach (var game in gamesWithEmoji)
                {
                    var emoji = DiscordEmoji.FromGuildEmote(ctx.Client, game.DiscordIconId.GetValueOrDefault());
                    if (reaction.Emoji == emoji)
                    {
                        var user = ctx.User;
                        MatchmakingService.AddUser(user.Username, user.Discriminator, user.AvatarUrl, user.Id, game);
                        Logger.LogInformation("Added {game} to {member}'s matchmaking list.", game, user);
                    }
                }
            }
        }
示例#7
0
        public async Task Matchmaking_WhenAlreadySimulatingAGame_ShouldThrowException()
        {
            //Arrange
            var userId = Guid.NewGuid();
            var mockMatchRepository = new Mock <IMatchRepository>();

            mockMatchRepository.Setup(x => x.GetInProgressAsync(userId)).Returns(Task.FromResult <Guid?>(Guid.NewGuid()));

            var mockBus = new Mock <IBus>();
            var mockMatchSessionService = new Mock <IMatchSessionService>();

            var service = new MatchmakingService(mockMatchRepository.Object, mockBus.Object, mockMatchSessionService.Object);

            //Act & Assert
            await Assert.ThrowsAsync <Exception>(() => service.Matchmake(userId));
        }
示例#8
0
        private void SceneCreated(Scene scene)
        {
            var pluginName = scene.GetHostMetadata("stormancer.plugins.matchmaking");

            if (!string.IsNullOrEmpty(pluginName))
            {
                var matchmakingService = new MatchmakingService(scene);
                scene.DependencyResolver.RegisterComponent(matchmakingService);
            }

            pluginName = scene.GetHostMetadata("stormancer.gamesession");
            if (!string.IsNullOrEmpty(pluginName))
            {
                var gameSessionService = new GameSessionService(scene);
                scene.DependencyResolver.RegisterComponent(gameSessionService);
            }
        }
示例#9
0
        public void CreateSession_CreatesANewSession()
        {
            //Arrange
            var userId = Guid.NewGuid();
            var mockMatchRepository = new Mock <IMatchRepository>();

            IList <MatchmakingSession> sessions = new List <MatchmakingSession>();

            var mockMatchSessionService = new Mock <IMatchSessionService>();

            mockMatchSessionService.SetupGet(x => x.Sessions).Returns(sessions);
            mockMatchSessionService.SetupSet(x => x.Sessions).Callback(r => sessions = r);

            var mockBus = new Mock <IBus>();
            var service = new MatchmakingService(mockMatchRepository.Object, mockBus.Object, mockMatchSessionService.Object);

            // Act
            var session = service.CreateSession(userId);

            Assert.Equal(session.HostPlayerId, userId);
            Assert.Contains(session, sessions);
        }
示例#10
0
 public MatchmakingController(MatchmakingService matchmakingService, TrackerService trackerService)
 {
     _matchmakingService = matchmakingService;
     _trackerService     = trackerService;
 }
示例#11
0
 public ManagementController(MatchmakingService matchmakingService)
 {
     _matchmakingService = matchmakingService;
 }
示例#12
0
 public ChatController(MatchmakingService matchmakingService)
 {
     _matchmakingService = matchmakingService;
 }