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