Esempio n. 1
0
 private static bool FindEnumTypeDef(MessageDef messageDef, string enumName, out EnumTypeDef ret)
 {
     bool find = messageDef.m_EnumTypes.TryGetValue(enumName, out ret);
       if (!find) {
     foreach (var pair in messageDef.m_Messages) {
       find = FindEnumTypeDef(pair.Value, enumName, out ret);
       if(find) {
     break;
       }
     }
       }
       return find;
 }
Esempio n. 2
0
 private static bool FindMessageDef(MessageDef messageDef, string messageName, out MessageDef ret)
 {
     bool find = messageDef.m_Messages.TryGetValue(messageName, out ret);
       if (!find) {
     foreach (var pair in messageDef.m_Messages) {
       find = FindMessageDef(pair.Value, messageName, out ret);
       if (find) {
     break;
       }
     }
       }
       return find;
 }
Esempio n. 3
0
        private void GenMessageSave(MessageDef messageDef, TextWriter sw)
        {
            try {
            sw.WriteLine();
            sw.WriteLine("\t\tprivate static void Save{0}(bool isValid, int dataVersion, byte[] data)", messageDef.m_TypeName);
            sw.WriteLine("\t\t{");
            sw.WriteLine("\t\t\tobject _msg;");
            sw.WriteLine("\t\t\tif(DbDataSerializer.Decode(data, typeof({0}), out _msg)){{", messageDef.m_TypeName);
            sw.WriteLine("\t\t\t\t{0} msg = _msg as {1};", messageDef.m_TypeName, messageDef.m_TypeName);

            sw.WriteLine("\t\t\t\ttry {");
            sw.WriteLine("\t\t\t\t  using (MySqlCommand cmd = new MySqlCommand()) {");
            sw.WriteLine("\t\t\t\t    cmd.Connection = DBConn.MySqlConn;");
            sw.WriteLine("\t\t\t\t    cmd.CommandType = CommandType.StoredProcedure;");
            sw.WriteLine("\t\t\t\t    cmd.CommandText = \"Save{0}\";",messageDef.m_TypeName);
            sw.WriteLine("\t\t\t\t    MySqlParameter inputParam;");
            sw.WriteLine("\t\t\t\t    inputParam = new MySqlParameter(\"@_IsValid\", MySqlDbType.Bit);");
            sw.WriteLine("\t\t\t\t    inputParam.Direction = ParameterDirection.Input;");
            sw.WriteLine("\t\t\t\t    inputParam.Value = isValid;");
            sw.WriteLine("\t\t\t\t    cmd.Parameters.Add(inputParam);");
            sw.WriteLine("\t\t\t\t    inputParam = new MySqlParameter(\"@_DataVersion\", MySqlDbType.Int32);");
            sw.WriteLine("\t\t\t\t    inputParam.Direction = ParameterDirection.Input;");
            sw.WriteLine("\t\t\t\t    inputParam.Value = dataVersion;");
            sw.WriteLine("\t\t\t\t    cmd.Parameters.Add(inputParam);");
            foreach (MemberDef memberDef in messageDef.m_Members) {
              string mysqlClientType = GetMySqlClientType(memberDef.m_TypeName);
              sw.WriteLine("\t\t\t\t    inputParam = new MySqlParameter(\"@_{0}\", {1});", memberDef.m_MemberName, mysqlClientType);
              sw.WriteLine("\t\t\t\t    inputParam.Direction = ParameterDirection.Input;");
              sw.WriteLine("\t\t\t\t    inputParam.Value = msg.{0};", memberDef.m_MemberName);
              string sqlType = GetSqlType(memberDef.m_TypeName);
              if (0 == sqlType.CompareTo("varchar")) {
            int size;
            if (memberDef.m_MaxSize > 0) {
              size = memberDef.m_MaxSize;
            } else {
              size = m_DefVarcharSize;
            }
            sw.WriteLine("\t\t\t\t    inputParam.Size = {0};", size);
              }
              sw.WriteLine("\t\t\t\t    cmd.Parameters.Add(inputParam);");
            }
            sw.WriteLine("\t\t\t\t    cmd.ExecuteNonQuery();");
            sw.WriteLine("\t\t\t\t  }");
            sw.WriteLine("\t\t\t\t} catch (Exception ex) {");
            sw.WriteLine("\t\t\t\t  DBConn.Close();");
            sw.WriteLine("\t\t\t\t  throw ex;");
            sw.WriteLine("\t\t\t\t}");

            sw.WriteLine("\t\t\t}");
            sw.WriteLine("\t\t}");
            sw.WriteLine();
              } catch (Exception ex) {
            Console.WriteLine(ex);
              }
        }
