public TypedObject DecodeInvoke(byte[] data) { Reset(); dataBuffer = data; dataPos = 0; TypedObject result = new TypedObject("Invoke"); if (dataBuffer[0] == 0x00) { dataPos++; result.Add("version", 0x00); } result.Add("result", DecodeAMF0()); result.Add("invokeId", DecodeAMF0()); result.Add("serviceCall", DecodeAMF0()); result.Add("data", DecodeAMF0()); if (dataPos != dataBuffer.Length) throw new Exception("Did not consume entire buffer: " + dataPos + " of " + dataBuffer.Length); string[] typeNames = new string[classDefinitions.Count]; for (int i = 0; i < classDefinitions.Count; i++) { typeNames[i] = classDefinitions[i].type; } return result; }
public void Alter() { //var dict2 = new Dictionary<string, object>(); //var x = dict2["abc"]; var testObj = new TypedObject(); var dict = new PropertyDictionaryAdapter(testObj); dict.Options.CanAlterProperties = false; Assert.Throws<InvalidOperationException>(() => { dict["newprop"] = "newdata"; }, "Can't add a prop"); Assert.Throws<InvalidOperationException>(() => { dict.Remove("Stringprop"); }, "Can't add a prop"); // These are OK to do dict["stringprop"] = "stringdata"; dict.Options.CanAlterProperties = true; dict["newprop"] = "newdata"; Assert.AreEqual("newdata",dict["Newprop"]); Assert.IsTrue(dict.ContainsKey("stringprop")); dict.Remove("Stringprop"); Assert.IsFalse(dict.ContainsKey("stringprop")); }
public TypedObject DecodeConnect(byte[] data) { Reset(); dataBuffer = data; dataPos = 0; TypedObject result = new TypedObject("Invoke"); result.Add("result", DecodeAMF0()); result.Add("invokeId", DecodeAMF0()); result.Add("serviceCall", DecodeAMF0()); result.Add("data", DecodeAMF0()); if (dataPos != dataBuffer.Length) { for (int i = dataPos; i < data.Length; i++) { if (ReadByte() != '\0') throw new Exception("There is other data in the buffer!"); } } if (dataPos != dataBuffer.Length) throw new Exception("Did not consume entire buffer: " + dataPos + " of " + dataBuffer.Length); return result; }
public void Alter() { var testObj = new TypedObject(); var dict = new DynamicAdapter(testObj, new MapOptions { CanAlterProperties = false }); dynamic dyn = dict; Assert.Throws<InvalidOperationException>(() => { dyn.newprop = "newdata"; }, "Can't add a prop"); Assert.Throws<InvalidOperationException>(() => { dict.Remove("Stringprop"); }, "Can't rmove a prop"); // we can update with just CanAlterProprerties=false but IsReadOnly=true dyn.stringprop = "stringdata"; dict.Options.CanAlterProperties = true; dyn.newprop = "newdata"; Assert.AreEqual("newdata",dict["Newprop"]); Assert.IsTrue(dict.ContainsKey("stringprop")); dict.Remove("Stringprop"); Assert.IsFalse(dict.ContainsKey("stringprop")); }
public void Contains() { var testObj = new TypedObject(); var dict = new PropertyDictionaryAdapter(testObj); var intArray = new int[] {1,2,3}; testObj.IntArray = intArray; Assert.IsTrue(dict.Contains(new KeyValuePair<string,object>("IntArray",intArray))); Assert.IsFalse(dict.Contains(new KeyValuePair<string,object>("IntArray",new int[] {1,2,3}))); }
public void Clear() { var testObj = new TypedObject(); var dict = new PropertyDictionaryAdapter(testObj); testObj.StringField = "changed"; Assert.AreEqual("changed", dict["stringfield"],"Propert of underlying object affected by a change to dict"); dict.Clear(); Assert.AreEqual(0, dict.Count); dict["stringfield"] = "string data"; Assert.AreEqual("changed", testObj.StringField,"Same-named property no longer affects object after a clear"); Assert.AreEqual("string data", dict["stringfield"], "Same-named property no longer affects object after a clear"); }
public void Add() { var testObj = new TypedObject(); var dict = new PropertyDictionaryAdapter(testObj); Assert.AreEqual(13, dict.Count); dict["stringfield"] = "New string data"; Assert.AreEqual(13, dict.Count); Assert.AreEqual("New string data", dict["Stringfield"]); Assert.AreEqual("New string data", testObj.StringField); dict["MyNewProp"] = "added data"; Assert.AreEqual(14, dict.Count); Assert.AreEqual("added data", dict["mynewprop"]); }
public byte[] EncodeConnect(Dictionary<string, object> paramaters) { startTime = (long)DateTime.Now.TimeOfDay.TotalMilliseconds; List<Byte> result = new List<Byte>(); WriteStringAMF0(result, "connect"); WriteIntAMF0(result, 1); // invokeId // Write params result.Add((byte)0x11); // AMF3 object result.Add((byte)0x09); // Array WriteAssociativeArray(result, paramaters); // Write service call args result.Add((byte)0x01); result.Add((byte)0x00); // false WriteStringAMF0(result, "nil"); // "nil" WriteStringAMF0(result, ""); // "" // Set up CommandMessage TypedObject cm = new TypedObject("flex.messaging.messages.CommandMessage"); cm.Add("operation", 5); cm.Add("correlationId", ""); cm.Add("timestamp", 0); cm.Add("messageId", RandomUID()); cm.Add("body", new TypedObject(null)); cm.Add("destination", ""); Dictionary<string, object> headers = new Dictionary<string, object>(); headers.Add("DSMessagingVersion", 1.0); headers.Add("DSId", "my-rtmps"); cm.Add("headers", headers); cm.Add("clientId", null); cm.Add("timeToLive", 0); // Write CommandMessage result.Add((byte)0x11); // AMF3 object Encode(result, cm); byte[] ret = new byte[result.Count]; for (int i = 0; i < ret.Length; i++) ret[i] = result[i]; ret = AddHeaders(ret); ret[7] = (byte)0x14; // Change message type return ret; }
public void Add() { var testObj = new TypedObject(); var dict = new DynamicAdapter(testObj); dict.Options.CanAlterProperties = true; dynamic dyn = dict; Assert.AreEqual(13, dict.Count); dyn.stringfield = "New string data"; Assert.AreEqual(13, dict.Count); Assert.AreEqual("New string data", dyn.Stringfield); Assert.AreEqual("New string data", testObj.StringField); dyn.MyNewProp = "added data"; Assert.AreEqual(14, dict.Count); Assert.AreEqual("added data", dyn.mynewprop); }
/// <summary> /// Encodes the given parameters as a val packet /// </summary> /// <param name="parameters">The connection parameters.</param> /// <returns>The val packet.</returns> public byte[] encodeConnect(Dictionary<string, object> parameters) { var result = new List<byte>(); writestringAMFO(result, "val"); // Write invokeid writeIntAMFO(result, 1); // Write params result.Add(0x11); // AMF3 object result.Add(0x09); // Array writeAssociativeArray(result, parameters); // Write service call args result.Add(0x01); result.Add(0x00); // False writestringAMFO(result, "nil"); writestringAMFO(result, ""); // Set up CommandMessage var cm = new TypedObject("flex.messaging.messages.CommandMessage"); cm.Add("messageRefType", null); cm.Add("operation", 5); cm.Add("correlationId", ""); cm.Add("clientId", null); cm.Add("destination", ""); cm.Add("messageId", randomUID()); cm.Add("timestamp", 0d); cm.Add("timeToLive", 0d); cm.Add("body", new TypedObject(null)); var headers = new Dictionary<string, object>(); headers.Add("DSMessagingVersion", 1d); headers.Add("DSId", "my-rtmps"); cm.Add("headers", headers); // Write CommandMessage result.Add(0x11); // AMF3 object encode(result, cm); return AddHeaders(result.ToArray()); }
public TypedObject DecodeInvoke(byte[] data) { Reset(); dataBuffer = data; dataPos = 0; TypedObject result = new TypedObject("Invoke"); if (dataBuffer[0] == 0x00) { dataPos++; result.Add("version", 0x00); } result.Add("result", DecodeAMF0()); result.Add("invokeId", DecodeAMF0()); result.Add("serviceCall", DecodeAMF0()); result.Add("data", DecodeAMF0()); if (dataPos != dataBuffer.Length) throw new Exception("Did not consume entire buffer: " + dataPos + " of " + dataBuffer.Length); return result; }
public void WrapperBasic() { var testObj = new TypedObject { StringProp="quick brown fox", IntArray =new int[] { 1, 2, 4, 8 }, DoubleProp = 3.14, StringList = new List<string> { "a","b","c" } }; var dict = new PropertyDictionaryAdapter(testObj); Assert.AreEqual("quick brown fox", dict["StringProp"]); Assert.AreEqual(4, ((int[])dict["IntArray"])[2]); Assert.AreEqual(3.14, dict["DoubleProp"]); Assert.AreEqual("b", ((IList<string>)dict["StringList"])[1]); }
public SummaryAggStat(TypedObject result) { base.SetFields <SummaryAggStat>(this, result); }
public Owner(TypedObject result) { base.SetFields(this, result); }
public Talent(TypedObject result) { this.type = "com.riotgames.platform.summoner.Talent"; base.SetFields <Talent>(this, result); }
public TeamMemberInfoDTO(TypedObject result) { base.SetFields(this, result); }
public MatchHistorySummary(TypedObject result) { base.SetFields(this, result); }
public PointSummary(TypedObject result) { this.type = "com.riotgames.platform.reroll.pojo.PointSummary"; base.SetFields <PointSummary>(this, result); }
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]); } }
public SummonerRuneInventory(TypedObject result) { base.SetFields(this, result); }
public PracticeGameConfig(TypedObject result) { base.SetFields(this, result); }
public PlayerStatSummary(TypedObject result) { base.SetFields <PlayerStatSummary>(this, result); }
public PointSummary(TypedObject result) { base.SetFields <PointSummary>(this, result); }
public override void DoCallback(TypedObject result) { base.SetFields <FellowPlayerInfo>(this, result); this.callback(this); }
public PlayerParticipant(TypedObject result) { base.SetFields(this, result); }
public GameNotification(TypedObject result) { base.SetFields(this, result); }
public SummonerDefaultSpells(TypedObject result) { base.SetFields(this, result); }
public AggregatedStats(TypedObject result) { base.SetFields(this, result); }
public FellowPlayerInfo(TypedObject result) { this.type = "com.riotgames.platform.statistics.FellowPlayerInfo"; base.SetFields <FellowPlayerInfo>(this, result); }
public SummonerActiveBoostsDTO(TypedObject result) { base.SetFields(this, result); }
public PlayerParticipant(TypedObject result) { this.type = "com.riotgames.platform.game.PlayerParticipant"; base.SetFields <PlayerParticipant>(this, result); }
public Participant(TypedObject result) { base.SetFields(this, result); }
public TeamStatSummary(TypedObject result) { this.type = "com.riotgames.team.stats.TeamStatSummary"; base.SetFields <TeamStatSummary>(this, result); }
public TalentRow(TypedObject result) { base.SetFields(this, result); }
public override void DoCallback(TypedObject result) { base.SetFields <Talent>(this, result); this.callback(this); }
public MasteryBookDTO(TypedObject result) { base.SetFields(this, result); }
public void Updating() { var testObj = new TypedObject(); var dict = new PropertyDictionaryAdapter(testObj); Assert.AreEqual(0d, testObj.DoubleProp); dict["doubleprop"] = 3.14; Assert.AreEqual(3.14, testObj.DoubleProp); Assert.Throws<InvalidCastException>(() => { dict["doubleprop"] = "abc"; }, "Can't assign bad data type"); }
public Inviter(TypedObject result) { base.SetFields(this, result); }
public AllSummonerData(TypedObject result) { base.SetFields(this, result); }
public ChampionMastery(TypedObject result) { base.SetFields(this, result); }
public LoginDataPacket(TypedObject result) { base.SetFields(this, result); }
public TeamDTO(TypedObject result) { base.SetFields(this, result); }
public TalentEntry(TypedObject result) { base.SetFields(this, result); }
public TeamMemberInfoDTO(TypedObject result) { base.SetFields(this, result); }
public BasePublicSummonerDTO(TypedObject result) { base.SetFields(this, result); }
public TeamStatDetail(TypedObject result) { base.SetFields(this, result); }
public PlayerStatSummary(TypedObject result) { this.type = "com.riotgames.platform.statistics.PlayerStatSummary"; base.SetFields <PlayerStatSummary>(this, result); }
public override void DoCallback(TypedObject result) { base.SetFields <PlayerParticipant>(this, result); this.callback(this); }
public LoginDataPacket(TypedObject result) { base.SetFields(this, result); }
public override void DoCallback(TypedObject result) { base.SetFields <PlayerStatSummary>(this, result); this.callback(this); }
public SummonerLeaguesDTO(TypedObject result) { base.SetFields(this, result); }
public Session(TypedObject result) { base.SetFields(this, result); }
public PublicSummoner(TypedObject result) { base.SetFields(this, result); }
public TeamPlayerAggregatedStatsDTO(TypedObject result) { base.SetFields(this, result); }
public LeagueListDTO(TypedObject result) { base.SetFields(this, result); }
public override void DoCallback(TypedObject result) { base.SetFields(this, result); callback(this); }
public SimpleDialogMessageResponse(TypedObject result) { base.SetFields(this, result); }
public MatchingThrottleConfig(TypedObject result) { base.SetFields <MatchingThrottleConfig>(this, result); }
public override void DoCallback(TypedObject result) { base.SetFields(this, result); callback(this); }
public SearchingForMatchNotification(TypedObject result) { base.SetFields(this, result); }