diff options
Diffstat (limited to 'chat.cpp')
| -rwxr-xr-x | chat.cpp | 80 |
1 files changed, 53 insertions, 27 deletions
@@ -1,16 +1,22 @@ // class chat implementation. -#ifndef CHAT_CXX -#define CHAT_CXX +#ifndef s_chat_CXX +#define s_chat_CXX #include "chat.h" -#include "CONF.h" -#include "MUTX.h" +#include "s_conf.h" +#include "s_mutx.h" +#include "s_tool.h" using namespace std; chat::chat( ) { + if ( s_conf::get().get_val( "HTML" ) == "OFF" ) + b_strip_html = true; + else + b_strip_html = false; + } chat::~chat( ) @@ -41,10 +47,9 @@ chat::get_user( string &s_user, bool &b_found ) } void -chat::get_user_( name *name_obj, void *v_arg ) +chat::get_user_( room *room_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]) ); } @@ -53,11 +58,19 @@ chat::login( map_string &map_params ) { string s_user = map_params["nick"]; - // prove if nick is empty + // 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. + map_params["request"] = s_conf::get().get_val( "STARTMPL" ); // redirect to the startpage. + return; + } + + // prove if the nick ist alphanumeric: + else if ( ! s_tool::is_alpha_numeric( s_user ) ) + { + map_params["INFO"] = E_ALPNUM; + map_params["request"] = s_conf::get().get_val( "STARTMPL" ); // redirect to the startpage. return; } @@ -68,7 +81,7 @@ chat::login( map_string &map_params ) if ( b_flag ) { map_params["INFO"] = E_ONLINE; - map_params["request"] = CONF::get().get_val( "STARTMPL" ); + map_params["request"] = s_conf::get().get_val( "STARTMPL" ); return; } @@ -80,10 +93,10 @@ chat::login( map_string &map_params ) { p_room = new room( s_room ); -#ifdef _VERBOSE - pthread_mutex_lock ( &MUTX::get().mut_stdout ); +#ifdef VERBOSE + pthread_mutex_lock ( &s_mutx::get().mut_stdout ); cout << NEWROOM << s_room << endl; - pthread_mutex_unlock( &MUTX::get().mut_stdout ); + pthread_mutex_unlock( &s_mutx::get().mut_stdout ); #endif add_elem( p_room ); @@ -93,29 +106,42 @@ chat::login( map_string &map_params ) // add user to the room. p_room->add_user( p_user ); - + sess *ns =s_sman::get().createSession(); + ns->setValue(string("nick"), (void *)new string(s_user) ); + map_params["tmpid"]=ns->getId(); // post "username enters the chat" into the room. - p_room->msg_post( new string( s_user.append( USERENTR ) ) ); + p_room->msg_post( new string( s_user.append( s_lang::get().get_val( "USERENTR" ) ) ) ); -#ifdef _VERBOSE - pthread_mutex_lock ( &MUTX::get().mut_stdout ); +#ifdef VERBOSE + pthread_mutex_lock ( &s_mutx::get().mut_stdout ); cout << LOGINPR << s_user << endl; - pthread_mutex_unlock( &MUTX::get().mut_stdout ); + pthread_mutex_unlock( &s_mutx::get().mut_stdout ); #endif } void -chat::post( user* u_user, map_string &map_params ) +chat::post( user* p_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 ); + + string s_msg( map_params["message"] ); + + auto unsigned i_pos = s_msg.find( "/" ); + if ( i_pos == 0 ) + return p_user->command( s_msg ); + + if ( b_strip_html ) + s_tool::strip_html( &s_msg ); + + string s_post( "<font color=\"" ); + + s_post.append( p_user->get_col1() ) + .append( "\">" ) + .append( p_user->get_name() ) + .append( ": " ) + .append( s_msg ) + .append( "</font><br>\n" ); + + p_user->get_p_room()->msg_post( &s_post ); } #endif |
