private static void WriteDeserializeVector(ProtocolClassVariable field, StringBuilder init)
        {
            init.AppendLine(!string.IsNullOrEmpty(field.VectorFieldRead)
                ? $"            var {field.Name}Count = reader.{field.VectorFieldRead}();"
                : $"            var {field.Name}Count = reader.ReadUShort();");
            init.AppendLine($"            {field.Name.Capitalize()} = new List<{field.ObjectType}>();");
            init.AppendLine(
                $"            for (var {field.Name}Index = 0; {field.Name}Index < {field.Name}Count; {field.Name}Index++)");
            init.AppendLine("            {");
            switch (field.MethodType)
            {
            case ReadMethodType.ProtocolTypeManager:
                init.AppendLine(
                    $"                var objectToAdd = ProtocolTypeManager.GetInstance<{field.ObjectType}>(reader.ReadUShort());");
                init.AppendLine("                objectToAdd.Deserialize(reader);");
                init.AppendLine($"                {field.Name.Capitalize()}.Add(objectToAdd);");
                break;

            case ReadMethodType.SerializeOrDeserialize:
                init.AppendLine($"                var objectToAdd = new {field.ObjectType.Capitalize()}();");
                init.AppendLine("                objectToAdd.Deserialize(reader);");
                init.AppendLine($"                {field.Name.Capitalize()}.Add(objectToAdd);");
                break;

            case ReadMethodType.VectorPrimitive:
                init.AppendLine($"                {field.Name.Capitalize()}.Add(reader.{field.ReadMethod}());");
                break;
            }
            init.AppendLine("            }");
        }
        private static void WriteDeserializeVector(ProtocolClassVariable field, StringBuilder init)
        {
            init.AppendLine(!string.IsNullOrEmpty(field.VectorFieldRead)
                ? $"\t\t\tvar {field.Name}Count = reader.{field.VectorFieldRead}();"
                : $"\t\t\tvar {field.Name}Count = reader.ReadShort();");
            init.AppendLine($"\t\t\tvar {field.Name}_ = new {field.ObjectType}[{field.Name}Count];");
            init.AppendLine($"\t\t\tfor (var {field.Name}Index = 0; {field.Name}Index < {field.Name}Count; {field.Name}Index++)");
            init.AppendLine("\t\t\t{");
            switch (field.MethodType)
            {
            case ReadMethodType.ProtocolTypeManager:
                init.AppendLine($"\t\t\t\tvar objectToAdd = ProtocolTypeManager.GetInstance<{field.ObjectType}>(reader.ReadShort());");
                init.AppendLine("\t\t\t\tobjectToAdd.Deserialize(reader);");
                init.AppendLine($"\t\t\t\t{field.Name}_[{field.Name}Index] = objectToAdd;");
                break;

            case ReadMethodType.SerializeOrDeserialize:
                init.AppendLine($"\t\t\t\tvar objectToAdd = new {field.ObjectType}();");
                init.AppendLine("\t\t\t\tobjectToAdd.Deserialize(reader);");
                init.AppendLine($"\t\t\t\t{field.Name}_[{field.Name}Index] = objectToAdd;");
                break;

            case ReadMethodType.VectorPrimitive:
                init.AppendLine($"\t\t\t\t{field.Name}_[{field.Name}Index] = reader.{field.ReadMethod}();");
                break;
            }
            init.AppendLine("\t\t\t}");
            init.AppendLine($"\t\t\t{field.Name} = {field.Name}_;");
        }
        private void WriteSerializeVector(ProtocolClassVariable field, StringBuilder init)
        {
            init.AppendLine(!string.IsNullOrEmpty(field.VectorFieldWrite)
                ? $"            writer.{field.VectorFieldWrite}({field.VectorFieldWrite.ToConverterCSharp()}{field.Name.Capitalize()}.Count);"
                : $"            writer.WriteShort((short){field.Name.Capitalize()}.Count);");
            init.AppendLine(
                $"            for (var {field.Name}Index = 0; {field.Name}Index < {field.Name.Capitalize()}.Count; {field.Name}Index++)");
            init.AppendLine("            {");
            switch (field.MethodType)
            {
            case ReadMethodType.ProtocolTypeManager:
                init.AppendLine(
                    $"                var objectToSend = {field.Name.Capitalize()}[{field.Name}Index];");
                init.AppendLine("                writer.WriteUShort(objectToSend.TypeID);");
                init.AppendLine("                objectToSend.Serialize(writer);");
                break;

            case ReadMethodType.SerializeOrDeserialize:
                init.AppendLine(
                    $"                var objectToSend = {field.Name.Capitalize()}[{field.Name}Index];");
                init.AppendLine("                objectToSend.Serialize(writer);");
                break;

            case ReadMethodType.VectorPrimitive:
                init.AppendLine(
                    $"                writer.{field.WriteMethod}({field.Name.Capitalize()}[{field.Name}Index]);");
                break;
            }
            init.AppendLine("            }");
        }
        private static void WriteSerializeVector(ProtocolClassVariable field, StringBuilder init)
        {
            init.AppendLine(!string.IsNullOrEmpty(field.VectorFieldWrite)
                ? $"\t\t\twriter.{field.VectorFieldWrite}({field.VectorFieldWrite.ToConverterCSharp()}{field.Name}.Count());"
                : $"\t\t\twriter.WriteShort((ushort){field.Name}.Count());");
            init.AppendLine(
                $"\t\t\tforeach (var objectToSend in {field.Name})");
            init.AppendLine("            {");
            switch (field.MethodType)
            {
            case ReadMethodType.ProtocolTypeManager:

                init.AppendLine("\t\t\t\twriter.WriteShort(objectToSend.TypeId);");
                init.AppendLine("\t\t\t\tobjectToSend.Serialize(writer);");
                break;

            case ReadMethodType.SerializeOrDeserialize:
                init.AppendLine("\t\t\t\tobjectToSend.Serialize(writer);");
                break;

            case ReadMethodType.VectorPrimitive:
                init.AppendLine(
                    $"\t\t\t\twriter.{field.WriteMethod}(objectToSend);");
                break;
            }
            init.AppendLine("\t\t\t}");
        }
