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; }
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; }
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); } }
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); } }
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); } }
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); } }
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); } }
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); } }
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; }