Exemplo n.º 1
0
 /// <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;
 }
Exemplo n.º 2
0
        /// <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));
        }
Exemplo n.º 3
0
        /// <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);
            }
        }
Exemplo n.º 4
0
        /// <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);
            }
        }