int TaoTransportTask::send(TaoMessage& rMsg) { unsigned int type = rMsg.getMsgSubType(); unsigned int cmd = rMsg.getCmd(); if ((TaoMessage::RESPONSE_PROVIDER == type) && (cmd == TaoMessage::SHUTDOWN)) { TaoTransportAgent* pAgent = (TaoTransportAgent *) rMsg.getSocket(); mpTaoListeningTask->shutdownAgent(pAgent); return 0; } // record this transaction in the transaction db rMsg.getMsgID(); mpTransactionCnt->add(); mpTransactionCnt->getRef(); TaoObjHandle remoteServer = rMsg.getMsgQueueHandle(); if (mClientHandle) { ((OsServerTask *) mClientHandle)->postMessage(rMsg); return 1; } else if (remoteServer) { ((OsServerTask *) remoteServer)->postMessage(rMsg); return 1; } // send the msg to the transport, receive the response int sent = 0; TaoTransportAgent* pAgent = (TaoTransportAgent *) rMsg.getSocket(); if (pAgent && !pAgent->isShuttingDown()) { sent = pAgent->send(rMsg); } return sent; }
UtlBoolean TaoClientTask::receiveMsg(TaoMessage& rMsg) { TaoObjHandle appHandle = 0; appHandle = rMsg.getSocket(); // where the app pointer is stored if (appHandle) { OsProtectedEvent* pEvent; TaoObjHandle handle; UtlString argList; int data; pEvent = (OsProtectedEvent *)appHandle; handle = rMsg.getTaoObjHandle(); data = rMsg.getArgCnt(); argList = rMsg.getArgList(); pEvent->setIntData(data); data = rMsg.getCmd(); pEvent->setIntData2(data); pEvent->setStringData(argList); // If the event has already been signalled, clean up if(OS_ALREADY_SIGNALED == pEvent->signal(handle)) { OsProtectEventMgr* eventMgr = OsProtectEventMgr::getEventMgr(); eventMgr->release(pEvent); } return TRUE; } else { osPrintf("<<<< TaoClientTask::receiveMsg: no appHandle!! >>>>\n"); return FALSE; } }