예제 #1
0
        public void WriteStructureLog(HMessage packet, ASClass messageClass)
        {
            if (_invalidStructures.Contains(packet.Header))
            {
                return;
            }

            int      position     = 0;
            string   structureLog = $"{{l}}{{u:{packet.Header}}}";
            ASMethod msgCtor      = messageClass.Instance.Constructor;

            foreach (ASParameter parameter in msgCtor.Parameters)
            {
                switch (parameter.Type.Name.ToLower())
                {
                case "string":
                    if (!packet.IsStringReadable(position))
                    {
                        continue;
                    }
                    structureLog += ($"{{s:{packet.ReadString(ref position)}}}");
                    break;

                case "boolean":
                    if (packet.GetReadableBytes(position) < 1)
                    {
                        continue;
                    }
                    structureLog += ($"{{b:{packet.ReadBoolean(ref position)}}}");
                    break;

                case "int":
                    if (packet.GetReadableBytes(position) < 4)
                    {
                        continue;
                    }
                    structureLog += ($"{{i:{packet.ReadInteger(ref position)}}}");
                    break;
                }
            }
            if (packet.GetReadableBytes(position) == 0)
            {
                WriteHighlight(structureLog + "\r\n", StructureHighlight);
            }
            else
            {
                _invalidStructures.Add(packet.Header);
            }
        }