Beispiel #1
0
        private List <NetworkClassField> ParseDeserializeBloc(String bloc, out bool useBool)
        {
            useBool = false;
            List <NetworkClassField> Fields = new List <NetworkClassField>();

            String[] lines = bloc.Split('\n');
            for (int i = 0; i < lines.Length; i++)
            {
                String line = lines[i];
                if (PrimitiveWriteCall.IsMatch(line))
                {
                    Match m = PrimitiveWriteCall.Match(line);
                    Fields.Add(new NetworkClassField(m.Groups[3].Value, m.Groups[2].Value));
                    //Console.WriteLine(m.Groups[3].Value + " : " + m.Groups[2].Value);
                }
                else if (SerializeObject.IsMatch(line))
                {
                    Match m = SerializeObject.Match(line);
                    Fields.Add(new NetworkClassField(m.Groups[1].Value, m.Groups[2].Value));
                }
                else if (ArraySizeWriteCall.IsMatch(line))
                {
                    Match             m     = ArraySizeWriteCall.Match(line);
                    NetworkClassField field = new NetworkClassField(m.Groups[3].Value);
                    field.ArrayMethode   = m.Groups[2].Value;
                    field.IsGenericArray = false;
                    field.IsArray        = true;
                    i += 2;
                    int open  = 0;
                    int close = 0;
                    for (; i < lines.Length; i++)
                    {
                        line = lines[i];
                        if (line.Trim() == "{")
                        {
                            open++;
                        }
                        if (line.Trim() == "}")
                        {
                            close++;
                        }
                        if (ArraySerializeIdCall.IsMatch(line))
                        {
                            field.IsGenericArray = true;
                        }
                        else if (ArraySerializeCall.IsMatch(line))
                        {
                            Match m2 = ArraySerializeCall.Match(line);
                            field.Methode = m2.Groups[1].Value;
                        }
                        else if (ArrySerializePrimitiveCall.IsMatch(line))
                        {
                            Match m2 = ArrySerializePrimitiveCall.Match(line);
                            field.Methode = m2.Groups[2].Value;
                        }
                        if (close == open)
                        {
                            break;
                        }
                    }
                    //Console.WriteLine(field.Name + "[" + field.Methode + "] " + (field.IsGenericArray ? "Generic" : "") + " size methode " + field.ArrayMethode);
                    Fields.Add(field);
                }
                else if (BooleanByteCall.IsMatch(line))
                {
                    Match m2 = BooleanByteCall.Match(line);
                    Fields.Add(new NetworkClassField(m2.Groups[2].Value, int.Parse(m2.Groups[1].Value)));
                    useBool = true;

                    //Console.WriteLine(m2.Groups[2].Value + " : bool -> " + m2.Groups[1].Value);
                }
            }
            return(Fields);
        }
Beispiel #2
0
        public FastConvert(String content)
        {
            Parsed = new NetworkClass();
            String[] lines = content.Split('\n');
            int      open  = 0;
            int      close = 0;
            bool     readingDeserialize = false;
            String   bloc = "";

            foreach (String line in lines)
            {
                if (readingDeserialize)
                {
                    if (line.Trim() == "{")
                    {
                        open++;
                    }
                    if (line.Trim() == "}")
                    {
                        close++;
                    }
                    bloc += line + "\n";
                    if (open == close)
                    {
                        break;
                    }
                }
                else if (SerializeFncReg.IsMatch(line))
                {
                    readingDeserialize = true;
                }
                else if (ClassDeclaration.IsMatch(line))
                {
                    Match m = ClassDeclaration.Match(line);
                    Parsed.Name   = m.Groups[1].Value;
                    Parsed.Parent = m.Groups[2].Value;
                }
                else if (ClassDeclarationSimple.IsMatch(line))
                {
                    Match m = ClassDeclarationSimple.Match(line);
                    Parsed.Name = m.Groups[1].Value;
                }
                else if (ProtocolId.IsMatch(line))
                {
                    Match m = ProtocolId.Match(line);
                    Parsed.Id = int.Parse(m.Groups[1].Value);
                }
            }
            bool useBw = false;

            Parsed.Fields         = ParseDeserializeBloc(bloc, out useBw);
            Parsed.UseByteWrapper = useBw;
            NetworkClassField last = null;

            foreach (NetworkClassField field in Parsed.Fields)
            {
                if (field.IsBoolean)
                {
                    field.IsLast = false;
                    last         = field;
                }
                field.ConvertNames();
            }
            if (last != null)
            {
                last.IsLast = true;
            }
        }