コード例 #1
0
ファイル: GameServicesTest.cs プロジェクト: innerjoin/dog2go
        public void TestGetNextPlayerNotInitalizedGameTable()
        {
            GameTable table = MakeInitialGameTable;
            string    user  = ParticipationService.GetNextPlayer(null, "user1");

            Assert.AreEqual(true, user == null);
        }
コード例 #2
0
ファイル: GameServicesTest.cs プロジェクト: innerjoin/dog2go
        public void TestGetNextPlayerNonExistentUser()
        {
            GameTable table = MakeInitialGameTable;
            string    user  = ParticipationService.GetNextPlayer(table, "user5");

            Assert.AreEqual(true, user == null);
        }
コード例 #3
0
ファイル: GameServicesTest.cs プロジェクト: innerjoin/dog2go
        public void TestGetNextPlayerCorrectlyInitialized()
        {
            GameTable table = MakeInitialGameTable;
            string    user2 = ParticipationService.GetNextPlayer(table, "user1");

            Assert.AreEqual(true, user2.Equals("user2"));
            string user3 = ParticipationService.GetNextPlayer(table, "user2");

            Assert.AreEqual(true, user3.Equals("user3"));
            string user4 = ParticipationService.GetNextPlayer(table, "user3");

            Assert.AreEqual(true, user4.Equals("user4"));
            string user1 = ParticipationService.GetNextPlayer(table, "user4");

            Assert.AreEqual(true, user1.Equals("user1"));
        }
コード例 #4
0
ファイル: GameHub.cs プロジェクト: innerjoin/dog2go
        private void NotifyNextPlayer(string nextUserName, GameTable actualGameTable)
        {
            string nextPlayerNickname;

            if (string.IsNullOrWhiteSpace(nextUserName))
            {
                nextPlayerNickname = ParticipationService.GetNextPlayer(actualGameTable, Context.User.Identity.Name);
            }
            else
            {
                nextPlayerNickname = nextUserName;
            }
            User            nextUser       = UserRepository.Instance.Get().FirstOrDefault(user => user.Value.Nickname == nextPlayerNickname).Value;
            List <HandCard> cards          = actualGameTable.CardServiceData.GetActualHandCards(nextUser, actualGameTable);
            List <HandCard> validHandCards = actualGameTable.CardServiceData.ProveCards(cards, actualGameTable, nextUser);
            IHubContext     context        = GlobalHost.ConnectionManager.GetHubContext <ChatHub>();

            actualGameTable.ActualParticipation = ParticipationService.GetParticipation(actualGameTable, nextUser.Nickname);
            Task task = context.Clients.Group(actualGameTable.Identifier.ToString(), nextUser.ConnectionIds.ToArray()).broadcastSystemMessage(ServerMessages.InformOtherPlayer.Replace("{0}", nextUser.Nickname), actualGameTable.Identifier, DateTime.Now.Ticks + GetMessageCounter());

            task.Wait();
            if (validHandCards.Count > 0 && validHandCards.Find(card => card.IsValid) == null)
            {
                if (!nextUser.CardDropped)
                {
                    context.Clients.Group(actualGameTable.Identifier.ToString(), nextUser.ConnectionIds.ToArray()).broadcastStateMessage(ServerMessages.NoValidCardAvailable.Replace("{0}", nextUser.Nickname), actualGameTable.Identifier, DateTime.Now.Ticks + GetMessageCounter());
                    nextUser.ConnectionIds.ForEach(id => context.Clients.Client(id).broadcastStateMessage(ServerMessages.YourCardsHaveBeenDropped, actualGameTable.Identifier, DateTime.Now.Ticks + GetMessageCounter()));
                }
            }

            nextUser.ConnectionIds.ForEach(id =>
            {
                if (validHandCards.Find(card => card.IsValid) != null)
                {
                    Task chatTask = context.Clients.Client(id).broadcastSystemMessage(ServerMessages.NofityActualPlayer, actualGameTable.Identifier, DateTime.Now.Ticks + GetMessageCounter());
                    chatTask.Wait();
                    ColorCode colorCode = GameTableService.GetColorCodeForUser(Games, GameTableService.AreAllEndFieldsUsedForColorCode(actualGameTable,
                                                                                                                                       GameTableService.GetColorCodeForUser(Games, nextUser.Nickname, actualGameTable.Identifier)) ?
                                                                               ParticipationService.GetPartner(nextUser, actualGameTable.Participations).Nickname : nextUser.Nickname, actualGameTable.Identifier);
                    Clients.Client(id).notifyActualPlayer(validHandCards, colorCode, actualGameTable.Identifier);
                }
                else
                {
                    actualGameTable.CardServiceData.RemoveAllCardsFromUser(actualGameTable, nextUser);
                    nextUser.CardDropped = true;
                    Clients.Client(id).dropCards(actualGameTable.Identifier);

                    if (actualGameTable.CardServiceData.ProveCardsCount % GlobalDefinitions.NofParticipantsPerTable != 0)
                    {
                        NotifyNextPlayer(ParticipationService.GetNextPlayer(actualGameTable, nextUser.Nickname), actualGameTable);
                        return;
                    }

                    if (!actualGameTable.CardServiceData.AreCardsOnHand(actualGameTable))
                    {
                        SendCardsForRound(actualGameTable);
                    }
                    else
                    {
                        NotifyNextPlayer(ParticipationService.GetNextPlayer(actualGameTable, nextUser.Nickname), actualGameTable);
                    }
                }
            });
        }