Esempio n. 4
0
        private void GenMessageWrap(MessageDef messageDef, TextWriter sw)
        {
            if (messageDef.m_EnumTypes.Count > 0 || messageDef.m_Messages.Count > 0) {
            Console.WriteLine("[*** Warning ***] message {0} have inner enum or message, only simple message can wrap !!!", messageDef.m_TypeName);
              }
              try {
            sw.WriteLine();
            sw.WriteLine("namespace GameFramework");
            sw.WriteLine("{");
            sw.WriteLine("\tpublic sealed partial class {0}", messageDef.m_WrapName);
            sw.WriteLine("\t{");
            sw.WriteLine();
            sw.WriteLine("\t\tpublic bool Modified");
            sw.WriteLine("\t\t{");
            sw.WriteLine("\t\t\tget{ return m_Modified;}");
            sw.WriteLine("\t\t\tset{ m_Modified = value;}");
            sw.WriteLine("\t\t}");
            sw.WriteLine("\t\tpublic bool Deleted");
            sw.WriteLine("\t\t{");
            sw.WriteLine("\t\t\tget{ return m_Deleted;}");
            sw.WriteLine("\t\t\tset{ m_Deleted = value;}");
            sw.WriteLine("\t\t}");
            sw.WriteLine();
            sw.WriteLine("\t\tpublic List<string> PrimaryKeys");
            sw.WriteLine("\t\t{");
            sw.WriteLine("\t\t\tget{ return m_PrimaryKeys;}");
            sw.WriteLine("\t\t}");
            sw.WriteLine("\t\tpublic List<string> ForeignKeys");
            sw.WriteLine("\t\t{");
            sw.WriteLine("\t\t\tget{ return m_ForeignKeys;}");
            sw.WriteLine("\t\t}");
            sw.WriteLine();
            foreach (MemberDef memberDef in messageDef.m_Members) {
              if (null != FindMessageDef(memberDef.m_TypeName)) {
            Console.WriteLine("[*** Warning ***] message {0} use other message, only simple message can wrap !!!", messageDef.m_TypeName);
              }
              string callOnUpdated = "OnFieldUpdated()";
              bool isSpecial = false;
              TypeConverterDef converter;
              if (m_TypeConverters.TryGetValue(memberDef.m_TypeName, out converter)) {
            if (memberDef.m_IsPrimaryKey || memberDef.m_IsForeignKey) {
              callOnUpdated = string.Format("On{0}Updated()", memberDef.m_MemberName);
            }
            isSpecial = converter.m_IsSpecial;
            if (isSpecial) {
              sw.WriteLine(IndentCode("\t\t", converter.m_CrudCode), memberDef.m_MemberName, callOnUpdated);
            } else {
              sw.WriteLine("\t\tpublic {0} {1}", memberDef.m_TypeName, memberDef.m_MemberName);
              sw.WriteLine("\t\t{");
              sw.WriteLine("\t\t\tget{{return m_{0};}}", memberDef.m_MemberName);
              sw.WriteLine("\t\t\tset");
              sw.WriteLine("\t\t\t{");
              sw.WriteLine("\t\t\t\tm_{0} = value;", memberDef.m_MemberName);
              sw.WriteLine("\t\t\t\t{0};", callOnUpdated);
              sw.WriteLine("\t\t\t}");
              sw.WriteLine("\t\t}");
            }
              } else {
            sw.WriteLine("\t\tpublic {0} {1}", memberDef.m_TypeName, memberDef.m_MemberName);
            sw.WriteLine("\t\t{");
            sw.WriteLine("\t\t\tget{{return m_{0}.{1};}}", messageDef.m_TypeName, memberDef.m_MemberName);
            sw.WriteLine("\t\t\tset");
            sw.WriteLine("\t\t\t{");
            sw.WriteLine("\t\t\t\tm_{0}.{1} = value;", messageDef.m_TypeName, memberDef.m_MemberName);
            if (!(memberDef.m_IsPrimaryKey || memberDef.m_IsForeignKey)) {
              sw.WriteLine("\t\t\t\t{0};", callOnUpdated);
            } else {
              if (memberDef.m_IsPrimaryKey) {
                sw.WriteLine("\t\t\t\t{0};", "OnPrimaryKeyUpdated()");
              }
              if (memberDef.m_IsForeignKey) {
                sw.WriteLine("\t\t\t\t{0};", "OnForeignKeyUpdated()");
              }
            }
            sw.WriteLine("\t\t\t}");
            sw.WriteLine("\t\t}");
              }
            }
            sw.WriteLine();
            sw.WriteLine("\t\tpublic {0} ToProto()", messageDef.m_TypeName);
            sw.WriteLine("\t\t{");

            foreach (MemberDef memberDef in messageDef.m_Members) {
              TypeConverterDef converter;
              if (m_TypeConverters.TryGetValue(memberDef.m_TypeName, out converter)) {
            sw.WriteLine(IndentCode("\t\t\t", converter.m_Logic2MessageCode), messageDef.m_TypeName, memberDef.m_MemberName);
              }
            }

            sw.WriteLine("\t\t\treturn m_{0};", messageDef.m_TypeName);
            sw.WriteLine("\t\t}");
            sw.WriteLine("\t\tpublic void FromProto({0} proto)", messageDef.m_TypeName);
            sw.WriteLine("\t\t{");
            sw.WriteLine("\t\t\tm_{0} = proto;", messageDef.m_TypeName);
            sw.WriteLine("\t\t\tUpdatePrimaryKeys();");
            sw.WriteLine("\t\t\tUpdateForeignKeys();");

            foreach (MemberDef memberDef in messageDef.m_Members) {
              TypeConverterDef converter;
              if (m_TypeConverters.TryGetValue(memberDef.m_TypeName, out converter)) {
            sw.WriteLine(IndentCode("\t\t\t", converter.m_Message2LogicCode), messageDef.m_TypeName, memberDef.m_MemberName);
              }
            }

            sw.WriteLine("\t\t}");

            foreach (MemberDef memberDef in messageDef.m_Members) {
              TypeConverterDef converter;
              if (m_TypeConverters.TryGetValue(memberDef.m_TypeName, out converter)) {
            if (memberDef.m_IsPrimaryKey || memberDef.m_IsForeignKey) {
              sw.WriteLine();
              sw.WriteLine("\t\tprivate void On{0}Updated()", memberDef.m_MemberName);
              sw.WriteLine("\t\t{");
              sw.WriteLine("\t\t\tm_Modified = true;");
              if (memberDef.m_IsPrimaryKey) {
                sw.WriteLine(IndentCode("\t\t\t", converter.m_Logic2MessageCode), messageDef.m_TypeName, memberDef.m_MemberName);
                sw.WriteLine("\t\t\tUpdatePrimaryKeys();");
              } else if (memberDef.m_IsForeignKey) {
                sw.WriteLine(IndentCode("\t\t\t", converter.m_Logic2MessageCode), messageDef.m_TypeName, memberDef.m_MemberName);
                sw.WriteLine("\t\t\tUpdateForeignKeys();");
              }
              sw.WriteLine("\t\t}");
            }
              }
            }

            sw.WriteLine();
            sw.WriteLine("\t\tprivate void OnFieldUpdated()");
            sw.WriteLine("\t\t{");
            sw.WriteLine("\t\t\tm_Modified = true;");
            sw.WriteLine("\t\t}");

            sw.WriteLine();
            sw.WriteLine("\t\tprivate void OnPrimaryKeyUpdated()");
            sw.WriteLine("\t\t{");
            sw.WriteLine("\t\t\tm_Modified = true;");
            sw.WriteLine("\t\t\tUpdatePrimaryKeys();");
            sw.WriteLine("\t\t}");

            sw.WriteLine();
            sw.WriteLine("\t\tprivate void OnForeignKeyUpdated()");
            sw.WriteLine("\t\t{");
            sw.WriteLine("\t\t\tm_Modified = true;");
            sw.WriteLine("\t\t\tUpdateForeignKeys();");
            sw.WriteLine("\t\t}");

            sw.WriteLine();
            sw.WriteLine("\t\tprivate void UpdatePrimaryKeys()");
            sw.WriteLine("\t\t{");
            if (messageDef.m_PrimaryKeys.Count > 0) {
              sw.WriteLine("\t\t\tm_PrimaryKeys.Clear();");
              foreach (string key in messageDef.m_PrimaryKeys) {
            MemberDef memberDef = messageDef.GetMemberDef(key);
            if (memberDef.m_TypeName.Equals("string")) {
              sw.WriteLine("\t\t\tif (m_{0}.{1} != null) {2}", messageDef.m_TypeName, key, '{');
              sw.WriteLine("\t\t\t\tm_PrimaryKeys.Add(m_{0}.{1}.ToString());", messageDef.m_TypeName, key);
              sw.WriteLine("\t\t\t}");
            } else {
              sw.WriteLine("\t\t\tm_PrimaryKeys.Add(m_{0}.{1}.ToString());", messageDef.m_TypeName, key);
            }
              }
            }
            sw.WriteLine("\t\t}");
            sw.WriteLine();
            sw.WriteLine("\t\tprivate void UpdateForeignKeys()");
            sw.WriteLine("\t\t{");
            if (messageDef.m_ForeignKeys.Count > 0) {
              sw.WriteLine("\t\t\tm_ForeignKeys.Clear();");
              foreach (string key in messageDef.m_ForeignKeys) {
            MemberDef memberDef = messageDef.GetMemberDef(key);
            if (memberDef.m_TypeName.Equals("string")) {
              sw.WriteLine("\t\t\tif (m_{0}.{1} != null) {2}", messageDef.m_TypeName, key, '{');
              sw.WriteLine("\t\t\t\tm_ForeignKeys.Add(m_{0}.{1}.ToString());", messageDef.m_TypeName, key);
              sw.WriteLine("\t\t\t}");
            } else {
              sw.WriteLine("\t\t\tm_ForeignKeys.Add(m_{0}.{1}.ToString());", messageDef.m_TypeName, key);
            }
              }
            }
            sw.WriteLine("\t\t}");

            sw.WriteLine();
            sw.WriteLine("\t\tprivate bool m_Modified = false;");
            sw.WriteLine("\t\tprivate bool m_Deleted = false;");
            sw.WriteLine("\t\tprivate List<string> m_PrimaryKeys = new List<string>();");
            sw.WriteLine("\t\tprivate List<string> m_ForeignKeys = new List<string>();");
            sw.WriteLine("\t\tprivate {0} m_{1} = new {2}();", messageDef.m_TypeName, messageDef.m_TypeName, messageDef.m_TypeName);

            foreach (MemberDef memberDef in messageDef.m_Members) {
              TypeConverterDef converter;
              if (m_TypeConverters.TryGetValue(memberDef.m_TypeName, out converter)) {
            sw.WriteLine("\t\tprivate {0} m_{1} = new {0}();", memberDef.m_TypeName, memberDef.m_MemberName);
              }
            }

            sw.WriteLine();
            sw.WriteLine("\t}");
            sw.WriteLine("}");
              } catch (Exception ex) {
            Console.WriteLine(ex);
              }
        }
