summaryrefslogtreecommitdiff
path: root/src/chat/gcol.cpp
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2010-11-21 16:18:43 +0000
committerPaul Buetow <paul@buetow.org>2010-11-21 16:18:43 +0000
commit7fa0ff180b35e7fef218f0b9113d7e0f3f9b54a8 (patch)
treee45ffca8cf18ac5d00a2928229d8a717a3718669 /src/chat/gcol.cpp
parentc155ee9e0f133aafff70984f5b09c45efc62ca5a (diff)
parent55b08bd93257d32df76efc4e8e3f49311c39ee82 (diff)
Diffstat (limited to 'src/chat/gcol.cpp')
-rw-r--r--src/chat/gcol.cpp146
1 files changed, 146 insertions, 0 deletions
diff --git a/src/chat/gcol.cpp b/src/chat/gcol.cpp
new file mode 100644
index 0000000..dddb01d
--- /dev/null
+++ b/src/chat/gcol.cpp
@@ -0,0 +1,146 @@
+/*:*
+ *: File: ./src/chat/gcol.cpp
+ *:
+ *: yChat; Homepage: ychat.buetow.org; Version 0.9.0-CURRENT
+ *:
+ *: Copyright (C) 2003 Paul C. Buetow, Volker Richter
+ *: Copyright (C) 2004 Paul C. Buetow
+ *: Copyright (C) 2005 EXA Digital Solutions GbR
+ *: Copyright (C) 2006, 2007 Paul C. Buetow
+ *:
+ *: 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 GCOL_CPP
+#define GCOL_CPP
+
+#include "gcol.h"
+
+using namespace std;
+
+gcol::gcol()
+{
+
+ p_map_users = new shashmap<user*>;
+ wrap::system_message( GARBAGE );
+}
+
+gcol::~gcol()
+{
+ remove_garbage();
+ delete p_map_users;
+}
+
+void
+gcol::add_room_to_garbage( room* p_room )
+{
+ vec_rooms.push_back( p_room );
+ wrap::system_message( GARROOM + p_room->get_name() );
+}
+
+void
+gcol::add_user_to_garbage( user* p_user )
+{
+ p_user->destroy_session();
+ p_map_users->add_elem(p_user, tool::to_lower(p_user->get_name()));
+ wrap::system_message(GARUSER + p_user->get_name());
+}
+
+bool
+gcol::remove_garbage()
+{
+ bool b_empty;
+
+ b_empty = ( vec_rooms.empty() && p_map_users->size() == 0);
+
+ if ( b_empty )
+ return false;
+
+ wrap::system_message( GARBACT );
+
+ for ( vector<room*>::iterator iter = vec_rooms.begin();
+ iter != vec_rooms.end(); iter++ )
+ {
+ wrap::system_message( REMROOM + (*iter)->get_name() );
+ delete *iter;
+ }
+ vec_rooms.clear();
+
+
+ p_map_users->run_func( delete_users_ );
+ p_map_users->clear();
+
+ return true;
+}
+
+room*
+gcol::get_room_from_garbage()
+{
+
+ if ( vec_rooms.empty() )
+ return NULL;
+
+ room* p_room = vec_rooms.back();
+ vec_rooms.pop_back();
+
+ return p_room;
+}
+
+room*
+gcol::get_room_from_garbage_or_new( string s_room )
+{
+ room* p_room = get_room_from_garbage();
+ if ( p_room == NULL )
+ return new room( s_room );
+ p_room->set_name( s_room );
+ return p_room;
+}
+
+user*
+gcol::get_user_from_garbage( string s_user )
+{
+ user* p_user = p_map_users->get_elem(tool::to_lower(s_user));
+
+ if ( p_user != NULL )
+ {
+ p_map_users->del_elem(tool::to_lower(s_user));
+ p_user->set_name(s_user);
+ p_user->set_online(true);
+ p_user->set_invisible(false);
+ p_user->set_sock(NULL);
+ p_user->renew_timeout();
+ wrap::system_message(GARUSE2 + p_user->get_name());
+ }
+
+ return p_user;
+}
+
+void
+gcol::delete_users_( user *user_obj )
+{
+ wrap::system_message( REMUSER + user_obj->get_name() );
+ user_obj->clean();
+ delete user_obj;
+}
+
+void
+gcol::lock_mutex()
+{}
+
+void
+gcol::unlock_mutex()
+{}
+
+#endif