00001 /******************************************************************** 00002 Description: The Command Thread (should actually become a plugin) 00003 part of the 3Dsia project 00004 created: xandi, 040500 00005 00006 History: 00007 date, name, changes, in funtion 00008 00009 ********************************************************************/ 00010 00011 #include "misc.h" 00012 #include <map> 00013 #include <string> 00014 00015 #include "commandThread.h" 00016 00017 /*................................................................... 00018 Description: the commandThread 00019 Args: 00020 Returns: 00021 Created: xandi, 030500 00022 [ToDo:] 00023 [Comments:] 00024 Changes: 00025 -------------------------------------------------------------------*/ 00026 00027 void *CommandThread ( void* targz ) 00028 { 00029 ThreadArgs* targs = (ThreadArgs*) targz; 00030 fprintf(stderr,"[command] CommandThread alive...\n"); 00031 00032 Buffer* myBuffer = targs->in; 00033 Buffer* outputBuffer = targs->out; 00034 00035 map<string,int> command; 00036 00037 command["/quit"] = PROT_KILL_CLIENT; 00038 command["/dontshowme"] = PROT_TURN_AVATAR_OFF; 00039 command["/whatever"] = 0; 00040 00041 00042 while (1) 00043 { 00044 if ( !myBuffer->isEmpty() ) 00045 { 00046 #ifdef DEBUG 00047 fprintf(stderr,"[command] getting a packet.. :)\n"); 00048 #endif 00049 00050 packet* pak = myBuffer->read ( ); 00051 00052 switch ( pak->h.header[0] ) 00053 { 00054 case PROT_TEXT_MSG: 00055 { 00056 if ( (pak->data[0] == '/' ) ) 00057 { 00058 typedef map<string,int>::const_iterator commIt; 00059 00060 for ( commIt it = command.begin(); it != command.end(); ++it) 00061 { 00062 if ( it->first == pak->data ) 00063 { 00064 switch ( it->second ) 00065 { 00066 case PROT_KILL_CLIENT: 00067 { 00068 break; 00069 } 00070 case PROT_TURN_AVATAR_OFF: 00071 { 00072 packet* pak = new packet; 00073 pak->h.header[0] = PROT_TURN_AVATAR_OFF; 00074 outputBuffer->write ( pak ); 00075 break; 00076 } 00077 default: 00078 { 00079 break; 00080 } 00081 } 00082 break; 00083 } 00084 } 00085 } 00086 else 00087 { 00088 pak->h.header[0] = PROT_CHAT_MSG; 00089 outputBuffer->write ( pak ); 00090 break; 00091 } 00092 00093 break; 00094 } 00095 00096 default: 00097 { 00098 fprintf(stderr,"[commnad] _THATS_ actually not possible...\n"); 00099 delete pak; 00100 break; 00101 } 00102 } 00103 } 00104 } 00105 } 00106