X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPPI%2FSocketSource.ct;h=8429bd9a8062cc7720aab35cf25475205778a60f;hb=9bc655e14d2d8c204ed835896cb51e42d49bd68f;hp=bc60d299c6c728e6978091e6544748552e30b539;hpb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;p=senf.git diff --git a/senf/PPI/SocketSource.ct b/senf/PPI/SocketSource.ct index bc60d29..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,13 +76,66 @@ prefix_ senf::ppi::module::ActiveSocketSource::ActiveSocketSource(Handle route(event_, output); } -//////////////////////////////////////// -// private members +/////////////////////////////////////////////////////////////////////////// +// 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::ActiveSocketSource::read() +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////////////////////////////////////////