public App()
 {
     this.InitializeComponent();
     this.Suspending += this.OnSuspending;
     TypeDictIns      = TypeDict.GetInstance();
     //TypeDictIns.SetTypeDict(TypeDictIns.GetInd());
 }
예제 #2
0
        public void Working()
        {
            using (OleDbConnection connection = new OleDbConnection(ConnectionString))
            {
                connection.Open();
                using (OleDbCommand Command = connection.CreateCommand())
                {
                    double val = .0;
                    foreach (var code in Codes)
                    {
                        var five = new PotentialFive();
                        foreach (var sf in SFS)
                        {
                            Command.CommandText = string.Format("Select SUM(JZRJQL),SUM(TZQDQL),SUM(SSCCQL),SUM(YYSSCCQL) from GYYD where HYDM='{0}' AND SFGSQY='{1}'AND TDSYQK='1'", code, sf);
                            using (var reader = Command.ExecuteReader())
                            {
                                if (reader.Read())
                                {
                                    var values = new PotentialBase()
                                    {
                                        JZRJQL   = double.TryParse(reader[0].ToString(), out val) ? val : .0,
                                        TZQDQL   = double.TryParse(reader[1].ToString(), out val) ? val : .0,
                                        SSCCQL   = double.TryParse(reader[2].ToString(), out val) ? val : .0,
                                        YYSSCCQL = double.TryParse(reader[3].ToString(), out val) ? val : .0
                                    };
                                    switch (sf)
                                    {
                                    case "是":
                                        five.Up = values;
                                        break;

                                    case "否":
                                        five.Down = values;
                                        break;
                                    }
                                }
                            }
                        }
                        TypeDict.Add(code, five);
                        SSum = SSum + five;
                    }
                }
                connection.Close();
            }
        }
예제 #3
0
        public void Write(ref ISheet Sheet)
        {
            int code = 0;

            for (var i = StartRow; i < StartRow2; i = i + 2)
            {
                if (int.TryParse(Sheet.GetRow(i).GetCell(0).ToString(), out code))
                {
                    if (TypeDict.ContainsKey(code))
                    {
                        var five = TypeDict[code];
                        WriteBase(five.Up, Sheet, i, StartCell);
                        WriteBase(five.Down, Sheet, i + 1, StartCell);
                    }
                }
            }
            WriteBase(SSum.Up, Sheet, StartRow2, StartCell);
            WriteBase(SSum.Down, Sheet, StartRow2 + 1, StartCell);
        }
예제 #4
0
    public static void Parse(VEObject obj, XmlElement xml)
    {
        string typename = obj.GetType().FullName;

        if (!TypeDict.ContainsKey(typename))
        {
            throw new Exception("Object [" + obj.ID + "] ToXML failed: Unknown Type");
        }
        XMLMemberCollection mc = TypeDict[typename];

        foreach (XMLMemberDesc mem in mc.Members)
        {
            object value = XMLIO.ReadValue(xml, mem.Attr, mem.Type, mem.Necessary, mem.DefaultValue);
            if (value != null)
            {
                mem.SetValue(obj, value);
            }
        }
    }
예제 #5
0
    public static string ToXML(VEObject obj)
    {
        string typename = obj.GetType().FullName;

        if (!TypeDict.ContainsKey(typename))
        {
            Debug.LogError("Object [" + obj.ID + "] ToXML failed: Unknown Type");
            return("");
        }
        XMLMemberCollection mc = TypeDict[typename];
        string xml             = "<" + mc.Name + " ";

        foreach (XMLMemberDesc mem in mc.Members)
        {
            xml += XMLIO.WriteValue(mem.Attr, mem.GetValue(obj), mem.Type, mem.Necessary, mem.DefaultValue);
        }
        xml += "/>\r\n";
        return(xml);
    }
