diff options
| author | Paul Buetow <paul@buetow.org> | 2010-11-21 16:56:10 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2010-11-21 16:56:10 +0000 |
| commit | c67ed39bc994a0aef06454c1e3044e79f712b739 (patch) | |
| tree | 4397f736b9161f50cd0b00cdcfd2b0acc7c1af7e /src/chat/room.cpp | |
| parent | 93ce2024a62325cbae5f2f6fd2155a4ef89cee63 (diff) | |
Diffstat (limited to 'src/chat/room.cpp')
| -rw-r--r-- | src/chat/room.cpp | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/src/chat/room.cpp b/src/chat/room.cpp new file mode 100644 index 0000000..9ff5517 --- /dev/null +++ b/src/chat/room.cpp @@ -0,0 +1,138 @@ +/*:* + *: File: ./src/chat/room.cpp + *: + *: yChat; Homepage: www.yChat.org; Version 0.7.9.5-RELEASE + *: + *: Copyright (C) 2003 Paul C. Buetow, Volker Richter + *: Copyright (C) 2004 Paul C. Buetow + *: Copyright (C) 2005 EXA Digital Solutions GbR + *: + *: This program is free software; you can redistribute it and/or + *: modify it under the terms of the GNU General Public License + *: as published by the Free Software Foundation; either version 2 + *: of the License, or (at your option) any later version. + *: + *: This program 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 General Public License for more details. + *: + *: You should have received a copy of the GNU 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. + *:*/ + +#ifndef ROOM_CPP +#define ROOM_CPP + +#include "room.h" +#include "../maps/mtools.h" + +using namespace std; + +room::room( string s_name ) : name( s_name ) +{ + pthread_mutex_init( &mut_s_topic, NULL ); +#ifdef LOGGING + + p_logd = new logd( wrap::CONF->get_elem("chat.logging.roomlogdir") + get_lowercase_name(), + wrap::CONF->get_elem("chat.logging.roomloglines") ); +#endif + + wrap::STAT->increment_num_rooms(); +} + +room::~room() +{ + wrap::STAT->decrement_num_rooms(); + + // Delete all user objects + run_func( mtools<user*>::delete_obj ); + +#ifdef LOGGING + + delete p_logd; +#endif + + pthread_mutex_destroy( &mut_s_topic ); + pthread_mutex_destroy( &mut_s_name ); +} + +string +room::get_topic() +{ + string s_ret; + pthread_mutex_lock ( &mut_s_topic ); + s_ret = s_topic; + pthread_mutex_unlock( &mut_s_topic ); + return s_ret; +} + +void +room::set_topic( string s_topic ) +{ + pthread_mutex_lock ( &mut_s_topic ); + if ( s_topic == "" ) + this->s_topic = ""; + else + this->s_topic = s_topic + "<br><br>"; + pthread_mutex_unlock( &mut_s_topic ); + reload_onlineframe(); +} + +void +room::set_topic( string s_topic, string s_color ) +{ + set_topic( "<font color=\"#" + s_color + "\">" + s_topic + "</font>"); +} + +void +room::clean_room() +{ + pthread_mutex_lock ( &mut_s_topic ); + this->s_topic = ""; + pthread_mutex_unlock( &mut_s_topic ); + wrap::CHAT->del_elem( get_lowercase_name() ); + wrap::GCOL->add_room_to_garbage( this ); +} + +void +room::reload_onlineframe() +{ + javascript_post("parent.online.location.reload();"); +} + +void +room::set_name( string s_name ) +{ + if ( tool::to_lower(s_name) == get_lowercase_name() ) + { + name::set_name( s_name ); + return; + } + +#ifdef LOGGING + p_logd->flush_logs(); +#endif + + if ( s_name == "" ) + return; + + name::set_name( s_name ); +#ifdef LOGGING + + p_logd->set_logfile( wrap::CONF->get_elem("chat.logging.roomlogdir"), get_lowercase_name() ); +#endif +} + +void +room::dumpit() +{ + dumpable::add("[room]"); + dumpable::add("Name: "+get_name()); + dumpable::add("Topic: "+get_topic()); + base<user>::dumpit(); +} + + +#endif |
