/// <summary> /// 构造函数 /// </summary> /// <param name="modifier">字段修饰符</param> /// <param name="typeCode">字段类型</param> /// <param name="name">字段名字</param> /// <param name="nestTypeName">嵌套类型的名字</param> private fieldDescriptor(EFieldModifier modifier, ProtoTypeCode typeCode, string name, string nestedTypeName = "") { this.modifier = modifier; this.typeCode = typeCode; this.name = name; wireType = luaProtoHelper.getWireType(typeCode); this.nestedTypeName = nestedTypeName; }
/// <summary> /// 创建描述信息 /// </summary> /// <param name="modifier">字段修饰符</param> /// <param name="typeCode">字段类型</param> /// <param name="name">字段名字</param> /// <param name="nestedTypeName">嵌套类型的名字</param> /// <returns></returns> public static fieldDescriptor createDescriptor(EFieldModifier modifier, ProtoTypeCode typeCode, string name, string nestedTypeName = "") { if (modifier == EFieldModifier.none || typeCode == ProtoTypeCode.Empty || string.IsNullOrEmpty(name)) { return(null); } return(new fieldDescriptor(modifier, typeCode, name, nestedTypeName)); }
/// <summary> /// 创建值对象 /// </summary> /// <param name="modifier"></param> /// <returns></returns> public IFieldValue createValue(EFieldModifier modifier) { switch (modifier) { case EFieldModifier.required: return(new requiedFieldValue <T>()); case EFieldModifier.optional: return(new optionalFieldValue <T>()); case EFieldModifier.repeated: return(new repeatedFieldValue <T>()); default: return(null); } }
/// <summary> /// 初始化消息定义 /// </summary> static internal void init() { LuaTable protoCfgTbl = luaSvrManager.getInstance().LuaProtoDefTbl; if (protoCfgTbl == null) { return; } object key = 0; foreach (LuaTable.TablePair kvp in protoCfgTbl) { key = luaProtoHelper.regualarKey(kvp.key); if (key == null || kvp.value.GetType() != typeof(LuaTable)) { continue; } //LogSys.Log("***************************** << " + kvp.key.ToString() + " >> ***********************************"); //创建消息实体 var luaMsg = new luaMessage(key); //读取消息定义 var msgTbl = (LuaTable)kvp.value; foreach (LuaTable.TablePair field in msgTbl) { var fieldInfo = (LuaTable)field.value; if (fieldInfo == null) { continue; } int idx = (int)luaProtoHelper.regualarKey(field.key); EFieldModifier modifier = (EFieldModifier)luaProtoHelper.regualarKey(fieldInfo[1]); //类型信息 ProtoTypeCode typeCode = ProtoTypeCode.Empty; string nestedTypeName = null; if (fieldInfo[2].GetType() == typeof(double)) { typeCode = (ProtoTypeCode)luaProtoHelper.regualarKey(fieldInfo[2]); } else { typeCode = ProtoTypeCode.Type; nestedTypeName = (string)fieldInfo[2]; } string name = (string)fieldInfo[3]; //创建field var descriptor = fieldDescriptor.createDescriptor(modifier, typeCode, name, nestedTypeName); if (descriptor != null) { var info = fieldDataInfo.createFieldData(idx, descriptor); if (info != null) { luaMsg.addField(idx, info); } } //调试信息 string fieldLog = string.Format("idx={0}, modifier={1}, typeCode={2}[{3}], name={4}", idx, modifier, typeCode, nestedTypeName, name); //LogSys.Log(fieldLog); } //加入消息缓存 luaMessageCache.add(key, luaMsg); } }