예제 #6
0
        static ITypeDecleration ReadEnumType(MsgCodeReader reader, string ns, string[] parentTypes, TypeDict typeDict, bool requireEnumKeyWord)
        {
            TypeEnum  type         = null;
            ShellType ret          = null;
            int       requiredChar = -1;
            string    enumName     = null;

            string[] newParentTypes = null;
            string   enumValue      = null;
            bool     enumEqual      = false;
            bool     isEnumInt      = false;
            int      enumInt        = -1;
            bool     done           = false;

            while (reader.CanPeek())
            {
                char chr = (char)reader.Peek();
                //Debug.Log(chr);
                if (WHITE_CHARS.IndexOf(chr) >= 0)
                {
                    reader.Next();
                    continue;
                }
                if (requiredChar >= 0)
                {
                    if ((char)requiredChar != chr)
                    {
                        throw new Exception(string.Format("'{0}' is required !", (char)requiredChar));
                    }
                    requiredChar = -1;
                    reader.Next();
                    continue;
                }
                if (chr == '\n')
                {
                    reader.Next();
                    continue;
                }
                //Debug.LogWarning(chr);
                if (string.IsNullOrEmpty(enumName))
                {
                    enumName = ReadContentWord(reader);
                    if (requireEnumKeyWord && enumName == "enum")
                    {
                        enumName           = null;
                        requireEnumKeyWord = false;
                    }
                    continue;
                }
                else
                {
                    if (type == null)
                    {
                        if (chr != '{')
                        {
                            throw new Exception("'{' is required after enum name !");
                        }
                        if (newParentTypes == null)
                        {
                            if (parentTypes == null)
                            {
                                parentTypes = new string[0];
                            }
                            newParentTypes = new string[parentTypes.Length + 1];
                            Array.Copy(parentTypes, 0, newParentTypes, 0, parentTypes.Length);
                            newParentTypes[parentTypes.Length] = enumName;
                        }
                        ret = typeDict.GetType(ns, parentTypes, enumName, false);
                        if (ret != null && ret.type is TypeEnum)
                        {
                            type = ret.type as TypeEnum;
                        }
                        else
                        {
                            if (ret == null)
                            {
                                ret = new ShellType(enumName);
                            }
                            type     = new TypeEnum(enumName, false);
                            ret.type = type;
                        }
                        typeDict.AddType(ns, parentTypes, enumName, ret);
                        reader.Next();
                    }
                    else if (chr == '}')
                    {
                        //TODO is illegal
                        reader.Next();
                        done = true;
                        break;
                    }
                    else if (string.IsNullOrEmpty(enumValue))
                    {
                        enumValue = ReadContentWord(reader);
                        if (string.IsNullOrEmpty(enumValue))
                        {
                            throw new Exception("Enum Value is required !");
                        }
                    }
                    else if (!enumEqual)
                    {
                        if (chr != '=')
                        {
                            throw new Exception("'=' is required between enum value and its int value !");
                        }
                        enumEqual = true;
                        reader.Next();
                    }
                    else if (!isEnumInt)
                    {
                        string v = ReadContentWord(reader);
                        if (!TryParseInt(v, out enumInt))
                        {
                            throw new Exception(string.Format("Cannot parse enum int value '{0}' into int !", v));
                        }
                        isEnumInt = true;
                    }
                    else
                    {
                        if (chr != ';')
                        {
                            throw new Exception("';' is required after enum value definition !");
                        }
                        type.AddEnum(enumValue, reader.LastComment, enumInt);
                        enumValue = null;
                        enumEqual = false;
                        isEnumInt = false;
                        enumInt   = -1;
                        reader.Next();
                    }
                }
            }
            if (!done)
            {
                throw new Exception(string.Format("Enum type '{0}' is not completed !", enumName));
            }
            //Debug.Log(ret);
            return(ret);
        }
