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(); }
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); }
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"); } }
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"); } }