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;
}
Example #2
0
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;
        }
}