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 ); */ }
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); } } }