// $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 <g0dil@berlios.de>
//
// This program is free software; you can redistribute it and/or modify
///////////////////////////////ct.p////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
-// senf::ppi::module::ActiveSocketSink<Sink>
+// senf::ppi::module::ActiveSocketSink<Writer>
-template <class Sink>
-prefix_ senf::ppi::module::ActiveSocketSink<Sink>::ActiveSocketSink(Handle handle)
+template <class Writer>
+prefix_ senf::ppi::module::ActiveSocketSink<Writer>::ActiveSocketSink()
+{
+ registerEvent( event_, &ActiveSocketSink::write );
+ route(input, event_);
+}
+
+template <class Writer>
+prefix_ senf::ppi::module::ActiveSocketSink<Writer>::ActiveSocketSink(Writer const & writer)
+ : writer_ (writer)
+{
+ registerEvent( event_, &ActiveSocketSink::write );
+ route(input, event_);
+}
+
+template <class Writer>
+prefix_ senf::ppi::module::ActiveSocketSink<Writer>::ActiveSocketSink(Handle handle)
: handle_(handle), event_(handle_, IOEvent::Write), writer_()
{
registerEvent( event_, &ActiveSocketSink::write );
route(input, event_);
}
-template <class Sink>
-prefix_ senf::ppi::module::ActiveSocketSink<Sink>::ActiveSocketSink(Handle handle,
- Sink const & sink)
- : handle_(handle), event_(handle_, IOEvent::Write), writer_(sink)
+template <class Writer>
+prefix_ senf::ppi::module::ActiveSocketSink<Writer>::ActiveSocketSink(Handle handle,
+ Writer const & writer)
+ : handle_(handle), event_(handle_, IOEvent::Write), writer_(writer)
{
registerEvent( event_, &ActiveSocketSink::write );
route(input, event_);
////////////////////////////////////////
// private members
-template <class Sink>
-prefix_ void senf::ppi::module::ActiveSocketSink<Sink>::write()
+template <class Writer>
+prefix_ void senf::ppi::module::ActiveSocketSink<Writer>::write()
{
writer_(handle_,input());
}
///////////////////////////////////////////////////////////////////////////
-// senf::ppi::module::PassiveSocketSink<Sink>
+// senf::ppi::module::PassiveSocketSink<Writer>
-template <class Sink>
-prefix_ senf::ppi::module::PassiveSocketSink<Sink>::PassiveSocketSink(Handle handle)
+template <class Writer>
+prefix_ senf::ppi::module::PassiveSocketSink<Writer>::PassiveSocketSink()
+{
+ noroute(input);
+ input.onRequest(&PassiveSocketSink::write);
+ checkThrottle();
+}
+
+template <class Writer>
+prefix_ senf::ppi::module::PassiveSocketSink<Writer>::PassiveSocketSink(Writer const & writer)
+ : writer_ (writer)
+{
+ noroute(input);
+ input.onRequest(&PassiveSocketSink::write);
+ checkThrottle();
+}
+
+template <class Writer>
+prefix_ senf::ppi::module::PassiveSocketSink<Writer>::PassiveSocketSink(Handle handle)
: handle_(handle), writer_()
{
noroute(input);
input.onRequest(&PassiveSocketSink::write);
+ checkThrottle();
}
-template <class Sink>
-prefix_ senf::ppi::module::PassiveSocketSink<Sink>::PassiveSocketSink(Handle handle,
- Sink const & sink)
- : handle_(handle), writer_(sink)
+template <class Writer>
+prefix_ senf::ppi::module::PassiveSocketSink<Writer>::PassiveSocketSink(Handle handle,
+ Writer const & writer)
+ : handle_(handle), writer_(writer)
{
noroute(input);
input.onRequest(&PassiveSocketSink::write);
+ checkThrottle();
}
////////////////////////////////////////
// private members
-template <class Sink>
-prefix_ void senf::ppi::module::PassiveSocketSink<Sink>::write()
+template <class Writer>
+prefix_ void senf::ppi::module::PassiveSocketSink<Writer>::write()
{
writer_(handle_,input());
}
+template <class Writer>
+prefix_ void senf::ppi::module::PassiveSocketSink<Writer>::checkThrottle()
+{
+ if (handle_)
+ input.unthrottle();
+ else
+ input.throttle();
+}
+
///////////////////////////////ct.e////////////////////////////////////////
#undef prefix_