public void createDataTypeFromStream(MemoryStream stream, bool canprint) { UInt16 utype = stream.readUint16(); string name = stream.readString(); string valname = stream.readString(); /* 有一些匿名类型,我们需要提供一个唯一名称放到datatypes中 如: <onRemoveAvatar> <Arg> ARRAY <of> INT8 </of> </Arg> </onRemoveAvatar> */ if(valname.Length == 0) valname = "Null_" + utype; if(canprint) Dbg.DEBUG_MSG("KBEngine::Client_onImportClientEntityDef: importAlias(" + name + ":" + valname + ":" + utype + ")!"); if(name == "FIXED_DICT") { KBEDATATYPE_FIXED_DICT datatype = new KBEDATATYPE_FIXED_DICT(); Byte keysize = stream.readUint8(); datatype.implementedBy = stream.readString(); while(keysize > 0) { keysize--; string keyname = stream.readString(); UInt16 keyutype = stream.readUint16(); datatype.dicttype[keyname] = keyutype; }; EntityDef.datatypes[valname] = datatype; } else if(name == "ARRAY") { UInt16 uitemtype = stream.readUint16(); KBEDATATYPE_ARRAY datatype = new KBEDATATYPE_ARRAY(); datatype.vtype = uitemtype; EntityDef.datatypes[valname] = datatype; } else { KBEDATATYPE_BASE val = null; EntityDef.datatypes.TryGetValue(name, out val); EntityDef.datatypes[valname] = val; } EntityDef.id2datatypes[utype] = EntityDef.datatypes[valname]; // 将用户自定义的类型补充到映射表中 EntityDef.datatype2id[valname] = utype; }
public void createDataTypeFromStream(MemoryStream stream, bool canprint) { UInt16 utype = stream.readUint16(); string name = stream.readString(); string valname = stream.readString(); if(canprint) Dbg.DEBUG_MSG("KBEngine::Client_onImportClientEntityDef: importAlias(" + name + ":" + valname + ")!"); if(valname == "FIXED_DICT") { KBEDATATYPE_FIXED_DICT datatype = new KBEDATATYPE_FIXED_DICT(); Byte keysize = stream.readUint8(); datatype.implementedBy = stream.readString(); while(keysize > 0) { keysize--; string keyname = stream.readString(); UInt16 keyutype = stream.readUint16(); datatype.dicttype[keyname] = keyutype; }; EntityDef.datatypes[name] = datatype; } else if(valname == "ARRAY") { UInt16 uitemtype = stream.readUint16(); KBEDATATYPE_ARRAY datatype = new KBEDATATYPE_ARRAY(); datatype.type = uitemtype; EntityDef.datatypes[name] = datatype; } else { KBEDATATYPE_BASE val = null; EntityDef.datatypes.TryGetValue(valname, out val); EntityDef.datatypes[name] = val; } EntityDef.iddatatypes[utype] = EntityDef.datatypes[name]; EntityDef.datatype2id[name] = EntityDef.datatype2id[valname]; }