예제 #7
0
        static ITypeDecleration ReadProtoType(MsgCodeReader reader, string ns, string[] parentTypes, TypeDict typeDict, bool requireMsgKeyWord, List <string> usings = null)
        {
            string     typeName        = null;
            ShellType  ret             = null;
            TypeCustom type            = null;
            bool       typeExtend      = false;
            string     baseType        = null;
            bool       done            = false;
            bool       isProperty      = false;
            bool       isArrayProperty = false;
            string     propertyName    = null;
            string     propertyType    = null;
            bool       protoMemberEq   = false;
            int        protoMember     = -1;
            int        hasDefaultVal   = 0;
            string     defaultValue    = null;

            string[] newParentTypes = null;
            string   comments       = null;

            while (reader.CanPeek())
            {
                char chr = (char)reader.Peek();
                if (chr == '\n')
                {
                    reader.Next();
                    continue;
                }
                if (WHITE_CHARS.IndexOf(chr) >= 0)
                {
                    reader.Next();
                    continue;
                }
                //Debug.LogFormat("'{0}' at Line {1} Column {2}", chr, reader.LineCount, reader.Column - 1);
                if (string.IsNullOrEmpty(typeName))
                {
                    typeName = ReadContentWord(reader);
                    if (requireMsgKeyWord && typeName == "message")
                    {
                        typeName          = null;
                        requireMsgKeyWord = false;
                    }
                    continue;
                }
                else
                {
                    bool typeDone = false;
                    if (type == null)
                    {
                        if (chr != '{')
                        {
                            string w = ReadContentWord(reader, ".");
                            if (typeExtend)
                            {
                                if (string.IsNullOrEmpty(baseType))
                                {
                                    baseType = w;
                                    continue;
                                }
                            }
                            else
                            {
                                if (w == "extend")
                                {
                                    typeExtend = true;
                                    continue;
                                }
                            }
                            Debug.LogWarning(w);
                            throw new Exception("'{' is required after message name !");
                        }
                        if (newParentTypes == null)
                        {
                            if (parentTypes == null)
                            {
                                parentTypes = new string[0];
                            }
                            newParentTypes = new string[parentTypes.Length + 1];
                            Array.Copy(parentTypes, 0, newParentTypes, 0, parentTypes.Length);
                            newParentTypes[parentTypes.Length] = typeName;
                        }
                        ret = typeDict.GetType(ns, parentTypes, typeName, false, usings);
                        if (ret != null && ret.type is TypeCustom)
                        {
                            type = ret.type as TypeCustom;
                        }
                        else
                        {
                            if (ret == null)
                            {
                                ret = new ShellType(typeName);
                            }
                            type     = new TypeCustom(typeName);
                            ret.type = type;
                        }
                        typeDict.AddType(ns, parentTypes, typeName, ret);
                        type.SetTypeExtend(baseType);
                        reader.Next();
                    }
                    else if (chr == '}')
                    {
                        //TODO is illegal
                        reader.Next();
                        done = true;
                        break;
                    }
                    else if (!isProperty)
                    {
                        comments = reader.LastComment;
                        string kw = ReadContentWord(reader);
                        if (kw == "optional" || kw == "required")
                        {
                            isProperty      = true;
                            isArrayProperty = false;
                        }
                        else if (kw == "repeated")
                        {
                            isProperty      = true;
                            isArrayProperty = true;
                        }
                        else if (kw == "message")
                        {
                            isProperty      = false;
                            isArrayProperty = false;
                            ITypeDecleration subType = ReadProtoType(reader, ns, newParentTypes, typeDict, false);
                            if (!string.IsNullOrEmpty(comments))
                            {
                                subType.AddTypeComments(comments);
                            }
                            comments = null;
                            type.AddSubType(subType);
                        }
                        else if (kw == "enum")
                        {
                            ITypeDecleration subType = ReadEnumType(reader, ns, newParentTypes, typeDict, false);
                            if (!string.IsNullOrEmpty(comments))
                            {
                                subType.AddTypeComments(comments);
                            }
                            comments = null;
                            type.AddSubType(subType);
                        }
                        else
                        {
                            throw new Exception(string.Format("Unknown key word '{0}' !", kw));
                        }
                    }
                    else if (string.IsNullOrEmpty(propertyType))
                    {
                        propertyType = ReadContentWord(reader);
                        if (string.IsNullOrEmpty(propertyType))
                        {
                            throw new Exception("Property Type is required !");
                        }
                    }
                    else if (string.IsNullOrEmpty(propertyName))
                    {
                        propertyName = ReadContentWord(reader);
                        if (string.IsNullOrEmpty(propertyName))
                        {
                            throw new Exception("Property Name is required !");
                        }
                    }
                    else if (!protoMemberEq)
                    {
                        if (chr != '=')
                        {
                            throw new Exception("'=' is required after property name !");
                        }
                        protoMemberEq = true;
                        reader.Next();
                    }
                    else if (protoMember <= 0)
                    {
                        string pm = ReadContentWord(reader);
                        //Debug.LogWarning("pm : " + pm + "    char " + reader.Peek());
                        if (!TryParseInt(pm, out protoMember))
                        {
                            throw new Exception(string.Format("Cannot parse proto member '{0}' into int !", pm));
                        }
                        if (protoMember <= 0)
                        {
                            throw new Exception("Proto member should be greater than or equal to 1");
                        }
                    }
                    else if (hasDefaultVal == 0)
                    {
                        if (chr == ';')
                        {
                            typeDone = true;
                        }
                        else
                        {
                            if (chr != '[')
                            {
                                throw new Exception("';' or '[default=xxx]' is required in property definition !");
                            }
                            hasDefaultVal = 1;
                        }
                        reader.Next();
                    }
                    else if (hasDefaultVal == 1)
                    {
                        string def = ReadContentWord(reader);
                        if (def != "default")
                        {
                            Debug.LogError(def);
                            throw new Exception("'[default=xxx]' is required in property definition !");
                        }
                        hasDefaultVal = 2;
                    }
                    else if (hasDefaultVal == 2)
                    {
                        if (chr != '=')
                        {
                            throw new Exception("'[default=xxx]' is required in property definition !");
                        }
                        hasDefaultVal = 3;
                        reader.Next();
                    }
                    else if (hasDefaultVal == 3)
                    {
                        defaultValue = ReadContentString(reader, "]\n");
                        if (string.IsNullOrEmpty(defaultValue))
                        {
                            throw new Exception("Illegal default value in property definition !");
                        }
                        Debug.LogWarning("default value : " + defaultValue);
                        hasDefaultVal = 4;
                    }
                    else if (hasDefaultVal == 4)
                    {
                        if (chr != ']')
                        {
                            throw new Exception("'[default=xxx]' is required in property definition !");
                        }
                        hasDefaultVal = 5;
                        reader.Next();
                    }
                    else
                    {
                        if (chr != ';')
                        {
                            throw new Exception("';' is required after property definition !");
                        }
                        typeDone = true;
                        reader.Next();
                    }
                    if (typeDone)
                    {
                        TypeBase t = TypeHelper.GetXmlValueType(propertyType);
                        if (t == null)
                        {
                            t = typeDict.GetType(ns, newParentTypes, propertyType, true, usings);
                        }
                        //Debug.LogWarningFormat("\t{0}{1} {2} = {3}", propertyType, isArrayProperty ? "[]" : "", propertyName, protoMember);
                        type.AddField(propertyName, t, isArrayProperty, defaultValue, comments, protoMember);
                        propertyType    = null;
                        propertyName    = null;
                        protoMemberEq   = false;
                        isArrayProperty = false;
                        protoMember     = -1;
                        isProperty      = false;
                        comments        = null;
                        hasDefaultVal   = 0;
                        defaultValue    = null;
                    }
                }
            }
            if (!done)
            {
                throw new Exception(string.Format("message '{0}' is not completed !", typeName));
            }
            //Debug.Log(ret);
            return(ret);
        }
