void TAO::DCPS::ReliableMulticast::detail::SenderLogic::receive( const TAO::DCPS::ReliableMulticast::detail::Packet& p, PacketVector& redelivered ) const { redelivered.clear(); if (p.type_ == TAO::DCPS::ReliableMulticast::detail::Packet::NACK) { for ( TAO::DCPS::ReliableMulticast::detail::Packet::id_type id = p.nack_begin_; id != p.nack_end_; ++id ) { BufferType::const_iterator iter = buffer_.find(id); if (iter != buffer_.end()) { redelivered.push_back(iter->second); } else { redelivered.push_back(TAO::DCPS::ReliableMulticast::detail::Packet( id, TAO::DCPS::ReliableMulticast::detail::Packet::DATA_NOT_AVAILABLE )); } } } }
void AddPacket(string name, string data) { sPacket p; p.name = name; p.data = data; vPacket.push_back(p); }
void OpenDDS::DCPS::ReliableMulticast::detail::ReceiverLogic::deliver( PacketVector& delivered, const Packet& p ) { delivered.push_back(p); last_delivered_id_ = p.id_; }
void TAO::DCPS::ReliableMulticast::detail::SenderLogic::send( const TAO::DCPS::ReliableMulticast::detail::Packet& p, PacketVector& delivered ) { delivered.clear(); if ( p.type_ == TAO::DCPS::ReliableMulticast::detail::Packet::DATA_INTERMEDIATE || p.type_ == TAO::DCPS::ReliableMulticast::detail::Packet::DATA_END_OF_MESSAGE ) { buffer_packet(p, delivered); } }
void TAO::DCPS::ReliableMulticast::detail::SenderLogic::buffer_packet( const TAO::DCPS::ReliableMulticast::detail::Packet& p, PacketVector& delivered ) { TAO::DCPS::ReliableMulticast::detail::Packet tmp(p); if (buffersize() == sender_history_size_) { buffer_.erase(current_id_ - sender_history_size_); } tmp.id_ = current_id_; ++current_id_; buffer_.insert(std::make_pair(tmp.id_, tmp)); delivered.push_back(tmp); }
void ReadPacketXML(string filename) { ifstream file(filename); using boost::property_tree::ptree; ptree pt; read_xml(file, pt); if(!pt.empty()) { for(ptree::value_type const& v : pt.get_child("packetlist")) { if(v.first == "packet") { sPacket p; p.name = v.second.get<string>("name"); p.data = v.second.get<string>("data"); vPacket.push_back(p); } } } }
void OpenDDS::DCPS::ReliableMulticast::detail::ReceiverLogic::receive( const Packet& p, PacketVector& nacks, PacketVector& delivered ) { delivered.clear(); // todo: validate if (!seen_last_delivered_) { if ( p.type_ == Packet::DATA_INTERMEDIATE || p.type_ == Packet::DATA_END_OF_MESSAGE ) { last_delivered_id_ = p.id_ - 1; seen_last_delivered_ = true; } else { return; } } if ( p.type_ == Packet::DATA_INTERMEDIATE || p.type_ == Packet::DATA_END_OF_MESSAGE || p.type_ == Packet::DATA_NOT_AVAILABLE ) { bool prior_nack_canceled = nacker_.cancel(p.id_); if (in_range(p.id_, 1, receiver_buffer_size_ + receiver_buffer_size_)) { if (p.id_ == last_delivered_id_ + 1) { Packet tmp_packet; deliver(delivered, p); while (get_and_remove_buffered_packet( last_delivered_id_ + 1, tmp_packet )) { deliver(delivered, tmp_packet); } } else if (!is_buffered(p)) { if ( p.type_ == Packet::DATA_INTERMEDIATE || p.type_ == Packet::DATA_END_OF_MESSAGE ) { buffer_packet(p, delivered); if (!prior_nack_canceled) { nacker_.nack_range(find_previous_received(p.id_) + 1, p.id_); } } else if (p.type_ == Packet::DATA_NOT_AVAILABLE) { handle_unreliable_operation(delivered); } } } } else if (p.type_ == Packet::HEARTBEAT) { if (!in_range(p.id_, 0 - 2 * receiver_buffer_size_, 0)) { // NACK the last packet, which will send it along and // then trigger the above NACK code... nacker_.nack_range(p.id_, p.id_ + 1); } } nacker_.get_nacks(nacks); }
void EditPacket(int i, string name, string data) { vPacket.at(i).name = name; vPacket.at(i).data = data; }
void DeletePacket(int i) { vPacket.erase(vPacket.begin() + i); }