00001 #ifndef __J2K__MsgThreadServer_CPP__
00002 #define __J2K__MsgThreadServer_CPP__
00003
00004 #include <j2k/nto/MsgThreadServer.hpp>
00005
00006 MsgThreadServer::MsgThreadServer( const char* name0 )
00007 : Basic_PThread()
00008 {
00009 name_len = strlen( name0 ) + 1;
00010 name = new char[ name_len ];
00011 memcpy( name, name0, name_len );
00012
00013
00014
00015 attach = name_attach( NULL, name, 0 );
00016 assert( attach != NULL );
00017 }
00018
00019 Message MsgThreadServer::receive( int who )
00020 {
00021 int rcvid = -1;
00022 while( rcvid != who )
00023 {
00024 rcvid = MsgReceive( attach->chid, m.getMessageAddr(), m.getMessageSize(), NULL );
00025
00026 if ( rcvid != -1 )
00027 {
00028 break;
00029 }
00030
00031 register int r = m.handleHeader( rcvid );
00032
00033 if ( r != 0 ) continue;
00034
00035
00036 printf( "Server receive %d \n", m.getNumber() );
00037 MsgReply( rcvid, EOK, 0, 0 );
00038
00039 return Message( m );
00040
00041
00042 }
00043
00044 return Message( m );
00045 }
00046
00047
00048 MsgThreadServer::~MsgThreadServer()
00049 {
00050
00051 name_detach(attach, 0);
00052 }
00053
00054 void MsgThreadServer::send( const char* dest0, Message msg_recv )
00055 {
00056 int fd = name_open( dest0, 0);
00057 assert( fd != -1 );
00058
00059 int r = MsgSend( fd, msg_recv.getMessageAddr(), msg_recv.getMessageSize(), NULL, 0 );
00060 assert( r != -1 );
00061
00062
00063 name_close( fd );
00064 }
00065
00066 #endif