Esempio n. 5
0
 private void GenMessageProto(MessageDef messageDef, int indent, TextWriter sw)
 {
     const string c_Indents = "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
       string indentStr = c_Indents.Substring(0, indent);
       try {
     sw.WriteLine();
     sw.WriteLine("{0}message {1}", indentStr, messageDef.m_TypeName);
     sw.WriteLine("{0}{{", indentStr);
     foreach (var enumDefPair in messageDef.m_EnumTypes) {
       GenEnumTypeProto(enumDefPair.Value, indent + 1, sw);
     }
     foreach (var messageDefPair in messageDef.m_Messages) {
       GenMessageProto(messageDefPair.Value, indent + 1, sw);
     }
     foreach (MemberDef memberDef in messageDef.m_Members) {
       string type = GetProtoType(memberDef.m_TypeName);
       if (null != memberDef.m_Default) {
     sw.WriteLine("{0}\t{1} {2} {3} = {4}[default = {5}];", indentStr, memberDef.m_Modifier, type, memberDef.m_MemberName, memberDef.m_Order, memberDef.m_Default);
       } else {
     sw.WriteLine("{0}\t{1} {2} {3} = {4};", indentStr, memberDef.m_Modifier, type, memberDef.m_MemberName, memberDef.m_Order);
       }
     }
     sw.WriteLine("{0}}}", indentStr);
       } catch (Exception ex) {
     Console.WriteLine(ex);
       }
 }
