public async Task <object> Subscribe(string service, double accountId) { TypedObject body = WrapBody(new TypedObject(), "messagingDestination", 0); body.type = "flex.messaging.messages.CommandMessage"; TypedObject headers = body.GetTO("headers"); if (service == "bc") { headers.Add("DSSubtopic", "bc"); } else { headers.Add("DSSubtopic", service + "-" + accountID); } headers.Remove("DSRequestTimeout"); body["clientId"] = service + "-" + accountID; int Id = Invoke(body); while (!results.ContainsKey(Id)) { await Task.Delay(10); } TypedObject result = GetResult(Id); // Read result and discard return(null); }
private bool Login() { TypedObject result, body; // Login 1 body = new TypedObject("com.riotgames.platform.login.AuthenticationCredentials"); body.Add("password", password); body.Add("clientVersion", clientVersion); body.Add("ipAddress", ipAddress); body.Add("securityAnswer", null); body.Add("locale", locale); body.Add("domain", "lolclient.lol.riotgames.com"); body.Add("oldPassword", null); body.Add("authToken", authToken); if (useGarena) { body.Add("partnerCredentials", "8393 " + garenaToken); body.Add("username", userID); } else { body.Add("partnerCredentials", null); body.Add("username", user); } int id = Invoke("loginService", "login", new object[] { body }); result = GetResult(id); if (result["result"].Equals("_error")) { Error(GetErrorMessage(result), ErrorType.Login); Disconnect(); return false; } body = result.GetTO("data").GetTO("body"); sessionToken = body.GetString("token"); accountID = (int)body.GetTO("accountSummary").GetInt("accountId"); // Login 2 if (useGarena) body = WrapBody(Convert.ToBase64String(Encoding.UTF8.GetBytes(userID + ":" + sessionToken)), "auth", 8); else body = WrapBody(Convert.ToBase64String(Encoding.UTF8.GetBytes(user.ToLower() + ":" + sessionToken)), "auth", 8); body.type = "flex.messaging.messages.CommandMessage"; id = Invoke(body); result = GetResult(id); // Read result (and discard) isLoggedIn = true; if (OnLogin != null) OnLogin(this, user, ipAddress); return true; }
private bool SendConnect() { Dictionary <string, object> paramaters = new Dictionary <string, object>(); paramaters.Add("app", ""); paramaters.Add("flashVer", "WIN 10,6,602,161"); paramaters.Add("swfUrl", "app:/LolClient.swf/[[DYNAMIC]]/32"); paramaters.Add("tcUrl", "rtmps://" + server + ":" + 2099); paramaters.Add("fpad", false); paramaters.Add("capabilities", 239); paramaters.Add("audioCodecs", 3575); paramaters.Add("videoCodecs", 252); paramaters.Add("videoFunction", 1); paramaters.Add("pageUrl", null); paramaters.Add("objectEncoding", 3); RTMPSEncoder encoder = new RTMPSEncoder(); byte[] connect = encoder.EncodeConnect(paramaters); sslStream.Write(connect, 0, connect.Length); while (!results.ContainsKey(1)) { Thread.Sleep(10); } TypedObject result = results[1]; results.Remove(1); if (result["result"].Equals("_error")) { Error(GetErrorMessage(result), ErrorType.Connect); Disconnect(); return(false); } DSId = result.GetTO("data").GetString("id"); isConnected = true; if (OnConnect != null) { OnConnect(this, EventArgs.Empty); } return(true); }
public async Task <object> Subscribe(SubsciptionService service, double accountId) { TypedObject body = WrapBody(new TypedObject(), "messagingDestination", 0); body.type = "flex.messaging.messages.CommandMessage"; TypedObject headers = body.GetTO("headers"); switch (service) { case SubsciptionService.GameService: headers.Add("DSSubtopic", "gn-" + accountID); body["clientId"] = "gn-" + accountID; break; case SubsciptionService.ClientService: headers.Add("DSSubtopic", "cn-" + accountID); body["clientId"] = "cn-" + accountID; break; case SubsciptionService.BroadcastService: headers.Add("DSSubtopic", "bc"); body["clientId"] = "bc-" + accountID; break; } headers.Remove("DSRequestTimeout"); int Id = Invoke(body); while (!results.ContainsKey(Id)) { await Task.Delay(10); } TypedObject result = GetResult(Id); // Read result and discard return(null); }
private void WriteObject(List <byte> ret, TypedObject val) { if (val.type == null || val.type.Equals("")) { ret.Add((byte)0x0B); // Dynamic class ret.Add((byte)0x01); // No class name foreach (string key in val.Keys) { WriteString(ret, key); Encode(ret, val[key]); } ret.Add((byte)0x01); // End of dynamic } else if (val.type.Equals("flex.messaging.io.ArrayCollection")) { ret.Add((byte)0x07); // Externalizable WriteString(ret, val.type); Encode(ret, val["array"]); } else if (val.type.Equals("DSK")) { WriteInt(ret, (val.Count << 4) | 3); // Inline + member count WriteString(ret, val.type); byte[] flag1 = new byte[8]; byte[] flag2 = new byte[8]; if (val["body"] != null) { flag1[0] = 1; } if (val["clientId"] != null) { flag1[1] = 1; } if (val["destination"] != null) { flag1[2] = 1; } if (val["headers"] != null) { flag1[3] = 1; } if (val["messageId"] != null && val["clientId"] != null) { flag1[4] = 1; } if (val["timestamp"] != null && val["destination"] != null) { flag1[5] = 1; } if (val["timeToLive"] != null && val["headers"] != null) { flag1[6] = 1; } if (val["clientIdBytes"] != null) { flag2[0] = 1; } if (val["messageIdBytes"] != null) { flag2[1] = 1; } WriteObject(ret, val.GetTO("data")); } else { WriteInt(ret, (val.Count << 4) | 3); // Inline + member count WriteString(ret, val.type); List <String> keyOrder = new List <String>(); foreach (string key in val.Keys) { WriteString(ret, key); keyOrder.Add(key); } foreach (string key in keyOrder) { Encode(ret, val[key]); } } }
private string GetErrorCode(TypedObject message) { return(message.GetTO("data").GetTO("rootCause").GetString("errorCode")); }
private string GetErrorMessage(TypedObject message) { // Works for clientVersion return(message.GetTO("data").GetTO("rootCause").GetString("message")); }
private string GetErrorMessage(TypedObject message) { // Works for clientVersion var msg = message.GetTO("data").GetTO("rootCause").GetString("message"); return msg ?? "Password Change Failure"; }