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)); }
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(); } }
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(); } }
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); }
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")); }
private void StartGame(ConnectGamer gamer) { GameMechanic game = gamer.Game.Game; game.isRun = true; foreach (Gamer g in game.Gamers) { g.Ready = false; } SetTask(gamer); }
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); } }
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); } } }
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(); } }
public List <string> GamersId(ConnectGamer gamer) => gamer?.Game.Gamers.Select(x => x.Id).ToList();
public void SetAnswer(long RecipientId) { ConnectGamer gamer = Gamer(); SetAnswer(gamer.GamerId, RecipientId, gamer); }