Esempio n. 6
0
        private void GenMessageLoadSingle(MessageDef messageDef, TextWriter sw)
        {
            try {
            sw.WriteLine();
            sw.WriteLine("\t\tprivate static GeneralRecordData LoadSingle{0}(List<string> primaryKeys)", messageDef.m_TypeName);
            sw.WriteLine("\t\t{");
            sw.WriteLine("\t\t\tGeneralRecordData ret = null;");
            if (messageDef.m_PrimaryKeys.Count > 0) {
              sw.WriteLine("\t\t\ttry {");
              sw.WriteLine("\t\t\t  using (MySqlCommand cmd = new MySqlCommand()) {");
              sw.WriteLine("\t\t\t    cmd.Connection = DBConn.MySqlConn;");
              sw.WriteLine("\t\t\t    cmd.CommandType = CommandType.StoredProcedure;");
              sw.WriteLine("\t\t\t    cmd.CommandText = \"LoadSingle{0}\";", messageDef.m_TypeName);
              sw.WriteLine("\t\t\t    if(primaryKeys.Count != {0})", messageDef.m_PrimaryKeys.Count);
              sw.WriteLine("\t\t\t\t    throw new Exception(\"primary key number don't match !!!\");");
              sw.WriteLine("\t\t\t    MySqlParameter inputParam;");
              int ix = 0;
              foreach (MemberDef memberDef in messageDef.m_Members) {
            if (memberDef.m_IsPrimaryKey) {
              string mysqlClientType = GetMySqlClientType(memberDef.m_TypeName);
              sw.WriteLine("\t\t\t    inputParam = new MySqlParameter(\"@_{0}\", {1});", memberDef.m_MemberName, mysqlClientType);
              sw.WriteLine("\t\t\t    inputParam.Direction = ParameterDirection.Input;");
              string sqlType = GetSqlType(memberDef.m_TypeName);
              if (0 == sqlType.CompareTo("varchar")) {
                int size;
                if (memberDef.m_MaxSize > 0) {
                  size = memberDef.m_MaxSize;
                } else {
                  size = m_DefVarcharSize;
                }
                sw.WriteLine("\t\t\t    inputParam.Value = primaryKeys[{0}];", ix);
                sw.WriteLine("\t\t\t    inputParam.Size = {0};", size);
              } else {
                sw.WriteLine("\t\t\t    inputParam.Value = ({0})Convert.ChangeType(primaryKeys[{1}],typeof({2}));", memberDef.m_TypeName, ix, memberDef.m_TypeName);
              }
              sw.WriteLine("\t\t\t    cmd.Parameters.Add(inputParam);");
              ix++;
            }
              }
              sw.WriteLine("\t\t\t    using (DbDataReader reader = cmd.ExecuteReader()) {");
              sw.WriteLine("\t\t\t      if (reader.Read()) {");
              sw.WriteLine("\t\t\t        ret = new GeneralRecordData();");
              sw.WriteLine("\t\t\t        object val;");
              sw.WriteLine("\t\t\t        {0} msg = new {1}();", messageDef.m_TypeName, messageDef.m_TypeName);
              foreach (MemberDef memberDef in messageDef.m_Members) {
            sw.WriteLine("\t\t\t        val = reader[\"{0}\"];", memberDef.m_MemberName);
            sw.WriteLine("\t\t\t        msg.{0} = ({1})val;", memberDef.m_MemberName, GetMessageType(memberDef.m_TypeName));
            if (memberDef.m_IsPrimaryKey) {
              sw.WriteLine("\t\t\t        ret.PrimaryKeys.Add(val.ToString());");
            } else if (memberDef.m_IsForeignKey) {
              sw.WriteLine("\t\t\t        ret.ForeignKeys.Add(val.ToString());");
            }
              }
              sw.WriteLine("\t\t\t        ret.DataVersion = (int)reader[\"DataVersion\"];");
              sw.WriteLine("\t\t\t        ret.Data = DbDataSerializer.Encode(msg);");
              sw.WriteLine("\t\t\t      }");
              sw.WriteLine("\t\t\t    }");
              sw.WriteLine("\t\t\t  }");
              sw.WriteLine("\t\t\t} catch (Exception ex) {");
              sw.WriteLine("\t\t\t  DBConn.Close();");
              sw.WriteLine("\t\t\t  throw ex;");
              sw.WriteLine("\t\t\t}");
            }
            sw.WriteLine("\t\t\treturn ret;");

            sw.WriteLine("\t\t}");
            sw.WriteLine();
              } catch (Exception ex) {
            Console.WriteLine(ex);
              }
        }
