public void SendGameReady(HostedGameData game) { var m = new Message(game.Username + "@of.octgn.net", MessageType.normal, "", "gameready"); m.GenerateId(); m.AddChild(game); Xmpp.Send(m); }
public static void RefreshLists() { Trace.WriteLine("[Bot]RefreshList"); var arr = _userList.ToArray(); if (arr == null) { Trace.WriteLine("[Bot]arr=null"); } foreach (var u in arr) { if (u.Bare == null) { continue; } if (Xmpp.MyJID == null) { Trace.WriteLine("[Bot]Xmpp.MyJid == null"); continue; } if (Xmpp.MyJID.Bare == null) { Trace.WriteLine("[Bot]Xmpp.MyJid.Bare == null"); continue; } if (u.Bare == Xmpp.MyJID.Bare) { continue; } if (u.Resource.ToLower() != "agsxmpp") { continue; } var m = new Message(u.Bare, MessageType.normal, "", "refresh"); Xmpp.Send(m); } Trace.WriteLine("[Bot]RefreshListEnd"); }
private void XmppOnOnMessage(object sender, Message msg) { try { switch (msg.Type) { case MessageType.normal: if (msg.Subject == "hostgame") { if (msg.HasChildElements == false) { // F it, someone screwed up this year. return; } if (msg.ChildNodes.OfType <HostGameRequest>().Any() == false) { // Again, what the fuuuuu return; } var req = msg.ChildNodes.OfType <HostGameRequest>().First(); Log.InfoFormat("Host game from {0}", msg.From); while (SasUpdater.Instance.IsUpdating) { Thread.Sleep(100); } var id = GameManager.Instance.HostGame(req, new User(msg.From)); if (id != Guid.Empty) { userRequests.Add("hostrequest_" + id, id, DateTimeOffset.UtcNow.AddSeconds(30)); } } else if (msg.Subject == "gamelist") { // If someone tried to refresh their game list too soon, f them if (userRequests.Contains("refreshrequest_" + msg.From.User.ToLower())) { return; } // Mark the user as already requested a list for the next 15 seconds userRequests.Add("refreshrequest_" + msg.From.User.ToLower(), 1, DateTimeOffset.UtcNow.AddSeconds(15)); var list = GameManager.Instance.Games; var m = new Message(msg.From, MessageType.normal, "", "gamelist"); m.GenerateId(); foreach (var a in list) { m.AddChild(a); } Xmpp.Send(m); } else if (msg.Subject == "killgame") { var items = msg.Body.Split(new[] { "#:999:#" }, StringSplitOptions.RemoveEmptyEntries); if (items.Length != 2) { return; } var client = new ApiClient(); var res = client.Login(msg.From.User, items[1]); if (res == LoginResult.Ok) { var id = Guid.Parse(items[0]); GameManager.Instance.KillGame(id); } throw new Exception("Error verifying user " + res); } break; case MessageType.error: break; case MessageType.chat: if (!msg.From.User.Equals("d0c", StringComparison.InvariantCultureIgnoreCase)) { return; } // Keep this around in case we want to add commands at some point, we'll have an idea on how to write the code //if (msg.Body.Equals("pause")) //{ // _isPaused = true; // Log.Warn(":::::: PAUSED ::::::"); // var m = new Message(msg.From, MessageType.chat, "Paused"); // m.GenerateId(); // Xmpp.Send(m); //} break; } } catch (Exception e) { Log.Error("[Bot]XmppOnOnMessage Error", e); } }
private static void XmppOnOnMessage(object sender, Message msg) { switch (msg.Type) { case MessageType.normal: if (msg.Subject == "hostgame") { if (isPaused) { messageQueue.Enqueue(msg); return; } var data = msg.Body.Split(new string[1] { ",:," }, StringSplitOptions.None); if (data.Length != 5) { return; } var guid = Guid.Empty; Version ver = null; if (String.IsNullOrWhiteSpace(data[2])) { return; } var gameName = data[2]; var password = data[3]; var gameActualName = data[4]; if (Guid.TryParse(data[0], out guid) && Version.TryParse(data[1], out ver)) { var port = Gaming.HostGame(guid, ver, gameName, password, new Lobby.User(msg.From), gameActualName); if (port == -1) { return; } var m = new Message(msg.From, msg.To, MessageType.normal, port.ToString(), "gameready"); m.GenerateId(); Xmpp.Send(m); } } else if (msg.Subject == "gamelist") { if (isPaused) { messageQueue.Enqueue(msg); return; } var list = Gaming.GetLobbyList().Where(x => x.GameStatus == EHostedGame.StartedHosting); var m = new Message(msg.From, MessageType.normal, "", "gamelist"); m.GenerateId(); foreach (var a in list) { m.AddChild(a); } Xmpp.Send(m); } else if (msg.Subject == "gamestarted") { if (isPaused) { messageQueue.Enqueue(msg); return; } int port = -1; if (Int32.TryParse(msg.Body, out port)) { Gaming.StartGame(port); } } break; case MessageType.error: break; case MessageType.chat: if (!msg.From.User.Equals("d0c", StringComparison.InvariantCultureIgnoreCase)) { return; } if (msg.Body.Equals("pause")) { isPaused = true; Console.WriteLine(":::::: PAUSED ::::::"); var m = new Message(msg.From, MessageType.chat, "Paused"); m.GenerateId(); Xmpp.Send(m); } else if (msg.Body.Equals("unpause")) { isPaused = false; Console.WriteLine("Unpausing..."); var m = new Message(msg.From, MessageType.chat, "Unpausing"); m.GenerateId(); Xmpp.Send(m); while (messageQueue.Count > 0) { XmppOnOnMessage(null, messageQueue.Dequeue()); } Console.WriteLine(":::::: UNPAUSED ::::::"); var m2 = new Message(msg.From, MessageType.chat, "UnPaused"); m2.GenerateId(); Xmpp.Send(m2); } break; case MessageType.groupchat: break; case MessageType.headline: break; default: throw new ArgumentOutOfRangeException(); } }
private static void XmppOnOnMessage(object sender, Message msg) { switch (msg.Type) { case MessageType.normal: if (msg.Subject == "hostgame") { var data = msg.Body.Split(new string[1] { ",:," }, StringSplitOptions.RemoveEmptyEntries); if (data.Length != 3) { return; } var guid = Guid.Empty; Version ver = null; if (String.IsNullOrWhiteSpace(data[2])) { return; } var gameName = data[2]; if (Guid.TryParse(data[0], out guid) && Version.TryParse(data[1], out ver)) { var port = Gaming.HostGame(guid, ver, gameName, "", new Lobby.User(msg.From)); if (port == -1) { return; } var m = new Message(msg.From, msg.To, MessageType.normal, port.ToString(), "gameready"); m.GenerateId(); Xmpp.Send(m); var gameMessage = String.Format(" {0} is hosting a game called '{1}'", msg.From.User, gameName); m = new Message(new Jid("lobby@conference." + ServerPath), msg.To, MessageType.groupchat, gameMessage); //Xmpp.Send(m); //RefreshLists(); } } else if (msg.Subject == "gamelist") { //Trace.WriteLine("[Bot]Request GameList: " + msg.From.User); var list = Gaming.GetLobbyList().Where(x => x.GameStatus == EHostedGame.StartedHosting); var m = new Message(msg.From, MessageType.normal, "", "gamelist"); m.GenerateId(); foreach (var a in list) { m.AddChild(a); } Xmpp.Send(m); } else if (msg.Subject == "gamestarted") { int port = -1; if (Int32.TryParse(msg.Body, out port)) { Gaming.StartGame(port); } //RefreshLists(); } break; case MessageType.error: break; case MessageType.chat: break; case MessageType.groupchat: break; case MessageType.headline: break; default: throw new ArgumentOutOfRangeException(); } }