Exemple #5
0
        private void ParseClassVars()
        {
            Variables = new List <ProtocolClassVariable>();
            var m = RegularExpression.GetRegex(RegexEnum.VarObject).Match(FileToTranslate);

            while (m.Success)
            {
                var newVar = new ProtocolClassVariable
                {
                    Name        = m.Groups["name"].Value,
                    TypeOfVar   = VarType.Object,
                    MethodType  = ReadMethodType.SerializeOrDeserialize,
                    ObjectType  = m.Groups["type"].Value,
                    ReadMethod  = "Deserialize",
                    WriteMethod = "Serialize",
                    Index       = m.Groups["name"].Index
                };
                Variables.Add(newVar);
                m = m.NextMatch();
            }

            m = RegularExpression.GetRegex(RegexEnum.VarPrimitive).Match(FileToTranslate);
            while (m.Success)
            {
                var newVar = new ProtocolClassVariable
                {
                    TypeOfVar  = VarType.Primitive,
                    Name       = m.Groups["name"].Value,
                    ObjectType = m.Groups["type"].Value,
                    Index      = m.Groups["name"].Index
                };
                Variables.Add(newVar);
                m = m.NextMatch();
            }

            m = RegularExpression.GetRegex(RegexEnum.VarVector).Match(FileToTranslate);
            while (m.Success)
            {
                var newVar = new ProtocolClassVariable
                {
                    TypeOfVar  = VarType.Vector,
                    Name       = m.Groups["name"].Value,
                    ObjectType = m.Groups["type"].Value,
                    Index      = m.Groups["name"].Index
                };
                Variables.Add(newVar);
                m = m.NextMatch();
            }
            Class.Variables = Variables.ToArray();
        }