//------------------------------------------------------------------------------------- void Base::onDestroyEntity(bool deleteFromDB, bool writeToDB) { if(deleteFromDB && hasDB()) { Components::COMPONENTS& cts = Components::getSingleton().getComponents(DBMGR_TYPE); Components::ComponentInfos* dbmgrinfos = NULL; if(cts.size() > 0) dbmgrinfos = &(*cts.begin()); if(dbmgrinfos == NULL || dbmgrinfos->pChannel == NULL || dbmgrinfos->cid == 0) { ERROR_MSG(fmt::format("{}::onDestroyEntity({}): writeToDB not found dbmgr!\n", this->scriptName(), this->id())); return; } Network::Bundle* pBundle = Network::Bundle::createPoolObject(); (*pBundle).newMessage(DbmgrInterface::removeEntity); (*pBundle) << this->dbInterfaceIndex(); (*pBundle) << g_componentID; (*pBundle) << this->id(); (*pBundle) << this->dbid(); (*pBundle) << this->pScriptModule()->getUType(); dbmgrinfos->pChannel->send(pBundle); this->hasDB(false); return; } if(writeToDB) { // 这个行为默认会处理 // this->writeToDB(NULL); } else { this->hasDB(false); } shouldAutoArchive_ = 0; shouldAutoBackup_ = 0; }
//------------------------------------------------------------------------------------- void Base::onDestroyEntity(bool deleteFromDB, bool writeToDB) { if(deleteFromDB && hasDB()) { Components::COMPONENTS& cts = Components::getSingleton().getComponents(DBMGR_TYPE); Components::ComponentInfos* dbmgrinfos = NULL; if(cts.size() > 0) dbmgrinfos = &(*cts.begin()); if(dbmgrinfos == NULL || dbmgrinfos->pChannel == NULL || dbmgrinfos->cid == 0) { ERROR_MSG(boost::format("%1%::onDestroyEntity(%2%): writeToDB not found dbmgr!\n") % this->scriptName() % this->id()); return; } Mercury::Bundle* pBundle = Mercury::Bundle::ObjPool().createObject(); (*pBundle).newMessage(DbmgrInterface::removeEntity); (*pBundle) << g_componentID; (*pBundle) << this->id(); (*pBundle) << this->dbid(); (*pBundle) << this->scriptModule()->getUType(); (*pBundle).send(Baseapp::getSingleton().networkInterface(), dbmgrinfos->pChannel); Mercury::Bundle::ObjPool().reclaimObject(pBundle); this->hasDB(false); return; } if(writeToDB) { // 这个行为默认会处理 // this->writeToDB(NULL); } else { this->hasDB(false); } shouldAutoArchive_ = 0; shouldAutoBackup_ = 0; }
//------------------------------------------------------------------------------------- void Base::onCellWriteToDBCompleted() { PyObject* pyResult = PyObject_CallMethod(this, const_cast<char*>("onPreArchive"), const_cast<char*>("")); if(pyResult != NULL) Py_DECREF(pyResult); else PyErr_PrintEx(0); hasDB(true); onWriteToDB(); isArchiveing_ = false; MemoryStream* s = MemoryStream::ObjPool().createObject(); addPersistentsDataToStream(ED_FLAG_ALL, s); Components::COMPONENTS cts = Components::getSingleton().getComponents(DBMGR_TYPE); Components::ComponentInfos* dbmgrinfos = NULL; if(cts.size() > 0) dbmgrinfos = &(*cts.begin()); if(dbmgrinfos == NULL || dbmgrinfos->pChannel == NULL || dbmgrinfos->cid == 0) { ERROR_MSG("Base::onCellWriteToDBCompleted: not found dbmgr!\n"); return; } Mercury::Bundle bundle; bundle.newMessage(DbmgrInterface::writeEntity); bundle << this->getID(); bundle << this->getScriptModule()->getUType(); bundle.append(*s); bundle.send(Baseapp::getSingleton().getNetworkInterface(), dbmgrinfos->pChannel); MemoryStream::ObjPool().reclaimObject(s); }