Esempio n. 7
0
        private void GenMessageLoadAll(MessageDef messageDef, TextWriter sw)
        {
            try {
            sw.WriteLine();
            sw.WriteLine("\t\tprivate static List<GeneralRecordData> LoadAll{0}(int start, int count)", messageDef.m_TypeName);
            sw.WriteLine("\t\t{");
            sw.WriteLine("\t\t\tList<GeneralRecordData> ret = new List<GeneralRecordData>();");
            sw.WriteLine("\t\t\ttry {");
            sw.WriteLine("\t\t\t  using (MySqlCommand cmd = new MySqlCommand()) {");
            sw.WriteLine("\t\t\t    cmd.Connection = DBConn.MySqlConn;");
            sw.WriteLine("\t\t\t    cmd.CommandType = CommandType.StoredProcedure;");
            sw.WriteLine("\t\t\t    cmd.CommandText = \"LoadAll{0}\";", messageDef.m_TypeName);

            sw.WriteLine("\t\t\t    MySqlParameter inputParam;");
            sw.WriteLine("\t\t\t    inputParam = new MySqlParameter(\"@_Start\", MySqlDbType.Int32);");
            sw.WriteLine("\t\t\t    inputParam.Direction = ParameterDirection.Input;");
            sw.WriteLine("\t\t\t    inputParam.Value = start;");
            sw.WriteLine("\t\t\t    cmd.Parameters.Add(inputParam);");
            sw.WriteLine("\t\t\t    inputParam = new MySqlParameter(\"@_Count\", MySqlDbType.Int32);");
            sw.WriteLine("\t\t\t    inputParam.Direction = ParameterDirection.Input;");
            sw.WriteLine("\t\t\t    inputParam.Value = count;");
            sw.WriteLine("\t\t\t    cmd.Parameters.Add(inputParam);");

            sw.WriteLine("\t\t\t    using (DbDataReader reader = cmd.ExecuteReader()) {");
            sw.WriteLine("\t\t\t      while (reader.Read()) {");
            sw.WriteLine("\t\t\t        GeneralRecordData record = new GeneralRecordData();");
            sw.WriteLine("\t\t\t        object val;");
            sw.WriteLine("\t\t\t        {0} msg = new {1}();", messageDef.m_TypeName, messageDef.m_TypeName);
            foreach (MemberDef memberDef in messageDef.m_Members) {
              sw.WriteLine("\t\t\t        val = reader[\"{0}\"];", memberDef.m_MemberName);
              sw.WriteLine("\t\t\t        msg.{0} = ({1})val;", memberDef.m_MemberName, GetMessageType(memberDef.m_TypeName));
              if (memberDef.m_IsPrimaryKey) {
            sw.WriteLine("\t\t\t        record.PrimaryKeys.Add(val.ToString());");
              } else if (memberDef.m_IsForeignKey) {
            sw.WriteLine("\t\t\t        record.ForeignKeys.Add(val.ToString());");
              }
            }
            sw.WriteLine("\t\t\t        record.DataVersion = (int)reader[\"DataVersion\"];");
            sw.WriteLine("\t\t\t        record.Data = DbDataSerializer.Encode(msg);");
            sw.WriteLine("\t\t\t        ret.Add(record);");
            sw.WriteLine("\t\t\t      }");
            sw.WriteLine("\t\t\t    }");
            sw.WriteLine("\t\t\t  }");
            sw.WriteLine("\t\t\t} catch (Exception ex) {");
            sw.WriteLine("\t\t\t  DBConn.Close();");
            sw.WriteLine("\t\t\t  throw ex;");
            sw.WriteLine("\t\t\t}");
            sw.WriteLine("\t\t\treturn ret;");

            sw.WriteLine("\t\t}");
            sw.WriteLine();
              } catch (Exception ex) {
            Console.WriteLine(ex);
              }
        }
