Esempio n. 1
0
 public ForwardPlayer(BaseShard Shard, SerializationContext Context)
 {
     _client = new RtmpClient(new Uri("rtmps://" + Shard.URL + ":2099"), Context, ObjectEncoding.Amf3);
     //_client.MessageReceived += Client_MessageReceived;
     //_client.CallbackException += Client_CallbackException;
     Connect();
 }
Esempio n. 2
0
        public async Task <bool> Connect(User User, BaseShard Shard)
        {
            await _client.ConnectAsync();

            string password = DPAPI.Decrypt(User.Password);

            AuthenticationCredentials auth = new AuthenticationCredentials
            {
                Username      = User.Username,
                Password      = password,
                ClientVersion = PoroServer.ClientVersion,
                IpAddress     = "209.133.52.232",
                Locale        = Shard.Locale,
                Domain        = "lolclient.lol.riotgames.com",
                AuthToken     = GetAuthKey(User.Username, password, Shard.LoginQueue)
            };

            Session login = await Login(_client, auth);

            _accountId = login.Summary.AccountId;

            await _client.SubscribeAsync("my-rtmps", "messagingDestination", "bc", "bc-" + login.Summary.AccountId.ToString());

            await _client.SubscribeAsync("my-rtmps", "messagingDestination", "gn-" + login.Summary.AccountId.ToString(), "gn-" + login.Summary.AccountId.ToString());

            await _client.SubscribeAsync("my-rtmps", "messagingDestination", "cn-" + login.Summary.AccountId.ToString(), "cn-" + login.Summary.AccountId.ToString());

            bool LoggedIn = await _client.LoginAsync(User.Username.ToLower(), login.Token);

            //TODO: Find easier way of getting summoner name and id without having to download a huge packet
            LoginDataPacket dataPacket = await GetLoginPacket(_client);

            _summonerId   = dataPacket.AllSummonerData.Summoner.SumId;
            _summonerName = dataPacket.AllSummonerData.Summoner.Name;

            return(LoggedIn);
        }
Esempio n. 3
0
        public async Task <object> HandleAPI(HttpListenerRequest request)
        {
            if (request.RawUrl.StartsWith("/api/users"))
            {
                return(JsonConvert.SerializeObject(_users.GetUserList()));
            }
            else if (request.RawUrl.StartsWith("/api/register"))
            {
                if (request.QueryString == null && request.QueryString.Count != 4)
                {
                    return("400");
                }

                _users.AddUser(new User
                {
                    Username     = request.QueryString["Username"],
                    Password     = request.QueryString["Password"],
                    Region       = request.QueryString["Region"],
                    SummonerName = request.QueryString["Username"]
                });
                return(JsonConvert.SerializeObject(_users.GetUserList()));
            }
            else if (request.RawUrl.StartsWith("/api/delete"))
            {
                if (request.QueryString == null && request.QueryString.Count != 2)
                {
                    return("400");
                }

                User u = _users.GetUser(request.QueryString["Username"], request.QueryString["Region"]);
                _users.RemoveUser(u);

                return(JsonConvert.SerializeObject(_users.GetUserList()));
            }
            else if (request.RawUrl.StartsWith("/api/regions"))
            {
                return(JsonConvert.SerializeObject(Shards.GetStatus()));
            }
            else if (request.RawUrl.StartsWith("/api/login"))
            {
                if (request.QueryString == null && request.QueryString.Count != 2)
                {
                    return("400");
                }

                string Username = request.QueryString["Username"];
                string Region   = request.QueryString["Region"];

                var       ShardList = Shards.GetInstances <BaseShard>();
                BaseShard shard     = null;
                foreach (BaseShard s in ShardList)
                {
                    if (s.Name == Region)
                    {
                        shard = s;
                    }
                }

                User          user      = _users.GetUser(Username, Region);
                ForwardPlayer player    = new ForwardPlayer(user, shard, _context);
                bool          Connected = await player.Connect(user, shard);

                _forwarder.Assign(player);

                Console.WriteLine(string.Format("[LOG] Forwarding to {0} ({1})", Username, Region));

                return(JsonConvert.SerializeObject("OK"));
            }
            else
            {
                return("404");
            }
        }
Esempio n. 4
0
        public async Task <object> HandleAPI(HttpListenerRequest request)
        {
            if (request.RawUrl.StartsWith("/api/users"))
            {
                return(JsonConvert.SerializeObject(_users.GetUserList()));
            }
            else if (request.RawUrl.StartsWith("/api/register"))
            {
                if (request.QueryString == null && request.QueryString.Count != 4)
                {
                    return("400");
                }

                _users.AddUser(new User
                {
                    Username     = request.QueryString["Username"],
                    Password     = request.QueryString["Password"],
                    Region       = request.QueryString["Region"],
                    SummonerName = request.QueryString["Username"]
                });
                return(JsonConvert.SerializeObject(_users.GetUserList()));
            }
            else if (request.RawUrl.StartsWith("/api/delete"))
            {
                if (request.QueryString == null && request.QueryString.Count != 2)
                {
                    return("400");
                }

                User u = _users.GetUser(request.QueryString["Username"], request.QueryString["Region"]);
                _users.RemoveUser(u);

                return(JsonConvert.SerializeObject(_users.GetUserList()));
            }
            else if (request.RawUrl.StartsWith("/api/regions"))
            {
                return(JsonConvert.SerializeObject(Shards.GetStatus()));
            }
            else if (request.RawUrl.StartsWith("/api/login"))
            {
                if (request.QueryString == null && request.QueryString.Count != 2)
                {
                    return("400");
                }

                string Username = request.QueryString["Username"];
                string Region   = request.QueryString["Region"];

                var       ShardList = Shards.GetInstances <BaseShard>();
                BaseShard shard     = null;
                foreach (BaseShard s in ShardList)
                {
                    if (s.Name == Region)
                    {
                        shard = s;
                    }
                }

                User          user      = _users.GetUser(Username, Region);
                ForwardPlayer player    = new ForwardPlayer(user, shard, _context);
                bool          Connected = await player.Connect();

                foreach (RtmpClient client in _server.Clients)
                {
                    StoreAccountBalanceNotification notification = new StoreAccountBalanceNotification
                    {
                        IP = player._packet.IpBalance,
                        RP = player._packet.RpBalance
                    };

                    client.InvokeDestReceive("cn-1", "cn-1", "messagingDestination", notification);
                }

                _forwarder.Assign(player);

                Console.WriteLine(string.Format("[LOG] Forwarding to {0} ({1})", Username, Region));

                return(JsonConvert.SerializeObject("OK"));
            }
            else if (request.RawUrl.StartsWith("/api/check"))
            {
                if (_forwarder.Forwarding)
                {
                    return(JsonConvert.SerializeObject(_forwarder._client._user));
                }
                else
                {
                    return(JsonConvert.SerializeObject("Not logged in"));
                }
            }
            else
            {
                return("404");
            }
        }