X-Git-Url: http://developer.intra2net.com/git/?p=libt2n;a=blobdiff_plain;f=src%2Fclient.cpp;h=96b25546fc466e4061fe5f49f95332d5d45a3b96;hp=88a24f526f5d04d19bdf2ee05d1cb2063b57ea75;hb=91730468439e21dcf8d275d0f70d803c20ccaa7c;hpb=a11e19b7adab2d5b937573701959562f06087ac5 diff --git a/src/client.cpp b/src/client.cpp index 88a24f5..96b2554 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -24,5 +24,64 @@ namespace libt2n { +client_connection::client_connection() + : connection(), callbacks(__events_end) +{ + set_logging(NULL,none); +} + +client_connection::~client_connection() +{ + // we want the connection_closed callbacks to be called before + close(); + + do_callbacks(connection_deleted); +} + +void client_connection::close() +{ + if (!is_closed()) + { + connection::close(); + do_callbacks(connection_closed); + } +} + +/** @brief add a callback + + @param event event the function will be called at + @param func functor (see boost function) that will be called + + @example use boost::bind to bind to member functions and parameters like this: + int this example 17 is a fixed parameter that is always added to the call + c.add_callback(connection_closed,bind(&my_class::func_to_call_back, boost::ref(*this), 17)); +*/ +void client_connection::add_callback(callback_event_type event, const boost::function& func) +{ + callbacks[event].push_back(func); +} + +void client_connection::do_callbacks(callback_event_type event) +{ + std::list >::iterator i,ie=callbacks[event].end(); + for (i=callbacks[event].begin(); i != ie; i++) + (*i)(); +} + +/// get pointer to logging stream, returns NULL if no logging needed +std::ostream* client_connection::get_logstream(log_level_values level) +{ + if (logstream && log_level >= level) + return logstream; + else + return NULL; +} + +/// activate logging to the given stream. everything above the given level is logged. +void client_connection::set_logging(std::ostream *_logstream, log_level_values _log_level) +{ + log_level=_log_level; + logstream=_logstream; +} };