X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPPI%2FSocketSource.ct;h=8429bd9a8062cc7720aab35cf25475205778a60f;hb=9bc655e14d2d8c204ed835896cb51e42d49bd68f;hp=58131fa8d8962ef6a2161185e12f664c5731e05c;hpb=adc12e8819cd179bf717132e9eb5a5849f281e52;p=senf.git diff --git a/senf/PPI/SocketSource.ct b/senf/PPI/SocketSource.ct index 58131fa..8429bd9 100644 --- a/senf/PPI/SocketSource.ct +++ b/senf/PPI/SocketSource.ct @@ -34,10 +34,10 @@ // senf::ppi::DgramReader template -prefix_ Packet senf::ppi::DgramReader::operator()(Handle handle) +prefix_ Packet senf::ppi::DgramReader::operator()(Handle & handle) { Packet packet (Packet::create(senf::noinit)); - handle.read(packet.data(),MaxSize); + handle.read(packet.data(), MaxSize); return packet; } @@ -60,7 +60,7 @@ prefix_ senf::ppi::module::ActiveSocketSource::ActiveSocketSource(Reader } template -prefix_ senf::ppi::module::ActiveSocketSource::ActiveSocketSource(Handle handle) +prefix_ senf::ppi::module::ActiveSocketSource::ActiveSocketSource(Handle const & handle) : handle_(handle), event_(handle_, IOEvent::Read) { registerEvent( event_, &ActiveSocketSource::read ); @@ -68,7 +68,7 @@ prefix_ senf::ppi::module::ActiveSocketSource::ActiveSocketSource(Handle } template -prefix_ senf::ppi::module::ActiveSocketSource::ActiveSocketSource(Handle handle, +prefix_ senf::ppi::module::ActiveSocketSource::ActiveSocketSource(Handle const & handle, Reader reader) : handle_(handle), event_(handle_, IOEvent::Read), reader_(reader) { @@ -76,6 +76,68 @@ prefix_ senf::ppi::module::ActiveSocketSource::ActiveSocketSource(Handle route(event_, output); } +/////////////////////////////////////////////////////////////////////////// +// senf::ppi::module::ActiveBurstSocketSource + +template +prefix_ senf::ppi::module::ActiveBurstSocketSource::ActiveBurstSocketSource(unsigned max_burst) + : maxBurst_(max_burst) +{ + registerEvent( event_, &ActiveBurstSocketSource::read ); + route(event_, output); +} + +template +prefix_ senf::ppi::module::ActiveBurstSocketSource::ActiveBurstSocketSource(Reader reader, unsigned max_burst) + : reader_(reader), maxBurst_(maxBurst) +{ + registerEvent( event_, &ActiveBurstSocketSource::read ); + route(event_, output); +} + +template +prefix_ senf::ppi::module::ActiveBurstSocketSource::ActiveBurstSocketSource(Handle const & handle, unsigned max_burst) + : handle_(handle), event_(handle_, IOEvent::Read), maxBurst_(max_burst) +{ + registerEvent( event_, &ActiveBurstSocketSource::read ); + route(event_, output); +} + +template +prefix_ senf::ppi::module::ActiveBurstSocketSource::ActiveBurstSocketSource(Handle const & handle, + Reader reader, unsigned max_burst) + : handle_(handle), event_(handle_, IOEvent::Read), reader_(reader), maxBurst_(max_burst) +{ + registerEvent( event_, &ActiveBurstSocketSource::read ); + route(event_, output); +} + +template +prefix_ void senf::ppi::module::ActiveBurstSocketSource::maxBurst(unsigned max_burst) +{ + maxBurst_ = max_burst; +} + +template +prefix_ unsigned senf::ppi::module::ActiveBurstSocketSource::maxBurst() + const +{ + return maxBurst_; +} + +template +prefix_ void senf::ppi::module::ActiveBurstSocketSource::read() +{ + output(reader_(handle_)); + for (unsigned int i = 0; i < maxBurst_; ++i) { + typename Reader::PacketType p (reader_(handle_)); + if (p.data().size() > 0) + output( p); + else + break; + } +} + ///////////////////////////////ct.e//////////////////////////////////////// #undef prefix_