public static void RemakeXmpp() { if (Xmpp != null) { Xmpp.OnXmppConnectionStateChanged -= XmppOnOnXmppConnectionStateChanged; Xmpp.Close(); Xmpp = null; } Xmpp = new XmppClientConnection(ServerPath); Xmpp.RegisterAccount = false; Xmpp.AutoAgents = true; Xmpp.AutoPresence = true; Xmpp.AutoRoster = true; Xmpp.Username = XmppUsername; Xmpp.Password = XmppPassword; Xmpp.Priority = 1; Xmpp.OnMessage += XmppOnOnMessage; Xmpp.OnError += XmppOnOnError; Xmpp.OnAuthError += new XmppElementHandler(Xmpp_OnAuthError); Xmpp.OnStreamError += XmppOnOnStreamError; Xmpp.KeepAlive = true; Xmpp.KeepAliveInterval = 60; Xmpp.OnAgentStart += XmppOnOnAgentStart; Xmpp.OnXmppConnectionStateChanged += XmppOnOnXmppConnectionStateChanged; Xmpp.Open(); }
public void RemakeXmpp() { if (Xmpp != null) { Xmpp.OnXmppConnectionStateChanged -= XmppOnOnXmppConnectionStateChanged; Xmpp.OnMessage -= XmppOnOnMessage; Xmpp.OnError -= XmppOnOnError; Xmpp.OnAuthError -= Xmpp_OnAuthError; Xmpp.OnStreamError -= XmppOnOnStreamError; Xmpp.OnAgentStart -= XmppOnOnAgentStart; Xmpp.Close(); Xmpp = null; } Xmpp = new XmppClientConnection(AppConfig.Instance.ServerPath); ElementFactory.AddElementType("hostgamerequest", "octgn:hostgamerequest", typeof(HostGameRequest)); Xmpp.RegisterAccount = false; Xmpp.AutoAgents = true; Xmpp.AutoPresence = true; Xmpp.AutoRoster = true; Xmpp.Username = AppConfig.Instance.XmppUsername; Xmpp.Password = AppConfig.Instance.XmppPassword; Xmpp.Priority = 1; Xmpp.OnMessage += XmppOnOnMessage; Xmpp.OnError += XmppOnOnError; Xmpp.OnAuthError += Xmpp_OnAuthError; Xmpp.OnStreamError += XmppOnOnStreamError; Xmpp.KeepAlive = true; Xmpp.KeepAliveInterval = 60; Xmpp.OnAgentStart += XmppOnOnAgentStart; Xmpp.OnXmppConnectionStateChanged += XmppOnOnXmppConnectionStateChanged; Xmpp.Open(); }
public Main() { InitializeComponent(); //CompressionRegistry.AddCompression(Assembly.LoadFile(Path.Combine(Application.StartupPath, "ubiety.compression.sharpziplib.dll"))); _xmpp = new Xmpp(); _xmpp.OnError += _xmpp_OnError; slVersion.Text = Resources.Version_Label + Xmpp.Version; }
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); }
/// <summary> /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// </summary> public void Dispose() { if (Xmpp != null) { Xmpp.OnMessage -= XmppOnOnMessage; Xmpp.OnError -= XmppOnOnError; Xmpp.OnAuthError -= Xmpp_OnAuthError; Xmpp.OnStreamError -= XmppOnOnStreamError; Xmpp.OnAgentStart -= XmppOnOnAgentStart; Xmpp.OnXmppConnectionStateChanged -= XmppOnOnXmppConnectionStateChanged; try { Xmpp.Close(); } catch { } } userRequests.Dispose(); refreshGamesTimer.Elapsed -= RefreshGamesTimerOnElapsed; }
public static void RemakeXmpp() { if (Xmpp != null) { Xmpp.OnXmppConnectionStateChanged -= XmppOnOnXmppConnectionStateChanged; Xmpp.Close(); Xmpp = null; } Xmpp = new XmppClientConnection(ServerPath); //#else // Xmpp = new XmppClientConnection(); // Xmpp.ConnectServer = "127.0.0.1"; // Xmpp.AutoResolveConnectServer = false; //#endif Xmpp.RegisterAccount = false; Xmpp.AutoAgents = true; Xmpp.AutoPresence = true; Xmpp.AutoRoster = true; Xmpp.Username = XmppUsername; Xmpp.Password = XmppPassword;//Don't commit real password Xmpp.Priority = 1; Xmpp.OnLogin += XmppOnOnLogin; Xmpp.OnMessage += XmppOnOnMessage; Xmpp.OnIq += XmppOnOnIq; Xmpp.OnError += XmppOnOnError; Xmpp.OnAuthError += new XmppElementHandler(Xmpp_OnAuthError); Xmpp.OnReadXml += XmppOnOnReadXml; Xmpp.OnPresence += XmppOnOnPresence; Xmpp.OnWriteXml += XmppOnOnWriteXml; Xmpp.OnStreamError += XmppOnOnStreamError; Xmpp.KeepAlive = true; Xmpp.KeepAliveInterval = 60; Xmpp.OnAgentStart += XmppOnOnAgentStart; Xmpp.OnXmppConnectionStateChanged += XmppOnOnXmppConnectionStateChanged; _userList = new ThreadSafeList <Jid>(); Xmpp.Open(); }
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); } }
public void CheckBotStatus() { Xmpp.RequestAgents(); }
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(); } }
/// <summary> /// Initializes a new instance of the XmppClient class. /// </summary> /// <param name="hostname">The hostname of the XMPP server to connect to.</param> /// <param name="port">The port number of the XMPP service of the server.</param> /// <param name="tls">If true the session will be TLS/SSL-encrypted if the server /// supports TLS/SSL-encryption.</param> /// <param name="validate">A delegate used for verifying the remote Secure Sockets /// Layer (SSL) certificate which is used for authentication. Can be null if not /// needed.</param> /// <exception cref="ArgumentNullException">The hostname parameter is /// null.</exception> /// <exception cref="ArgumentException">The hostname parameter is the empty /// string.</exception> /// <exception cref="ArgumentOutOfRangeException">The value of the port parameter /// is not a valid port number.</exception> /// <remarks>Use this constructor if you wish to register an XMPP account using /// the in-band account registration process supported by some servers.</remarks> public XmppClient(string hostname, int port = 5222, Xmpp.Core.TLSMode tls = Core.TLSMode.StartTLS, RemoteCertificateValidationCallback validate = null) { im = new XmppIm(hostname, port, tls, validate); LoadExtensions(); }