private static void ClientOnDelimiterDataReceived(object sender, Message message) { //if (message.MessageString != "ping") // Console.WriteLine(message.MessageString); }
private static void ServerOnDelimiterDataReceived(object sender, Message message) { //MessageBox.Show(message.MessageString); }
private static void ClientOnDataReceived(object sender, Message message) { try { var messages = message.MessageString.Split('\u0013'); foreach (var msg in messages) { if (msg == "ping" || String.IsNullOrWhiteSpace(msg)) return; //ignore string t = null; try { dynamic m = JsonConvert.DeserializeObject(msg); t = m.JType?.ToString(); } catch (Exception e) { //Bot.SendTextMessage(Settings.MainChatId, e.Message); continue; } Werewolf game; if (t != null) { Console.WriteLine(t); switch (t) { case "PlayerJoinInfo": var pji = JsonConvert.DeserializeObject<PlayerJoinInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == pji.GroupId); game?.AddPlayer(pji.User); break; case "GameStartInfo": var gsi = JsonConvert.DeserializeObject<GameStartInfo>(msg); //double check we don't already have a game... game = Games.FirstOrDefault(x => x.ChatId == gsi.Chat.Id); if (game != null) { game.AddPlayer(gsi.User); } else { game = new Werewolf(gsi.Chat.Id, gsi.User, gsi.Chat.Title, gsi.Chaos); Games.Add(game); GamesStarted++; } break; case "ForceStartInfo": var fsi = JsonConvert.DeserializeObject<ForceStartInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == fsi.GroupId); game?.ForceStart(); break; //case "ReplyInfo": // var ri = JsonConvert.DeserializeObject<ReplyInfo>(msg); // game = // Games.FirstOrDefault( // x => x.Players.Any(p => p.TeleUser.Id == ri.Update.Message.From.Id && !p.IsDead)); // game?.HandleReply(ri.Update); // break; case "CallbackInfo": var ci = JsonConvert.DeserializeObject<CallbackInfo>(msg); game = Games.FirstOrDefault( x => x.Players.Any(p => !p.IsDead && p.TeleUser.Id == ci.Query.From.Id)); game?.HandleReply(ci.Query); break; case "PlayerListRequestInfo": var plri = JsonConvert.DeserializeObject<PlayerListRequestInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == plri.GroupId); game?.OutputPlayers(); break; case "PlayerFleeInfo": var pfi = JsonConvert.DeserializeObject<PlayerFleeInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == pfi.GroupId); game?.RemovePlayer(pfi.User); break; case "LoadLangInfo": var lli = JsonConvert.DeserializeObject<LoadLangInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == lli.GroupId); game?.LoadLanguage(lli.FileName); break; case "PlayerSmiteInfo": var psi = JsonConvert.DeserializeObject<PlayerSmiteInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == psi.GroupId); game?.FleePlayer(psi.UserId); break; case "UpdateNodeInfo": IsShuttingDown = true; break; case "SkipVoteInfo": var svi = JsonConvert.DeserializeObject<SkipVoteInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == svi.GroupId); game?.SkipVote(); break; default: Console.WriteLine(msg); break; } } } } catch (Exception e) { Console.WriteLine(e.Message + "\n" + message.MessageString); } }
private void NotifyEndTransmissionRx(TcpClient client, byte[] msg) { if (DataReceived != null) { Message m = new Message(msg, client, StringEncoder, Delimiter, AutoTrimStrings); DataReceived(this, m); } }
private static void ServerOnDataReceived(object sender, Message message) { try { var messages = message.MessageString.Split('\u0013'); foreach (var msg in messages) { if (String.IsNullOrWhiteSpace(msg) || String.IsNullOrWhiteSpace(msg.Replace("\0", ""))) continue; dynamic m = JsonConvert.DeserializeObject(msg); string t = m.JType?.ToString(); if (t != null) { Node node; switch (t) { case "ClientRegistrationInfo": var cri = JsonConvert.DeserializeObject<ClientRegistrationInfo>(msg); //validate the client if (cri.Secret == Settings.TcpSecret) { //we can register var n = new Node {ClientId = cri.ClientId, TcpClient = message.TcpClient}; Bot.Nodes.Add(n); Bot.NodeConnected(n); //n.Broadcast("Registered"); Program.Log($"Client registered: {cri.ClientId}"); } break; case "NodeInfo": var ni = JsonConvert.DeserializeObject<NodeInfo>(msg); node = Bot.Nodes.FirstOrDefault(x => x.ClientId == ni.ClientId); if (node == null) { node = new Node {ClientId = ni.ClientId, TcpClient = message.TcpClient}; Bot.Nodes.Add(node); Bot.NodeConnected(node); } node.CurrentGames = ni.CurrentGames; node.CurrentPlayers = ni.CurrentPlayers; node.DuplicateGamesRemoved = ni.DuplicateGamesRemoved; node.ThreadCount = ni.ThreadCount; node.TotalGames = ni.TotalGames; node.TotalPlayers = ni.TotalPlayers; node.Uptime = ni.Uptime; node.Games = ni.Games; node.Version = ni.Version; node.ShuttingDown = ni.ShuttingDown; if (ni.Version.Contains("5984.20648")) node.ShuttingDown = true; break; case "GameEndInfo": var gei = JsonConvert.DeserializeObject<GameEndInfo>(msg); node = Bot.Nodes.FirstOrDefault(x => x.ClientId == gei.ClientId); node?.EndGame(gei); break; } } } } catch (Exception e) { Program.Log($"Error in message received: {e.Message}\n{message.MessageString}", true); } }
internal void NotifyEndTransmissionRx(Server.ServerListener listener, TcpClient client, byte[] msg) { if (DataReceived != null) { Message m = new Message(msg, client, StringEncoder, Delimiter, AutoTrimStrings); DataReceived(this, m); } }
private static void ClientOnDataReceived(object sender, Message message) { try { var messages = message.MessageString.Split('\u0013'); foreach (var msg in messages) { if (msg == "ping" || String.IsNullOrWhiteSpace(msg)) { return; //ignore } string t = null; try { dynamic m = JsonConvert.DeserializeObject(msg); t = m.JType?.ToString(); } catch (Exception e) { //Bot.SendTextMessage(Settings.MainChatId, e.Message); continue; } Werewolf game; if (t != null) { Console.WriteLine(t); switch (t) { case "PlayerJoinInfo": var pji = JsonConvert.DeserializeObject <PlayerJoinInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == pji.GroupId); game?.AddPlayer(pji.User); break; case "GameStartInfo": var gsi = JsonConvert.DeserializeObject <GameStartInfo>(msg); //double check we don't already have a game... game = Games.FirstOrDefault(x => x.ChatId == gsi.Chat.Id); if (game != null) { game.AddPlayer(gsi.User); } else { game = new Werewolf(gsi.Chat.Id, gsi.User, gsi.Chat.Title, gsi.Chaos); Games.Add(game); GamesStarted++; } break; case "ForceStartInfo": var fsi = JsonConvert.DeserializeObject <ForceStartInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == fsi.GroupId); game?.ForceStart(); break; //case "ReplyInfo": // var ri = JsonConvert.DeserializeObject<ReplyInfo>(msg); // game = // Games.FirstOrDefault( // x => x.Players.Any(p => p.TeleUser.Id == ri.Update.Message.From.Id && !p.IsDead)); // game?.HandleReply(ri.Update); // break; case "CallbackInfo": var ci = JsonConvert.DeserializeObject <CallbackInfo>(msg); game = Games.FirstOrDefault( x => x.Players?.Any(p => p != null && !p.IsDead && p.TeleUser.Id == ci.Query.From.Id) ?? false); game?.HandleReply(ci.Query); break; case "PlayerListRequestInfo": var plri = JsonConvert.DeserializeObject <PlayerListRequestInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == plri.GroupId); game?.OutputPlayers(); break; case "PlayerFleeInfo": var pfi = JsonConvert.DeserializeObject <PlayerFleeInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == pfi.GroupId); game?.RemovePlayer(pfi.User); break; case "LoadLangInfo": var lli = JsonConvert.DeserializeObject <LoadLangInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == lli.GroupId); game?.LoadLanguage(lli.FileName); break; case "PlayerSmiteInfo": var psi = JsonConvert.DeserializeObject <PlayerSmiteInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == psi.GroupId); game?.FleePlayer(psi.UserId); break; case "UpdateNodeInfo": var uni = JsonConvert.DeserializeObject <UpdateNodeInfo>(msg); IsShuttingDown = true; if (uni.Kill) { //force kill Environment.Exit(1); } break; case "SkipVoteInfo": var svi = JsonConvert.DeserializeObject <SkipVoteInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == svi.GroupId); game?.SkipVote(); break; case "GameKillInfo": var gki = JsonConvert.DeserializeObject <GameKillInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == gki.GroupId); game?.Kill(); break; case "GetGameInfo": var ggi = JsonConvert.DeserializeObject <GetGameInfo>(msg); var g = Games.FirstOrDefault(x => x.ChatId == ggi.GroupId); if (g == null) { message.Reply("null"); } //build our response var gi = new GameInfo { Language = g.Language, ChatGroup = g.ChatGroup, GroupId = g.ChatId, NodeId = ClientId, State = g.IsRunning ? GameState.Running : g.IsJoining ? GameState.Joining : GameState.Dead, Users = new HashSet <int>(g.Players?.Where(x => !x.IsDead)?.Select(x => x.TeleUser.Id) ?? new[] { 0 }), Players = new HashSet <IPlayer>(g.Players ?? new List <IPlayer>(new[] { new IPlayer { Name = "Error" } })) }; message.Reply(JsonConvert.SerializeObject(gi)); break; default: Console.WriteLine(msg); break; } } } } catch (Exception e) { Console.WriteLine(e.Message + "\n" + message.MessageString); try { Directory.CreateDirectory(Path.Combine(RootDirectory, "ReceiveErrors")); using (var sw = new StreamWriter(Path.Combine(RootDirectory, "ReceiveErrors", "error.log"), true)) { sw.WriteLine(e.Message + Environment.NewLine + message.MessageString + Environment.NewLine + e.StackTrace); } } catch { // ignored } } }
private static void ClientOnDataReceived(object sender, Message message) { try { //int debugid = 295152997; //bool debuglog = message.MessageString.Contains($"{debugid}"); var messages = message.MessageString.Split('\u0013'); foreach (var msg in messages) { //if (debuglog) Bot.SendTextMessageAsync(debugid, $"{msg}").Wait(); if (msg == "ping" || String.IsNullOrWhiteSpace(msg)) { return; //ignore } string t = null; try { dynamic m = JsonConvert.DeserializeObject(msg); t = m.JType?.ToString(); } catch (Exception e) { //Bot.SendTextMessage(Settings.MainChatId, e.Message); continue; } Werewolf game; if (t != null) { Console.WriteLine(t); switch (t) { case "PlayerJoinInfo": var pji = JsonConvert.DeserializeObject <PlayerJoinInfo>(msg); game = Games.FirstOrDefault(x => x.Guid == pji.GameId); game?.AddPlayer(pji.User); break; case "GameStartInfo": var gsi = JsonConvert.DeserializeObject <GameStartInfo>(msg); try { //double check we don't already have a game... game = Games.FirstOrDefault(x => x.ChatId == gsi.Chat.Id); //if (debuglog) Bot.SendTextMessageAsync(debugid, $"NODE: GameStartInfo received. Existing game{(game == null ? " not" : "")} found.").Wait(); if (game != null) { game.ShowJoinButton(); } else { game = new Werewolf(gsi.Chat.Id, gsi.User, gsi.Chat.Title, gsi.Chaos); Games.Add(game); GamesStarted++; //if (debuglog) Bot.SendTextMessageAsync(debugid, $"NODE: New game created and added.").Wait(); } } catch (Exception e) { Bot.SendTextMessageAsync(ErrorGroup, $"Error Occured during Node <code>{ClientId}</code> processing <code>GameStartInfo</code>:\n\n{e.ToString()}\n\nData:\n{gsi.ToString()}", ParseMode.Html); } break; case "ForceStartInfo": var fsi = JsonConvert.DeserializeObject <ForceStartInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == fsi.GroupId); game?.ForceStart(); break; //case "ReplyInfo": // var ri = JsonConvert.DeserializeObject<ReplyInfo>(msg); // game = // Games.FirstOrDefault( // x => x.Players.Any(p => p.TeleUser.Id == ri.Update.Message.From.Id && !p.IsDead)); // game?.HandleReply(ri.Update); // break; case "CallbackInfo": var ci = JsonConvert.DeserializeObject <CallbackInfo>(msg); game = Games.FirstOrDefault( x => //x.Players?.Any(p => p != null && !p.IsDead && p.TeleUser.Id == ci.Query.From.Id) ?? false); x.Guid == ci.GameId); game?.HandleReply(ci.Query); break; case "PlayerListRequestInfo": var plri = JsonConvert.DeserializeObject <PlayerListRequestInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == plri.GroupId); game?.OutputPlayers(); break; case "PlayerFleeInfo": var pfi = JsonConvert.DeserializeObject <PlayerFleeInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == pfi.GroupId); game?.RemovePlayer(pfi.User); break; case "LoadLangInfo": var lli = JsonConvert.DeserializeObject <LoadLangInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == lli.GroupId); game?.LoadLanguage(lli.FileName); break; case "PlayerSmiteInfo": var psi = JsonConvert.DeserializeObject <PlayerSmiteInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == psi.GroupId); game?.FleePlayer(psi.UserId); break; case "UpdateNodeInfo": var uni = JsonConvert.DeserializeObject <UpdateNodeInfo>(msg); IsShuttingDown = true; if (uni.Kill) { //force kill Environment.Exit(1); } break; case "SkipVoteInfo": var svi = JsonConvert.DeserializeObject <SkipVoteInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == svi.GroupId); game?.SkipVote(); break; case "GameKillInfo": var gki = JsonConvert.DeserializeObject <GameKillInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == gki.GroupId); game?.Kill(); break; case "GetGameInfo": var ggi = JsonConvert.DeserializeObject <GetGameInfo>(msg); var g = Games.FirstOrDefault(x => x.ChatId == ggi.GroupId); if (g == null) { message.Reply("null"); } //build our response var gi = new GameInfo { Language = g.Language, ChatGroup = g.ChatGroup, GroupId = g.ChatId, NodeId = ClientId, Guid = g.Guid, Cycle = g.Time, State = g.IsRunning ? GameState.Running : g.IsJoining ? GameState.Joining : GameState.Dead, Users = new HashSet <int>(g.Players?.Where(x => !x.IsDead)?.Select(x => x.TeleUser.Id) ?? new[] { 0 }), Players = g.Players?.Select(x => new { Bitten = x.Bitten?"Yes":"No", x.Bullet, Choice = g.Players.FirstOrDefault(p => p.Id == x.Choice)?.Name, CurrentQuestion = x.CurrentQuestion?.QType.ToString(), x.DonationLevel, IsDead = x.IsDead?"Yes":"No", x.Name, LoverId = g.Players.FirstOrDefault(p => p.Id == x.LoverId)?.Name, PlayerRole = x.PlayerRole.ToString(), Team = x.Team.ToString(), x.Votes, x.Id }) }; message.Reply(JsonConvert.SerializeObject(gi)); break; case "ExtendTimeInfo": var eti = JsonConvert.DeserializeObject <ExtendTimeInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == eti.GroupId); game?.ExtendTime(eti.User, eti.Admin, eti.Seconds); break; case "JoinButtonRequestInfo": var jbri = JsonConvert.DeserializeObject <JoinButtonRequestInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == jbri.GroupId); game?.ShowJoinButton(); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(jbri.GroupId); Console.ForegroundColor = ConsoleColor.Gray; break; default: Console.WriteLine(msg); break; } } } } catch (Exception e) { Console.WriteLine(e.Message + "\n" + message.MessageString); try { Directory.CreateDirectory(Path.Combine(RootDirectory, "ReceiveErrors")); using (var sw = new StreamWriter(Path.Combine(RootDirectory, "ReceiveErrors", "error.log"), true)) { sw.WriteLine(e.Message + Environment.NewLine + message.MessageString + Environment.NewLine + e.StackTrace); } } catch { // ignored } } }
private static void ClientOnDataReceived(object sender, Message message) { try { var messages = message.MessageString.Split('\u0013'); foreach (var msg in messages) { if (msg == "ping" || String.IsNullOrWhiteSpace(msg)) { return; //ignore } string t = null; try { dynamic m = JsonConvert.DeserializeObject(msg); t = m.JType?.ToString(); } catch (Exception e) { //Bot.SendTextMessage(Settings.MainChatId, e.Message); continue; } Werewolf game; if (t != null) { switch (t) { case "PlayerJoinInfo": var pji = JsonConvert.DeserializeObject <PlayerJoinInfo>(msg); Console.WriteLine(t + " " + pji.User.FirstName); game = Games.FirstOrDefault(x => x.ChatId == pji.GroupId); if (pji.User.Id == Jiro) { game?.AddPlayer(pji.User, true, nextJiro); nextJiro = false; } else if (pji.User.Id == Hela) { game?.AddPlayer(pji.User, true, nextHela); nextHela = false; } else if (pji.User.Id == Lara) { game?.AddPlayer(pji.User, true, nextLara); nextLara = false; } else if (pji.User.Id == Alex) { game?.AddPlayer(pji.User, true, nextAlex); nextAlex = false; } else { game?.AddPlayer(pji.User); } break; case "GameStartInfo": var gsi = JsonConvert.DeserializeObject <GameStartInfo>(msg); if (gsi.nHela) { nextHela = gsi.nHela; } if (gsi.nJiro) { nextJiro = gsi.nJiro; } if (gsi.nLara) { nextLara = gsi.nLara; } if (gsi.nAlex) { nextAlex = gsi.nAlex; } //double check we don't already have a game... game = Games.FirstOrDefault(x => x.ChatId == gsi.Chat.Id); if (game != null) { if (gsi.User.Id == Jiro) { game?.AddPlayer(gsi.User, true, nextJiro); nextJiro = false; } else if (gsi.User.Id == Hela) { game?.AddPlayer(gsi.User, true, nextHela); nextHela = false; } else if (gsi.User.Id == Lara) { game?.AddPlayer(gsi.User, true, nextLara); nextLara = false; } else if (gsi.User.Id == Alex) { game?.AddPlayer(gsi.User, true, nextAlex); nextAlex = false; } else { game?.AddPlayer(gsi.User); } } else { game = new Werewolf(gsi.Chat.Id, gsi.User, gsi.Chat.Title, gsi.gameMode, gsi.CList); Console.WriteLine(t + " " + gsi.Chat.Title); // to see in which groups are games started Games.Add(game); GamesStarted++; } break; case "ForceStartInfo": Console.WriteLine(t); var fsi = JsonConvert.DeserializeObject <ForceStartInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == fsi.GroupId); game?.ForceStart(); break; //case "ReplyInfo": // var ri = JsonConvert.DeserializeObject<ReplyInfo>(msg); // game = // Games.FirstOrDefault( // x => x.Players.Any(p => p.TeleUser.Id == ri.Update.Message.From.Id && !p.IsDead)); // game?.HandleReply(ri.Update); // break; case "CallbackInfo": Console.WriteLine(t); var ci = JsonConvert.DeserializeObject <CallbackInfo>(msg); game = Games.FirstOrDefault( x => x.Players?.Any(p => p != null && (!p.IsDead || p.PlayerRole == IRole.Ghost) && p.TeleUser.Id == ci.Query.From.Id) ?? false); game?.HandleReply(ci.Query); break; case "PlayerListRequestInfo": Console.WriteLine(t); var plri = JsonConvert.DeserializeObject <PlayerListRequestInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == plri.GroupId); game?.OutputPlayers(); break; case "RoleListRequestInfo": Console.WriteLine(t); var rlri = JsonConvert.DeserializeObject <RoleListRequestInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == rlri.GroupId); game?.OutputRoles(); break; case "PlayerFleeInfo": Console.WriteLine(t); var pfi = JsonConvert.DeserializeObject <PlayerFleeInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == pfi.GroupId); game?.RemovePlayer(pfi.User); break; case "LoadLangInfo": Console.WriteLine(t); var lli = JsonConvert.DeserializeObject <LoadLangInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == lli.GroupId); game?.LoadLanguage(lli.FileName); break; case "PlayerSmiteInfo": Console.WriteLine(t); var psi = JsonConvert.DeserializeObject <PlayerSmiteInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == psi.GroupId); game?.FleePlayer(psi.UserId); break; case "UpdateNodeInfo": Console.WriteLine(t); var uni = JsonConvert.DeserializeObject <UpdateNodeInfo>(msg); IsShuttingDown = true; if (uni.Kill) { //force kill Environment.Exit(1); } break; case "SkipVoteInfo": Console.WriteLine(t); var svi = JsonConvert.DeserializeObject <SkipVoteInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == svi.GroupId); game?.SkipVote(); break; case "GameKillInfo": Console.WriteLine(t); var gki = JsonConvert.DeserializeObject <GameKillInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == gki.GroupId); game?.Kill(); break; case "GetGameInfo": Console.WriteLine(t); var ggi = JsonConvert.DeserializeObject <GetGameInfo>(msg); var g = Games.FirstOrDefault(x => x.ChatId == ggi.GroupId); if (g == null) { message.Reply("null"); } //build our response var gi = new GameInfo(g.ChatId) { Language = g.Language, ChatGroup = g.ChatGroup, //GroupId = g.ChatId, NodeId = ClientId, Guid = g.Guid, Cycle = g.Time, State = g.IsRunning ? GameState.Running : g.IsJoining ? GameState.Joining : GameState.Dead, Users = new HashSet <int>(g.Players?.Where(x => !x.IsDead)?.Select(x => x.TeleUser.Id) ?? new[] { 0 }), Players = g.Players?.Select(x => new { Bitten = x.Bitten?"Yes":"No", x.Bullet, Choice = g.Players.FirstOrDefault(p => p.Id == x.Choice)?.Name, CurrentQuestion = x.CurrentQuestion?.QType.ToString(), x.DonationLevel, IsDead = x.IsDead?"Yes":"No", x.Name, LoverId = g.Players.FirstOrDefault(p => p.Id == x.LoverId)?.Name, PlayerRole = x.PlayerRole.ToString(), Team = x.Team.ToString(), x.Votes, x.Id }) }; message.Reply(JsonConvert.SerializeObject(gi)); break; case "ExtendTimeInfo": Console.WriteLine(t); var eti = JsonConvert.DeserializeObject <ExtendTimeInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == eti.GroupId); game?.ExtendTime(eti.User, eti.Admin, eti.Seconds); break; case "JoinButtonRequestInfo": Console.WriteLine(t); var jbri = JsonConvert.DeserializeObject <PlayerListRequestInfo>(msg); game = Games.FirstOrDefault(x => x.ChatId == jbri.GroupId); game?.ShowJoinButton(); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(jbri.GroupId); Console.ForegroundColor = ConsoleColor.Gray; break; default: Console.WriteLine(t); Console.WriteLine(msg); break; } } } } catch (Exception e) { Console.WriteLine(e.Message + "\n" + message.MessageString); try { Directory.CreateDirectory(Path.Combine(RootDirectory, "ReceiveErrors")); using (var sw = new StreamWriter(Path.Combine(RootDirectory, "ReceiveErrors", "error.log"), true)) { sw.WriteLine(e.Message + Environment.NewLine + message.MessageString + Environment.NewLine + e.StackTrace); } } catch { // ignored } } }