Esempio n. 8
0
        private void GenMessageBatchSave(MessageDef messageDef, TextWriter sw)
        {
            try {
            sw.WriteLine();
            sw.WriteLine("\t\tprivate static int BatchSave{0}(List<bool> validList, List<byte[]> dataList, int dataVersion)", messageDef.m_TypeName);
            sw.WriteLine("\t\t{");
            sw.WriteLine("\t\t\tif (dataList.Count <= 0) {");
            sw.WriteLine("\t\t\t  return 0;");
            sw.WriteLine("\t\t\t}");
            sw.WriteLine("\t\t\tStringBuilder sbSql = new StringBuilder(\"insert into {0} \", 4096); ", messageDef.m_TypeName);
            StringBuilder sbMember = new StringBuilder();
            foreach (MemberDef memberDef in messageDef.m_Members) {
              sbMember.Append(memberDef.m_MemberName);
              sbMember.Append(',');
            }
            sbMember.Remove(sbMember.Length - 1, 1);
            sw.WriteLine("\t\t\tsbSql.Append(\"(IsValid,DataVersion,{0})\");", sbMember.ToString());
            sw.WriteLine("\t\t\tsbSql.Append(\" values \");", sbMember.ToString());
            sw.WriteLine("\t\t\tfor (int i = 0; i < validList.Count; ++i) {");
            sw.WriteLine("\t\t\t  Byte valid = 1;");
            sw.WriteLine("\t\t\t  if (validList[i] == false) {");
            sw.WriteLine("\t\t\t    valid = 0;");
            sw.WriteLine("\t\t\t  }");
            sw.WriteLine("\t\t\t  StringBuilder sbValue = new StringBuilder();");
            sw.WriteLine("\t\t\t  sbValue.AppendFormat(\"({0},{1}\", valid, dataVersion);");
            sw.WriteLine("\t\t\t  object _msg;");
            sw.WriteLine("\t\t\t  if (DbDataSerializer.Decode(dataList[i], typeof({0}), out _msg)) {{", messageDef.m_TypeName);
            sw.WriteLine("\t\t\t    {0} msg = _msg as {0};", messageDef.m_TypeName);
            foreach (MemberDef memberDef in messageDef.m_Members) {
              sw.WriteLine("\t\t\t    sbValue.Append(',');");
              if (memberDef.m_TypeName.Equals("bool")) {
             sw.WriteLine("\t\t\t    sbValue.Append(msg.{0});", memberDef.m_MemberName);
              } else {
             sw.WriteLine("\t\t\t    sbValue.AppendFormat(\"\'{{0}}\'\", msg.{0});", memberDef.m_MemberName);
              }
            }
            sw.WriteLine("\t\t\t    sbValue.Append(')');");
            sw.WriteLine("\t\t\t    sbSql.Append(sbValue.ToString());");
            sw.WriteLine("\t\t\t    sbSql.Append(',');");
            sw.WriteLine("\t\t\t  }");
            sw.WriteLine("\t\t\t}");
            sw.WriteLine("\t\t\tsbSql.Remove(sbSql.Length - 1, 1);");
            sw.WriteLine("\t\t\tsbSql.Append(\" on duplicate key update \");");
            sw.WriteLine("\t\t\tsbSql.AppendFormat(\" IsValid = if(DataVersion < {0}, values(IsValid), IsValid),\", dataVersion);");
            foreach (MemberDef memberDef in messageDef.m_Members) {
              sw.WriteLine("\t\t\tsbSql.AppendFormat(\" {0} = if(DataVersion < {{0}}, values({0}), {0}),\", dataVersion);", memberDef.m_MemberName);
            }
            sw.WriteLine("\t\t\tsbSql.AppendFormat(\" DataVersion = if(DataVersion < {0}, {0}, DataVersion),\", dataVersion);");
            sw.WriteLine("\t\t\tsbSql.Remove(sbSql.Length - 1, 1);");

            sw.WriteLine("\t\t\tstring statement = sbSql.ToString();");
            sw.WriteLine("\t\t\tint count = 0;");
            sw.WriteLine("\t\t\ttry {");
            sw.WriteLine("\t\t\t  using (MySqlCommand cmd = new MySqlCommand()) {");
            sw.WriteLine("\t\t\t    cmd.Connection = DBConn.MySqlConn;");
            sw.WriteLine("\t\t\t    cmd.CommandType = CommandType.Text;");
            sw.WriteLine("\t\t\t    cmd.CommandText = statement;");
            sw.WriteLine("\t\t\t    count = cmd.ExecuteNonQuery();");
            sw.WriteLine("\t\t\t  }");
            sw.WriteLine("\t\t\t} catch (Exception ex) {");
            sw.WriteLine("\t\t\t  if (dataList.Count < 200) {");
            sw.WriteLine("\t\t\t    LogSys.Log(LOG_TYPE.ERROR, \"Error Sql statement:{0}\", statement);");
            sw.WriteLine("\t\t\t  }");
            sw.WriteLine("\t\t\t  DBConn.Close();");
            sw.WriteLine("\t\t\t  throw ex;");
            sw.WriteLine("\t\t\t}");
            sw.WriteLine("\t\t\treturn count;");
            sw.WriteLine("\t\t}");
            sw.WriteLine();
              } catch (Exception ex) {
            Console.WriteLine(ex);
              }
        }
