Beispiel #1
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 #2
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 #3
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 #4
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 #5
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();
            }
        }