public WunderPacket GetFromBytes(byte[] bytes, ref int offset) { if (bytes[0] == WunderPacket.PREFIX[0] && bytes[1] == WunderPacket.PREFIX[1]) { int id = WunderPacket.GetPacketID(bytes, offset); if (id < OrderedDefinitions.Count) { return(OrderedDefinitions[id].CreateFromBytes(bytes, ref offset)); } } return(null); }
public virtual WunderPacket CreateFromBytes(byte[] bytes, ref int offset) { if (bytes.Length - offset >= this.PacketSize) { offset += DATAOFFSET; WunderPacket newwp = this.CreateNew(); for (int f = 0; f < newwp.OrderdedFields.Count; ++f) { offset = newwp.OrderdedFields[f].SetBytes(bytes, offset); } return(newwp); } return(null); }
public virtual WunderPacket CreateNew() { var clone = new WunderPacket { Name = this.Name, ID = this.ID, Version = this.Version }; for (int k = 0; k < this.OrderdedFields.Count; ++k) { clone.AddField(this.OrderdedFields[k].Name, this.OrderdedFields[k].CreateNew()); } return(clone); }
public static bool TestWunderLayer(string xmlpath) { var layerTest = new WunderLayer(xmlpath); WunderPacket w = layerTest.GetNewPacket("Message"); w.Set("MessageData", "This is a test"); byte[] test = w.GetBytes(); Console.WriteLine(test.Length); WunderPacket o = layerTest.GetNewPacket("ObjectInfo"); o.Set("VX", 3.4); Console.WriteLine(w.ToString()); Console.WriteLine(o.ToString()); int offset = 0; WunderPacket decode = layerTest.GetFromBytes(test, ref offset); Console.WriteLine("Decoded Data: " + decode.Get("MessageData")); test = o.GetBytes(); offset = 0; decode = layerTest.GetFromBytes(test, ref offset); Console.WriteLine("Decoded Data: " + decode.Get("VX")); return(true); }
public WunderLayer(string xmldescription) { Packets packets = GenericXMLTools.ReadXML <Packets>(xmldescription); Console.WriteLine("VERSION: " + packets.Version); if (packets.PacketList != null) { Int16 ids = 0; foreach (var p in packets.PacketList) { //Console.WriteLine(p.ToString() +"\n"); WunderPacket wp; bool isVariable = p.PacketType == "Variable"; if (isVariable) { wp = new WunderPacketVariable() { Name = p.Name, PacketType = p.PacketType, ID = ids++, Version = Convert.ToInt32(packets.Version) }; } else { wp = new WunderPacket() { Name = p.Name, PacketType = p.PacketType, ID = ids++, Version = Convert.ToInt32(packets.Version) }; } foreach (var f in p.FieldList) { wp.AddFieldDefinition(f.Name, f.Type, f.Size); } PacketDefinitions.Add(p.Name, wp); OrderedDefinitions.Add(wp); } } }