bool NFActorModule::ExecuteEvent() { NFIActorMessage xMsg; bool bRet = false; bRet = mxQueue.TryPop(xMsg); while (bRet) { if (xMsg.msgType != NFIActorMessage::ACTOR_MSG_TYPE_COMPONENT && xMsg.xEndFuncptr != nullptr) { //Actor can be reused in ActorPool mode, so we don't release it. //>ReleaseActor(xMsg.nFormActor); ACTOR_PROCESS_FUNCTOR* pFun = xMsg.xEndFuncptr.get(); pFun->operator()(xMsg.nFormActor, xMsg.nMsgID, xMsg.data); NF_SHARE_PTR<NFIActor> xActor = mxActorMap.GetElement(xMsg.nFormActor); if (xActor) { if (xActor->GetNumQueuedMessages() <= 0) { int nActorID = xActor->GetAddress().AsInteger(); if (mxActorPool.find(nActorID) == mxActorPool.end()) { mxActorPool.insert(std::pair<int, int>(nActorID, 0)); } } } } bRet = mxQueue.TryPop(xMsg); } return true; }
int NFActorModule::RequireActor() { NF_SHARE_PTR<NFIActor> pActor = nullptr; if (mxActorPool.size() <= 0) { pActor = NF_SHARE_PTR<NFIActor>(NF_NEW NFActor(mFramework, this)); mxActorMap.AddElement(pActor->GetAddress().AsInteger(), pActor); return pActor->GetAddress().AsInteger(); } std::map<int, int>::iterator it = mxActorPool.begin(); int nActorID = it->first; mxActorPool.erase(it); return nActorID; }
bool NFActorModule::SendMsgToActor(const int nActorIndex, const int nEventID, const std::string& strArg) { NF_SHARE_PTR<NFIActor> pActor = GetActor(nActorIndex); if (nullptr != pActor) { NFIActorMessage xMessage; xMessage.msgType = NFIActorMessage::ACTOR_MSG_TYPE_COMPONENT; xMessage.data = strArg; xMessage.nMsgID = nEventID; xMessage.nFormActor = m_pMainActor->GetAddress().AsInteger(); return mFramework.Send(xMessage, m_pMainActor->GetAddress(), pActor->GetAddress()); } return false; }
bool NFCActorManager::SendMsgToActor( const int nActorIndex, const NFGUID& objectID, const int nEventID, const std::string& strArg) { NF_SHARE_PTR<NFIActor> pActor = GetActor(nActorIndex); if (nullptr != pActor) { NFIActorMessage xMessage; xMessage.eType = NFIActorMessage::EACTOR_EVENT_MSG; xMessage.data = strArg; xMessage.nSubMsgID = nEventID; xMessage.nFormActor = m_pMainActor->GetAddress().AsInteger(); xMessage.self = objectID; return m_pFramework->Send(xMessage, m_pMainActor->GetAddress(), pActor->GetAddress()); } return false; }
bool NFCActorModule::SendMsgToActor(const int nActorIndex, const NFGUID& objectID, const int nEventID, const std::string& strArg) { NF_SHARE_PTR<NFIActor> pActor = GetActor(nActorIndex); if (nullptr != pActor) { NFIActorMessage xMessage; xMessage.bComponentMsg = true; xMessage.data = strArg; xMessage.nMsgID = nEventID; xMessage.nFormActor = m_pMainActor->GetAddress().AsInteger(); xMessage.self = objectID; return m_pFramework->Send(xMessage, m_pMainActor->GetAddress(), pActor->GetAddress()); } return false; }