X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=PPI%2FSocketSink.ct;h=4864625b6adf5249cf140825ea2af93db809459a;hb=d5a72d0b3f6fee56dba6de1c54cafb448ebe3457;hp=ba7fffccec3dc97c4619c3552d84a602c427ff57;hpb=a479735a65e334af538b895f182f8efd36a541c5;p=senf.git diff --git a/PPI/SocketSink.ct b/PPI/SocketSink.ct index ba7fffc..4864625 100644 --- a/PPI/SocketSink.ct +++ b/PPI/SocketSink.ct @@ -1,8 +1,8 @@ // $Id$ // -// Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// Copyright (C) 2007 +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund // // This program is free software; you can redistribute it and/or modify @@ -31,45 +31,106 @@ ///////////////////////////////ct.p//////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// -// senf::ppi::module::ActiveSocketSink +// senf::ppi::module::ActiveSocketSink -template -prefix_ senf::ppi::module::ActiveSocketSink::ActiveSocketSink(Handle handle) +template +prefix_ senf::ppi::module::ActiveSocketSink::ActiveSocketSink() +{ + registerEvent( event_, &ActiveSocketSink::write ); + route(input, event_); +} + +template +prefix_ senf::ppi::module::ActiveSocketSink::ActiveSocketSink(Writer const & writer) + : writer_ (writer) +{ + registerEvent( event_, &ActiveSocketSink::write ); + route(input, event_); +} + +template +prefix_ senf::ppi::module::ActiveSocketSink::ActiveSocketSink(Handle handle) : handle_(handle), event_(handle_, IOEvent::Write), writer_() { registerEvent( event_, &ActiveSocketSink::write ); route(input, event_); } +template +prefix_ senf::ppi::module::ActiveSocketSink::ActiveSocketSink(Handle handle, + Writer const & writer) + : handle_(handle), event_(handle_, IOEvent::Write), writer_(writer) +{ + registerEvent( event_, &ActiveSocketSink::write ); + route(input, event_); +} + //////////////////////////////////////// // private members -template -prefix_ void senf::ppi::module::ActiveSocketSink::write() +template +prefix_ void senf::ppi::module::ActiveSocketSink::write() { writer_(handle_,input()); } /////////////////////////////////////////////////////////////////////////// -// senf::ppi::module::PassiveSocketSink +// senf::ppi::module::PassiveSocketSink -template -prefix_ senf::ppi::module::PassiveSocketSink::PassiveSocketSink(Handle handle) +template +prefix_ senf::ppi::module::PassiveSocketSink::PassiveSocketSink() +{ + noroute(input); + input.onRequest(&PassiveSocketSink::write); + checkThrottle(); +} + +template +prefix_ senf::ppi::module::PassiveSocketSink::PassiveSocketSink(Writer const & writer) + : writer_ (writer) +{ + noroute(input); + input.onRequest(&PassiveSocketSink::write); + checkThrottle(); +} + +template +prefix_ senf::ppi::module::PassiveSocketSink::PassiveSocketSink(Handle handle) : handle_(handle), writer_() { noroute(input); input.onRequest(&PassiveSocketSink::write); + checkThrottle(); +} + +template +prefix_ senf::ppi::module::PassiveSocketSink::PassiveSocketSink(Handle handle, + Writer const & writer) + : handle_(handle), writer_(writer) +{ + noroute(input); + input.onRequest(&PassiveSocketSink::write); + checkThrottle(); } //////////////////////////////////////// // private members -template -prefix_ void senf::ppi::module::PassiveSocketSink::write() +template +prefix_ void senf::ppi::module::PassiveSocketSink::write() { writer_(handle_,input()); } +template +prefix_ void senf::ppi::module::PassiveSocketSink::checkThrottle() +{ + if (handle_.valid()) + input.unthrottle(); + else + input.throttle(); +} + ///////////////////////////////ct.e//////////////////////////////////////// #undef prefix_