Example #1
0
void CServer::process( CPayload *payload )
{
	mIncomingADUFilter->append( payload );

	std::list<CPADU*> *lista =  mIncomingADUFilter->getADUSequence(); //payload->getAll();

	std::list<CPADU*>::iterator itr;
	for (itr = lista->begin(); itr != lista->end(); ++itr)
	{
		if ( (*itr)->mType == APData_PR_missingSeq )
		{
			// tu trzeba ponownie wyslac konkretne paczki
			rebroadcast( ((CPMissingSeq*)(*itr))->mMissingSeq );
		}
		if ( (*itr)->mType == APData_PR_connect )
		{
			CPConnect* connect = (CPConnect*)(*itr);
			/*
			annatar::sim::CSimEvent* ev = new annatar::sim::CSimEvent();
			ev->setEvent( annatar::sim::CSimEvent::Connect, connect ); 
			notify( ev );
			delete ev;
			*/
		}
	}
	delete lista;

/*	payload->clear();
	payload = new CPayload();

	CPPhrase *pphrase =
		new CPPhrase( acquireSequenceNumber(), "Phrase");
		//new CPPhrase( 2, "Phrase");
	payload->addPhrase( pphrase );
	delete pphrase;

	broadcast( payload );
*/
}
Example #2
0
void
madara::transport::UdpRegistryClientReadThread::run (void)
{
  if (!settings_.no_receiving)
  {
    ACE_Time_Value wait_time (1);
    ACE_INET_Addr  remote;
  
    // allocate a buffer to send
    char * buffer = buffer_.get_ptr ();
    const char * print_prefix = "UdpRegistryClientReadThread::run";
    int64_t buffer_remaining = settings_.queue_length;

    madara_logger_log (context_->get_logger (), logger::LOG_MAJOR,
      "%s:" \
      " entering main service loop.\n",
      print_prefix);
    
    knowledge::KnowledgeMap rebroadcast_records;

    if (buffer == 0)
    {
      madara_logger_log (context_->get_logger (), logger::LOG_MINOR,
        "%s:" \
        " Unable to allocate buffer of size " PRIu32 ". Exiting thread.\n",
        print_prefix,
        settings_.queue_length);
    
      return;
    }
    
    madara_logger_log (context_->get_logger (), logger::LOG_MINOR,
      "%s:" \
      " entering a recv on the socket.\n",
      print_prefix);
    
    // read the message
    ssize_t bytes_read = socket_.recv ((void *)buffer, 
      (size_t)settings_.queue_length, remote, 0, &wait_time);
 
    if (bytes_read > 0)
    {
      if (remote.get_host_addr () != 0)
      {
        madara_logger_ptr_log (logger::global_logger.get (),
          logger::LOG_MAJOR,
          "%s:" \
          " received a message header of %lld bytes from %s:%d\n",
          print_prefix,
          (long long)bytes_read,
          remote.get_host_addr (), (int)remote.get_port_number ());
      }
      else
      {
        madara_logger_ptr_log (logger::global_logger.get (),
          logger::LOG_WARNING,
          "%s:" \
          " received %lld bytes from unknown host\n",
          print_prefix,
          (long long)bytes_read);
      }
      MessageHeader * header = 0;

      std::stringstream remote_host;
      remote_host << remote.get_host_addr ();
      remote_host << ":";
      remote_host << remote.get_port_number ();

      process_received_update (buffer, bytes_read, id_, *context_,
        settings_, send_monitor_, receive_monitor_, rebroadcast_records,
  #ifndef _MADARA_NO_KARL_
        on_data_received_,
  #endif // _MADARA_NO_KARL_
        print_prefix,
        remote_host.str ().c_str (), header);
      
      if (header)
      {
        if (header->ttl > 0 && rebroadcast_records.size () > 0 &&
            settings_.get_participant_ttl () > 0)
        {
          --header->ttl;
          header->ttl = std::min (
            settings_.get_participant_ttl (), header->ttl);

          rebroadcast (print_prefix, header, rebroadcast_records);
        }

        // delete header
        delete header;
      }
    }
    else
    {
      madara_logger_log (context_->get_logger (), logger::LOG_MAJOR,
        "%s:" \
        " wait timeout on new messages. Proceeding to next wait\n",
        print_prefix);
    }
  }
}