00001 #ifndef __J2K__TIMEOUT_CPP__
00002 #define __J2K__TIMEOUT_CPP__
00003
00004 #include <j2k/nto/Timeout.hpp>
00005
00006 Timeout::Timeout( NameSpace* n0, ULONG nsec0, ULONG sec0 )
00007 : TimerPulse( nsec0, sec0 ),
00008 MsgContainer( n0, client ),
00009 delay_nsec( nsec0 ),
00010 delay_sec( sec0 ),
00011 rcvid( 0 )
00012 {
00013 message->setRequest( MQI_TIMEOUT );
00014 message->setStatus( MQI_TIMEOUT );
00015 message->setData( (void*)this );
00016
00017
00018 }
00019
00020 void Timeout::tick( int signo )
00021 {
00022 const int time_out = 5;
00023
00024 printf( "# Tick %d for %d #\n", (time_out - count ), message->getNumber() );
00025 fflush( stdout );
00026
00027 count++;
00028 if ( count < time_out )
00029 {
00030 TimerPulse::set( delay_nsec, delay_sec );
00031 return;
00032 }
00033
00034 TimerPulse::set( 0, 0 );
00035 printf( "DIRECT Reply \n" );
00036 message->setRequest( MQI_TIMEOUT );
00037 message->setStatus( MQI_TIMEOUT );
00038 message->setData( (void*)this );
00039
00040
00041 printf( "Killing PID[%d] ID#%d \n", message->getPThread(), rcvid );
00042 fflush( stdout );
00043
00044
00045 message->reply( rcvid );
00046 message->print();
00047
00048 printf( "Reply sent \n" );
00049 fflush( stdout );
00050
00051
00052
00053
00054
00055 return;
00056
00057 message->setNumber( signo );
00058 if ( message->send( fd, message ) < 0 )
00059 {
00060 perror( "Couldn't send Timeout Message ! \n" );
00061 }
00062 }
00063
00064 void Timeout::start()
00065 {
00066
00067 connect();
00068
00069 printf( "Timer started.\n" );
00070 fflush( stdout );
00071
00072 TimerPulse::start();
00073 }
00074
00075 #endif // End of Timeout.cpp