Пример #1
0
        public static byte[] ToBytes(HFormat format, string signature)
        {
            MatchCollection matches = _structurePattern.Matches(signature);

            if (matches.Count == 0)
            {
                for (int i = 0; i <= 13; i++)
                {
                    signature = signature.Replace(("[" + i + "]"),
                                                  ((char)i).ToString());
                }
                return(Encoding.Default.GetBytes(signature));
            }
            else
            {
                ushort id     = 0;
                var    values = new List <object>(matches.Count);
                foreach (Match match in matches)
                {
                    string value = match.Groups["value"].Value;
                    string kind  = match.Groups["kind"].Value.ToLower();
                    switch (kind)
                    {
                    case "id":
                    {
                        if (!ushort.TryParse(value, out id))
                        {
                            throw new ArgumentException("Unable to locate the '{id:N}' parameter.", nameof(signature));
                        }
                        break;
                    }

                    case "i": values.Add(int.Parse(value)); break;

                    case "s": values.Add(value); break;

                    case "b":
                    {
                        byte bValue = 0;
                        value = value.Trim().ToLower();
                        if (!byte.TryParse(value, out bValue))
                        {
                            values.Add(value == "true");
                        }
                        else
                        {
                            values.Add(bValue);
                        }
                        break;
                    }

                    case "d": values.Add(double.Parse(value)); break;

                    case "u": values.Add(ushort.Parse(value)); break;
                    }
                }
                return(format.Construct(id, values.ToArray()));
            }
        }
Пример #2
0
        public HPacket(HFormat resolver, IList <byte> data)
            : this(resolver)
        {
            _body.AddRange(resolver.GetBody(data));

            _toBytesCache = new byte[data.Count];
            data.CopyTo(_toBytesCache, 0);

            Id = resolver.GetId(data);
        }
Пример #3
0
        public HPacket(HFormat resolver)
        {
            _body = new List <byte>();

            Format = resolver;
        }