28 #include <ibrcommon/thread/MutexLock.h>
29 #include <ibrcommon/Logger.h>
36 AbstractWorker::AbstractWorkerAsync::AbstractWorkerAsync(
AbstractWorker &worker)
42 AbstractWorker::AbstractWorkerAsync::~AbstractWorkerAsync()
56 _receive_bundles.push(queued.
bundle);
66 _receive_bundles.push(queued.
bundle);
71 void AbstractWorker::AbstractWorkerAsync::initialize()
74 if (JoinableThread::isFinalized())
76 JoinableThread::reset();
78 _receive_bundles.reset();
81 JoinableThread::start();
84 void AbstractWorker::AbstractWorkerAsync::shutdown()
87 _receive_bundles.abort();
92 void AbstractWorker::AbstractWorkerAsync::run()
throw ()
107 }
catch (
const ibrcommon::Exception &ex) {
114 _worker.callbackBundleReceived( b );
127 }
catch (
const ibrcommon::Exception &ex) {
128 IBRCOMMON_LOGGER_DEBUG_TAG(
"AbstractWorker", 15) << ex.what() << IBRCOMMON_LOGGER_ENDL;
133 }
catch (
const ibrcommon::QueueUnblockedException&) {
138 void AbstractWorker::AbstractWorkerAsync::__cancellation()
throw ()
141 _receive_bundles.abort();
150 _groups.insert(endpoint);
155 _groups.erase(endpoint);
163 _thread.initialize();
164 }
catch (
const ibrcommon::ThreadException &ex) {
165 IBRCOMMON_LOGGER_TAG(
"AbstractWorker", error) <<
"initialize failed: " << ex.what() << IBRCOMMON_LOGGER_ENDL;
static void inject(const dtn::data::EID &source, dtn::data::Bundle &bundle)
virtual ~AbstractWorker()
static dtn::data::EID local
virtual const EID getWorkerURI() const
static void add(EventReceiver< E > *receiver)
void subscribe(const dtn::data::EID &endpoint)
void setApplication(const dtn::data::Number &app)
static void remove(const EventReceiver< E > *receiver)
const dtn::data::MetaBundle bundle
void unsubscribe(const dtn::data::EID &endpoint)
virtual void remove(const dtn::data::BundleID &id)=0
bool get(FLAGS flag) const
void transmit(dtn::data::Bundle &bundle)
virtual dtn::data::Bundle get(const dtn::data::BundleID &id)=0
void initialize(const std::string &uri)
static void processBlocks(dtn::data::Bundle &b)
static void raise(const dtn::data::MetaBundle &bundle, EventBundleAction action, dtn::data::StatusReportBlock::REASON_CODE reason=dtn::data::StatusReportBlock::NO_ADDITIONAL_INFORMATION)
static void raise(const dtn::data::MetaBundle &meta, REASON_CODE reason=DELIVERED)
dtn::storage::BundleStorage & getStorage()
static BundleCore & getInstance()