Esempio n. 9
0
        private static string ParseMessage(string dslFile, FunctionData funcData, string defGroupName, bool isInnerMessage, SortedDictionary<string, MessageDef> messages, ref bool haveError)
        {
            string typeName = null;
              if (null != funcData) {
            CallData callData = funcData.Call;
            if (null != callData && callData.GetParamNum() >= 1) {
              string groupName;
              typeName = callData.GetParamId(0);
              if (callData.GetParamNum() > 1) {
            groupName = callData.GetParamId(1);
              } else {
            groupName = defGroupName;
              }

              MessageDef messageDef = new MessageDef();
              messageDef.m_TypeName = typeName;
              messageDef.m_WrapName = typeName + "Wrap";
              messageDef.m_GroupName = groupName;
              messageDef.m_DontGenEnum = isInnerMessage;
              messageDef.m_DontGenDB = isInnerMessage;
              if (messages.ContainsKey(typeName)) {
            messages[typeName] = messageDef;
              } else {
            messages.Add(typeName, messageDef);
              }

              int nextOrder = 1;
              foreach (ISyntaxComponent comp in funcData.Statements) {
            CallData field = comp as CallData;
            if (null != field) {
              if (field.GetId() == "option") {
                if (field.GetParamId(0) == "dontgenenum")
                  messageDef.m_DontGenEnum = true;
                else if (field.GetParamId(0) == "dontgendb")
                  messageDef.m_DontGenDB = true;
              } else if (field.GetId() == "enumvalue") {
                messageDef.m_EnumValue = field.GetParamId(0);
              } else if (field.GetId() == "wrapname") {
                messageDef.m_WrapName = field.GetParamId(0);
              } else if (field.GetId() == "member") {
                if (field.GetParamNum() >= 3) {
                  MemberDef memberDef = new MemberDef();
                  memberDef.m_MemberName = field.GetParamId(0);
                  memberDef.m_TypeName = field.GetParamId(1);
                  memberDef.m_Modifier = field.GetParamId(2);
                  memberDef.m_Order = nextOrder++;
                  messageDef.m_Members.Add(memberDef);
                  messageDef.m_ColumnNames.Add(memberDef.m_MemberName);
                } else {
                  LogSystem.Error("member {0} must have name、type and modifier ! line {1} file {2}", comp.ToScriptString(), comp.GetLine(), dslFile);
                  haveError = true;
                }
              }
            } else {
              FunctionData customCode = comp as FunctionData;
              if (null != customCode) {
                if (customCode.GetId() == "enum") {
                  ParseEnum(dslFile, customCode, messageDef.m_GroupName, messageDef.m_EnumTypes, ref haveError);
                } if (customCode.GetId() == "message") {
                  ParseMessage(dslFile, customCode, messageDef.m_GroupName, true, messageDef.m_Messages, ref haveError);
                } if (customCode.GetId() == "member") {
                  CallData customField = customCode.Call;
                  if (null != customField && customField.GetParamNum() >= 3) {
                    MemberDef memberDef = new MemberDef();
                    memberDef.m_MemberName = customField.GetParamId(0);
                    memberDef.m_TypeName = customField.GetParamId(1);
                    memberDef.m_Modifier = customField.GetParamId(2);
                    memberDef.m_Order = nextOrder++;
                    messageDef.m_Members.Add(memberDef);
                    messageDef.m_ColumnNames.Add(memberDef.m_MemberName);

                    foreach (ISyntaxComponent comp2 in customCode.Statements) {
                      ValueData val = comp2 as ValueData;
                      if (null != val) {
                        if (val.GetId() == "primarykey") {
                          memberDef.m_IsPrimaryKey = true;
                          messageDef.m_PrimaryKeys.Add(memberDef.m_MemberName);
                        } else if (val.GetId() == "foreignkey") {
                          memberDef.m_IsForeignKey = true;
                          messageDef.m_ForeignKeys.Add(memberDef.m_MemberName);
                        }
                      } else {
                        CallData item = comp2 as CallData;
                        if (null != item) {
                          if (item.GetId() == "default") {
                            memberDef.m_Default = item.GetParamId(0);
                          } else if (item.GetId() == "maxsize") {
                            memberDef.m_MaxSize = int.Parse(item.GetParamId(0));
                          } else if (item.GetId() == "primarykey") {
                            memberDef.m_IsPrimaryKey = true;
                            messageDef.m_PrimaryKeys.Add(memberDef.m_MemberName);
                          } else if (item.GetId() == "foreignkey") {
                            memberDef.m_IsForeignKey = true;
                            messageDef.m_ForeignKeys.Add(memberDef.m_MemberName);
                          }
                        } else {
                          LogSystem.Error("message member options {0} must end with ';' ! line {1} file {2}", comp2.ToScriptString(), comp2.GetLine(), dslFile);
                          haveError = true;
                        }
                      }
                    }
                  }
                }
              } else {
                LogSystem.Error("message member {0} must have params and end with ';' ! line {1} file {2}", comp.ToScriptString(), comp.GetLine(), dslFile);
                haveError = true;
              }
            }
              }
            } else {
              LogSystem.Error("message {0} must have 1 or 2 params (name and group) ! line {1} file {2}", funcData.ToScriptString(), funcData.GetLine(), dslFile);
              haveError = true;
            }
              }
              return typeName;
        }