void BuildCacheCRC() { #ifdef ENABLE_DATABLOCK_CACHE SimDataBlockGroup* pGroup = Sim::getDataBlockGroup(); SimDataBlock* pDataBlock = 0; const U32 iCount = pGroup->size(); BitStream* stream = new InfiniteBitStream; U32 crc=0; for (U32 i = 0; i < iCount; i++) { pDataBlock = (SimDataBlock*)(*pGroup)[i]; pDataBlock->packData(stream); } //U32 crc = CRC::calculateCRCStream(stream); //Stream CRC doesn't seem reliable. FileStream* datablocksOut = FileStream::createAndOpen("ServerCRC.dmp", Torque::FS::File::Write ); if (datablocksOut==NULL) Con::errorf("### Datablock Cache: Unable to Build Server Datablock CRC Key File."); else { datablocksOut->writeBitStream(stream); datablocksOut->close(); crc=Con::getFileCRC("ServerCRC.dmp"); Con::deleteFile("ServerCRC.dmp"); } Con::setVariable("$ServerDatablockCacheCRC", Con::getuIntArg(crc)); Con::warnf("### Datablock Cache: Server Datablock CRC is %u",crc); delete stream; #endif }
void SimDataBlockEvent::pack(NetConnection *conn, BitStream *bstream) { #ifdef AFX_CAP_DATABLOCK_CACHE // AFX CODE BLOCK (db-cache) << ((GameConnection *)conn)->tempDisableStringBuffering(bstream); #endif // AFX CODE BLOCK (db-cache) >> SimDataBlock* obj; Sim::findObject(id,obj); GameConnection *gc = (GameConnection *) conn; if(bstream->writeFlag(gc->getDataBlockModifiedKey() < obj->getModifiedKey())) { if(obj->getModifiedKey() > gc->getMaxDataBlockModifiedKey()) gc->setMaxDataBlockModifiedKey(obj->getModifiedKey()); AssertFatal(obj, "SimDataBlockEvent:: Data blocks cannot be deleted"); bstream->writeInt(id - DataBlockObjectIdFirst,DataBlockObjectIdBitSize); S32 classId = obj->getClassId(conn->getNetClassGroup()); bstream->writeClassId(classId, NetClassTypeDataBlock, conn->getNetClassGroup()); bstream->writeInt(mIndex, DataBlockObjectIdBitSize); bstream->writeInt(mTotal, DataBlockObjectIdBitSize + 1); obj->packData(bstream); #ifdef TORQUE_DEBUG_NET bstream->writeInt(classId ^ DebugChecksum, 32); #endif } #ifdef AFX_CAP_DATABLOCK_CACHE // AFX CODE BLOCK (db-cache) << ((GameConnection *)conn)->restoreStringBuffering(bstream); #endif // AFX CODE BLOCK (db-cache) >> }
void SimDataBlockEvent::pack(NetConnection *conn, BitStream *bstream) { SimDataBlock* obj; Sim::findObject(id,obj); GameConnection *gc = (GameConnection *) conn; if(bstream->writeFlag(gc->getDataBlockModifiedKey() < obj->getModifiedKey())) { if(obj->getModifiedKey() > gc->getMaxDataBlockModifiedKey()) gc->setMaxDataBlockModifiedKey(obj->getModifiedKey()); AssertFatal(obj, "SimDataBlockEvent:: Data blocks cannot be deleted"); bstream->writeInt(id - DataBlockObjectIdFirst,DataBlockObjectIdBitSize); S32 classId = obj->getClassId(conn->getNetClassGroup()); bstream->writeClassId(classId, NetClassTypeDataBlock, conn->getNetClassGroup()); bstream->writeInt(mIndex, DataBlockObjectIdBitSize); bstream->writeInt(mTotal, DataBlockObjectIdBitSize + 1); obj->packData(bstream); #ifdef TORQUE_DEBUG_NET bstream->writeInt(classId ^ DebugChecksum, 32); #endif } }