Пример #1
0
        private async void GetInGameData(Friend friend)
        {
            long            summonerId = ChatUtils.GetSummonerId(friend.User);
            CurrentGameInfo game       = null;

            while (friend.Status?.GameStatus == GameStatus.inGame)
            {
                try {
                    game = await Session.RiotAPI.CurrentGameAPI.BySummoner(summonerId);
                } catch {
                    // ignored
                }

                if (game?.gameMode != null)
                {
                    friend.OnGame(game);
                    OnStatus(friend);
                }

                if (game != null && game.gameStartTime > 0)
                {
                    break;
                }

                await Task.Delay(20 * 1000);
            }
        }
Пример #2
0
        private void Xmpp_OnPresence(object sender, Presence pres)
        {
            var    user = pres.From.User;
            Friend friend;

            //Wack to fix chatroom presences
            if (pres.Status == null && pres.MucUser != null && ChatUtils.GetSummonerId(pres.MucUser.Item.Jid.User) == session.Me.SummonerId)
            {
                SendPresence();
            }
            else if (friends.TryGetValue(user, out friend))
            {
                friend.OnPresence(pres);
                OnStatus(friend);

                if (friend.Status?.GameStatus == GameStatus.inGame)
                {
                    GetInGameData(friend);
                }

                if (!fetchedHistories.Contains(user))
                {
                    fetchedHistories.Add(user);
                    var iq = new IQ(IqType.get, xmpp.MyJID, null)
                    {
                        Id = "arch_" + Guid.NewGuid()
                    };
                    var query = new Element("query")
                    {
                        Namespace = "jabber:iq:riotgames:archive"
                    };
                    query.AddChild(new Element("with", pres.From.Bare));
                    iq.AddChild(query);

                    xmpp.IqGrabber.SendIq(iq, async(s, result, d) => {
                        await Task.Delay(5000);
                        //TODO Fix this disgusting hack
                        var history = result.SelectElements <Message>();
                        foreach (var msg in history.OrderBy(m => DateTime.Parse(m.GetAttribute("stamp"))))
                        {
                            OnMessage(new ChatMessage(friend.User, msg, true));
                        }
                    });
                }
            }
            else
            {
                PresenceRaw?.Invoke(this, pres);
            }
        }