예제 #8
0
        public static Dictionary <string, List <ITypeDecleration> > ReadProto(MsgCodeReader reader, out List <string> usings)
        {
            usings = new List <string>();

            Dictionary <string, List <ITypeDecleration> > ret = new Dictionary <string, List <ITypeDecleration> >();

            int requiredChar = -1;
            Dictionary <string, TypeDict> typeDicts = new Dictionary <string, TypeDict>();

            TypeDict typeDict             = null;
            List <ITypeDecleration> types = null;

            int    curState     = 0;      //1 for package, 2 for import, 4 for message, 5 for enum
            string curNameSpace = "global";
            bool   headsOver    = false;

            while (reader.CanPeek())
            {
                char chr = (char)reader.Peek();
                if (WHITE_CHARS.IndexOf(chr) >= 0)
                {
                    reader.Next();
                    continue;
                }
                if (requiredChar >= 0)
                {
                    if ((char)requiredChar != chr)
                    {
                        throw new Exception(string.Format("'{0}' is required !", (char)requiredChar));
                    }
                    requiredChar = -1;
                    reader.Next();
                    continue;
                }
                if (chr == '\n')
                {
                    reader.Next();
                    continue;
                }

                if (curState == 0)
                {
                    string kw = ReadContentWord(reader);
                    if (kw == "package")
                    {
                        curState = 1;
                    }
                    else if (kw == "import")
                    {
                        if (headsOver)
                        {
                            throw new Exception("'import' should be in front of all types !");
                        }
                        curState = 2;
                    }
                    else if (kw == "message")
                    {
                        curState = 4;
                    }
                    else if (kw == "enum")
                    {
                        curState = 5;
                    }
                    else
                    {
                        Debug.LogError(chr + "   " + (int)chr + "    at line " + reader.LineCount + "  column " + reader.Column);
                        throw new Exception(string.Format("Unknows keyword '{0}' !", kw));
                    }
                }
                else if (curState == 1)                //package
                {
                    curNameSpace = ReadContentWord(reader, ".");
                    requiredChar = ';';
                    types        = null;
                    typeDict     = null;
                    curState     = 0;
                }
                else if (curState == 2)                 //import
                {
                    bool hasQuot = chr == '"';
                    if (hasQuot)
                    {
                        reader.Next();
                    }
                    string importNs = ReadContentWord(reader, ".");
                    if (string.IsNullOrEmpty(importNs))
                    {
                        throw new Exception("Namespace after 'import' is required !");
                    }
                    if (hasQuot)
                    {
                        if (reader.Peek() != '"')
                        {
                            throw new Exception("'\"' should be appeared in pairs !");
                        }
                        reader.Next();
                    }
                    usings.Add(importNs);
                    requiredChar = ';';
                    curState     = 0;
                }
                else if (curState == 4 || curState == 5)
                {
                    string comments = reader.LastComment;
                    headsOver = true;
                    if (types == null && !ret.TryGetValue(curNameSpace, out types))
                    {
                        types = new List <ITypeDecleration>();
                        ret.Add(curNameSpace, types);
                    }
                    if (typeDict == null && !typeDicts.TryGetValue(curNameSpace, out typeDict))
                    {
                        typeDict = new TypeDict();
                        typeDicts.Add(curNameSpace, typeDict);
                    }
                    if (curState == 4)                    //message
                    {
                        ITypeDecleration type = ReadProtoType(reader, curNameSpace, null, typeDict, false, usings);
                        if (!string.IsNullOrEmpty(comments))
                        {
                            type.AddTypeComments(comments);
                        }
                        types.Add(type);
                        curState = 0;
                    }
                    else if (curState == 5)                     //enum
                    {
                        ITypeDecleration type = ReadEnumType(reader, curNameSpace, null, typeDict, false);
                        if (!string.IsNullOrEmpty(comments))
                        {
                            type.AddTypeComments(comments);
                        }
                        types.Add(type);
                        curState = 0;
                    }
                }
            }
            return(ret);
        }
예제 #9
0
 public void TypeDictSetUp()
 {
     this.typeDict = new TypeDict <TestBaseClass>();
     this.typeDict.Set(new TestChildClassA());
     this.typeDict.Set(new TestChildClassB());
 }