blob: 7b0ccd2f2ae8c749a39fc377557379f54beacd70 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
// class chat implementation.
#ifndef CHAT_CXX
#define CHAT_CXX
#include "chat.h"
#include "CONF.h"
#include "MUTX.h"
using namespace std;
chat::chat( )
{
}
chat::~chat( )
{
}
user*
chat::get_user( string &s_user )
{
bool b_flag;
return get_user( s_user, b_flag );
}
user*
chat::get_user( string &s_user, bool &b_found )
{
container param;
param.elem[0] = (void*) &s_user ;
param.elem[1] = (void*) &b_found;
b_found = false;
run_func( get_user_, (void*)¶m );
if ( *( (bool*)param.elem[1] ) )
return (user*)param.elem[2];
}
void
chat::get_user_( name *name_obj, void *v_arg )
{
container* param = (container*) v_arg;
room *room_obj = static_cast<room*>(name_obj);
param->elem[2] = (void*)room_obj->get_elem( *((string*)param->elem[0]), *((bool*)param->elem[1]) );
}
void
chat::login( map_string &map_params )
{
string s_user = map_params["nick"];
// prove if nick is empty
if ( s_user.empty() )
{
map_params["INFO"] = E_NONICK;
map_params["request"] = CONF::get().get_val( "STARTMPL" ); // redirect to the startpage.
return;
}
bool b_flag;
// prove if nick is already online / logged in.
get_user( s_user, b_flag );
if ( b_flag )
{
map_params["INFO"] = E_ONLINE;
map_params["request"] = CONF::get().get_val( "STARTMPL" );
return;
}
string s_room = map_params["room"];
room* p_room = get_room( s_room , b_flag );
// if room does not exist add room to list!
if ( ! b_flag )
{
p_room = new room( s_room );
#ifdef _VERBOSE
pthread_mutex_lock ( &MUTX::get().mut_stdout );
cout << NEWROOM << s_room << endl;
pthread_mutex_unlock( &MUTX::get().mut_stdout );
#endif
add_elem( p_room );
}
user *p_user = new user( s_user );
// add user to the room.
p_room->add_user( p_user );
// post "username enters the chat" into the room.
p_room->msg_post( new string( s_user.append( USERENTR ) ) );
#ifdef _VERBOSE
pthread_mutex_lock ( &MUTX::get().mut_stdout );
cout << LOGINPR << s_user << endl;
pthread_mutex_unlock( &MUTX::get().mut_stdout );
#endif
}
void
chat::post( user* u_user, map_string &map_params )
{
string s_msg( "<font color=\"" );
s_msg.append( u_user->get_col1() )
.append( "\">" )
.append( u_user->get_name() )
.append( ": " )
.append( map_params["message"] )
.append( "</font><br>\n" );
u_user->get_p_room()->msg_post( &s_msg );
}
#endif
|