Esempio n. 1
0
void Session::handleConnect(const boost::system::error_code &error,
                            boost::asio::ip::tcp::resolver::iterator endpointIterator)
{
    if (!error)
    {
        boost::asio::ip::tcp::endpoint endpoint = *endpointIterator;
        LogManager::getSingletonPtr()->logManager("Connected to " + endpoint.address()
                + ":" + endpoint.port());

        setState(EXCHANGE_KEY);
        HandshakeMessage handshakeMessage(id, username,
                                          endpoint.address().to_string(), endpoint.port());
        sendImmediate(handshakeMessage);
    }
    else if (++endpointIterator
             != boost::asio::ip::tcp::resolver::iterator())
    {
        LogManager::getSingletonPtr()->logManager("Connection failed -- retrying");
        socket.close();
        boost::asio::ip::tcp::endpoint endpoint = *endpointIterator;
        socket.async_connect(endpoint,
                             boost::bind(&Session::handleConnect, this,
                                         boost::asio::placeholders::error, endpointIterator));
    }
    else
    {
        LogManager::getSingletonPtr()->logManager("Connection failed: " + error.message());
        disconnect();
    }
}
Esempio n. 2
0
void immediatering_init(void)
{ 
  int setNum = 0;
  if (CkMyRank()==0 && numTests==0) setNum = 1;
#if 1
  // test Charm immediate messages
  if (setNum) numTests +=2;
  immring_nodegrp[0].start(new immMessage);
  immring_grp[0].start(new immMessage);
#endif
#if 1
  if (setNum) numTests ++;
  sendImmediate(0,0);
#endif
}
Esempio n. 3
0
// Converse immediate handler
void immediatering_startHandler(void *vmsg)
{
  const int maxRings = 1000;
  immediateMsg *msg=(immediateMsg *)vmsg;

  if(0!=strcmp(msg->data,"Array!")) {
    CkAbort("Message corrupted");
  }
  if(CkMyNode()==0)
    msg->iter++;
  if (msg->iter < maxRings) { /* Keep passing message around the ring */
    /* This is questionable: */
    sendImmediate((CkMyNode()+1) % CkNumNodes(),msg->iter);
  } else /* msg->iter>=maxRings, so stop: */ { 
    /* megatest_finish isn't safe from an immediate, so send a 
       regular non-immediate message out: */
    int size=CmiMsgHeaderSizeBytes;
    void *msg=CmiAlloc(size);
    CmiSetHandler(msg,immediatering_finishHandlerIdx);
    CmiSyncSendAndFree(0,size,(char *)msg);
  }
  CmiFree(msg);
}