Beispiel #1
0
 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);
 }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
                }
            }
        }