Пример #1
0
            public BuilderObjectCELSClass(CodeToolBase _codetool, int _fieldnumber, int _fieldindex, object _parent, IType _type, IType _parenttype) : base(_codetool, _fieldnumber, _fieldindex, _parent, _type, _parenttype)
            {
                mSelfObject = mCodeTool.GetCSLEObjectParmasByType(mFunType);
                if (mSelfObject == null)
                {
                    throw new InvalidOperationException("未能取得对象 " + ":" + mFunType.TypeForCLR.Name);
                }
                if (mParentType != null && mParentObject != null)
                {
                    mCodeTool.SetMember(mParentType, mFieldIndex, mSelfObject, mParentObject);
                }

                IType[] ttypes = mCodeTool.GetFieldTypes(mFunType);
                int     tindex = 1;

                for (int i = 0; i < ttypes.Length; i++)
                {
                    BuilderObjectBase tobj = BuilderObjectBase.GetMember(_codetool, ttypes[i], i, tindex++, mSelfObject, mFunType);
                    AddMember(tobj);
                }
            }
            private void BuildMember()
            {
                IType[] ttypes = mCodeTool.GetFieldTypes(mScriptType);
                int     tindex = 1;

                for (int i = 0; i < ttypes.Length; i++)
                {
                    BuilderObjectBase tobj = BuilderObjectBase.GetMember(mCodeTool, ttypes[i], i, tindex++, mScriptObject, mScriptType);
                    AddMember(tobj);
                }

                int tfieldnumber = mReader.ReadFieldHeader();

                while (tfieldnumber > 0)
                {
                    if (!Members.ContainsKey(tfieldnumber))
                    {
                        throw new InvalidOperationException("ProtoReaderMemberObject 未能从builder中找到对应的字段 fieldnumber:" + tfieldnumber);
                    }
                    BuilderObjectBase tprb = Members[tfieldnumber];
                    tprb.ReadMember(mReader);
                    tfieldnumber = mReader.ReadFieldHeader();
                }
            }