/*************************************************************************** * Copyright (C) 2006 by Gerd v. Egidy * * gve@intra2net.com * * * * This library is free software; you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License version * * 2.1 as published by the Free Software Foundation. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include #include "client.hxx" 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; } };