CWuidReadSlaveActivity(CGraphElementBase *_container) 
     : CSlaveActivity(_container), CThorDataLink(this)
 {
     replyTag = createReplyTag();
     replyStream.setown(createMemoryBufferSerialStream(masterReplyMsg));
     rowSource.setStream(replyStream);
 }
    void init(MemoryBuffer &data, MemoryBuffer &slaveData)
    {
        AggregateSlaveBase::init(data, slaveData);

        appendOutputLinked(this);
        helper = (IHThorAggregateArg *)queryHelper();

        if (firstNode())
        {
            mpTag = createReplyTag();
            slaveData.append((int &)mpTag);
        }
    }
    void doBroadcast()
    {
        try
        {
            unsigned i = 0;
            unsigned n;
            if (1 == nodeindex)
                n = broadcastSlave-1;
            else if (broadcastSlave==nodeindex)
                n = 0;
            else
                n = nodeindex-1;
            loop {
                unsigned t = target(i++,n);
                if (t>numnodes)
                    break;
                if (t != broadcastSlave)
                {
#ifdef _TRACEBROADCAST
                    ActPrintLog(activity, "Broadcast node %d Sending to node %d size %d",nodeindex,t,broadcasting.length());
#endif
                    mptag_t rt = createReplyTag();
                    broadcasting.setReplyTag(rt); // simulate sendRecv
                    comm->send(broadcasting, t, mpTag);     
                    CMessageBuffer rMsg;
                    comm->recv(rMsg, t, rt);                    
#ifdef _TRACEBROADCAST
                    ActPrintLog(activity, "Broadcast node %d Sent to node %d size %d received back %d",nodeindex,t,broadcasting.length(),rMsg.length());
#endif
                }
            }
        }
        catch (IException *e)
        {
            ActPrintLog(activity, e, "CBroadcaster::broadcast exception");
            throw;
        }
#ifdef _TRACEBROADCAST
        ActPrintLog(activity, "do broadcast done done");
#endif
    }
Beispiel #4
0
 void init()
 {
     replyTag = createReplyTag();
 }