Beispiel #1
0
        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();
        }
Beispiel #2
0
        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();
        }
Beispiel #3
0
 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;
 }
Beispiel #4
0
        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);
        }
Beispiel #5
0
 /// <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;
 }
Beispiel #6
0
        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();
        }
Beispiel #7
0
        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");
        }
Beispiel #8
0
        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);
            }
        }
Beispiel #9
0
 public void CheckBotStatus()
 {
     Xmpp.RequestAgents();
 }
Beispiel #10
0
        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();
            }
        }
Beispiel #11
0
        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();
            }
        }
Beispiel #12
0
 /// <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();
 }