Exemplo n.º 1
0
        public override Task OnDisconnected(bool stopCalled)
        {
            MutexGame.WaitOne();

            ConnectGamer gamer = Gamer();

            if (gamer != null)
            {
                Clients.Clients(GamersId(gamer)).DeleteGamer(gamer.GamerId);

                ConnectGame  connectGame = gamer.Game;
                GameMechanic game        = connectGame.Game;

                if (connectGame.Gamers.Count() == 1)
                {
                    Keys.Add(game.Id);
                    Games.Remove(connectGame);
                }
                else
                {
                    game.RemoveGamer(gamer.GamerId);
                    connectGame.Gamers.Remove(gamer);
                }
            }

            MutexGame.ReleaseMutex();

            return(base.OnDisconnected(stopCalled));
        }
Exemplo n.º 2
0
        public void SetReady(bool Ready)
        {
            ConnectGamer gamer = Gamer();

            if (gamer != null)
            {
                GameMechanic game = gamer.Game.Game;

                gamer.Gamer.Ready = Ready;
                Clients.Clients(GamersId(gamer)).SetReady(new JsonGamer(gamer));

                if (gamer.Game.Gamers.All(x => x.Gamer.Ready))
                {
                    if (!game.isRun)
                    {
                        StartGame(gamer);
                    }
                    else if (game.IsAllAnswer)
                    {
                        SetTask(gamer);
                    }
                }
            }
            else
            {
                Clients.Caller.Reload();
            }
        }
Exemplo n.º 3
0
        public void Connect(long GameId)
        {
            Identity identity = new Identity();

            ConnectGamer connectGamer = null;

            if (identity.isAuth)
            {
                connectGamer = Connection(GameId, identity.User.Get <Gamer>());

                Clients.Caller.SetGame(new JsonGame(connectGamer.Game));
                Clients.Caller.SetYou(new JsonGamer(connectGamer));
                Clients.Caller.SetGamers(connectGamer.Game.Gamers.Select(x => new JsonGamer(x)).ToList());

                Clients.Clients(GamersId())
                .SetGamers(new List <JsonGamer>()
                {
                    new JsonGamer(connectGamer)
                });
            }
            else
            {
                Clients.Caller.Auth();
            }
        }
Exemplo n.º 4
0
        private ConnectGamer Connection(long Id, Gamer gamer)
        {
            if (gamer == null)
            {
                return(null);
            }

            MutexGame.WaitOne();

            string       ConnectionId = Context.ConnectionId;
            ConnectGamer connectGamer = Gamer(ConnectionId) ?? GamerById(gamer.Id);
            ConnectGame  connectGame  = connectGamer?.Game;

            if (connectGamer == null)
            {
                if (Id != 0)
                {
                    connectGame = Game(Id);

                    if (connectGame == null)
                    {
                        connectGame = new ConnectGame(Id);
                        Games.Add(connectGame);
                    }
                    else if (connectGame.Game.isRun)
                    {
                        Id = 0;
                    }
                }

                if (Id == 0)
                {
                    connectGame = Games.FirstOrDefault(x => x.Gamers.Count < 8 && !x.Game.isRun);

                    if (connectGame == null)
                    {
                        connectGame = new ConnectGame(Key());
                        Games.Add(connectGame);
                    }
                }

                connectGamer = new ConnectGamer()
                {
                    Id    = ConnectionId,
                    Gamer = gamer,
                    Game  = connectGame
                };
                connectGame.Game.AddGamer(connectGamer.GamerId, connectGamer.Gamer);
                connectGame.Gamers.Add(connectGamer);
            }
            else
            {
                connectGamer.Id = ConnectionId;
            }

            MutexGame.ReleaseMutex();

            return(connectGamer);
        }
Exemplo n.º 5
0
        private void SetResult(ConnectGamer gamer)
        {
            LanguageDictionary language = new LanguageDictionary();
            GameMechanic       game     = gamer.Game.Game;

            List <JsonResult> results = game.Results().Select(x => new JsonResult()
            {
                Feature = x.Feature.Value(language.GetLanguage()),
                Id      = x.Gamer.Id
            }).ToList();

            Clients.Clients(GamersId(gamer)).SetResult(results, language.Get("Result"));
        }
Exemplo n.º 6
0
        private void StartGame(ConnectGamer gamer)
        {
            GameMechanic game = gamer.Game.Game;

            game.isRun = true;

            foreach (Gamer g in game.Gamers)
            {
                g.Ready = false;
            }

            SetTask(gamer);
        }
Exemplo n.º 7
0
        private void SetTask(ConnectGamer gamer)
        {
            GameMechanic game = gamer.Game.Game;

            game.IndexTask++;

            if (game.IsAllTask)
            {
                SetResult(gamer);
            }
            else
            {
                Clients.Clients(GamersId(gamer)).SetTask(new JsonTask()
                {
                    Value = game.Tasks[game.IndexTask].Value(LanguageDictionary.GetLanguages())
                });
                Thread TimerThread = new Thread(new ParameterizedThreadStart(TimerStart));
                TimerThread.Start(gamer);
            }
        }
Exemplo n.º 8
0
        protected void TimerStart(object Object)
        {
            ConnectGamer gamer = (ConnectGamer)Object;
            GameMechanic game  = gamer.Game.Game;
            ConnectGame  cgame = gamer.Game;
            int          time  = 1;

            do
            {
                Clients.Clients(GamersId(gamer)).SetTimer(time--);
                Thread.Sleep(1000);
            } while (time > 0 && !game.IsAllAnswer);

            if (!game.IsAllAnswer)
            {
                foreach (Gamer item in game.Gamers.Where(x => !game.Answers.Any(z => z.SenderId == x.Id)))
                {
                    SetAnswer(item.Id, item.Id);
                }
            }
        }
Exemplo n.º 9
0
        private void SetAnswer(long SenderId, long RecipientId, ConnectGamer gamer = null)
        {
            gamer = gamer ?? GamerById(SenderId);
            GameMechanic game = gamer.Game.Game;

            IO_Answer answer = game.AddAnswer(SenderId, RecipientId);

            if (answer != null)
            {
                bool All = game.IsAllAnswer;

                if (!All)
                {
                    Clients.Caller.SetAnswers(new List <JsonAnswer>()
                    {
                        new JsonAnswer(answer)
                    });
                }
                else
                {
                    game.CalculatorCoints();
                    foreach (Gamer g in game.Gamers)
                    {
                        g.Ready = false;
                    }

                    Clients.Clients(GamersId(gamer))
                    .SetAnswers(game.Answers.Select(x => new JsonAnswer(x)).ToList());

                    Clients.Clients(GamersId(gamer))
                    .SetGamers(gamer.Game.Gamers.Select(x => new JsonGamer(x)).ToList());
                }
            }
            else
            {
                Clients.Caller.Reload();
            }
        }
Exemplo n.º 10
0
 public List <string> GamersId(ConnectGamer gamer) => gamer?.Game.Gamers.Select(x => x.Id).ToList();
Exemplo n.º 11
0
        public void SetAnswer(long RecipientId)
        {
            ConnectGamer gamer = Gamer();

            SetAnswer(gamer.GamerId, RecipientId, gamer);
        }