diff options
Diffstat (limited to 'yhttpd/src/time')
| -rw-r--r-- | yhttpd/src/time/timo.cpp | 38 | ||||
| -rw-r--r-- | yhttpd/src/time/timo.h | 22 | ||||
| -rw-r--r-- | yhttpd/src/time/timr.cpp | 177 | ||||
| -rw-r--r-- | yhttpd/src/time/timr.h | 64 |
4 files changed, 301 insertions, 0 deletions
diff --git a/yhttpd/src/time/timo.cpp b/yhttpd/src/time/timo.cpp new file mode 100644 index 0000000..fd89bdf --- /dev/null +++ b/yhttpd/src/time/timo.cpp @@ -0,0 +1,38 @@ +#ifndef TIMO_CPP +#define TIMO_CPP + +#include "timo.h" + +using namespace std; + +timo::timo() +{ + pthread_mutex_init( &mut_t_time, NULL ); +} + +timo::~timo() +{ + pthread_mutex_destroy( &mut_t_time ); +} + +double +timo::get_last_activity( ) +{ + double d_ret; + + pthread_mutex_lock ( &mut_t_time ); + d_ret = wrap::TIMR->get_time_diff( t_time ); + pthread_mutex_unlock( &mut_t_time ); + + return d_ret; +} + +void +timo::renew_timeout( ) +{ + pthread_mutex_lock ( &mut_t_time ); + time( &t_time ); + pthread_mutex_unlock( &mut_t_time ); +} + +#endif diff --git a/yhttpd/src/time/timo.h b/yhttpd/src/time/timo.h new file mode 100644 index 0000000..ea160c1 --- /dev/null +++ b/yhttpd/src/time/timo.h @@ -0,0 +1,22 @@ +#include "../incl.h" + +#ifndef TIMO_H +#define TIMO_H + +using namespace std; + +class timo // timeout class +{ +protected: + time_t t_time; // last activity time. + pthread_mutex_t mut_t_time; + +public: + timo( ); + ~timo( ); + + double get_last_activity(); + virtual void renew_timeout(); +}; + +#endif diff --git a/yhttpd/src/time/timr.cpp b/yhttpd/src/time/timr.cpp new file mode 100644 index 0000000..c7f80ee --- /dev/null +++ b/yhttpd/src/time/timr.cpp @@ -0,0 +1,177 @@ +#ifndef TIMR_CPP +#define TIMR_CPP + +#include <sys/time.h> +#include "timr.h" + +using namespace std; + +timr::timr() +{ + wrap::system_message( TIMERIN ); + b_timer_active = true; + + pthread_mutex_init( &mut_s_time, NULL); + pthread_mutex_init( &mut_s_uptime, NULL); + pthread_mutex_init( &mut_i_offset, NULL); + + i_time_offset = tool::string2int( wrap::CONF->get_elem("chat.timeoffset") ); + wrap::system_message( TIMEROF + tool::int2string( i_time_offset ) ); + + s_time = "00:00:00"; + s_uptime = "00:00:00"; +} + +timr::~timr() +{ + pthread_mutex_destroy( &mut_s_time ); + pthread_mutex_destroy( &mut_s_uptime ); + pthread_mutex_destroy( &mut_i_offset ); +} + +bool +timr::get_timer_active() const +{ + return b_timer_active; +} + +int +timr::get_offset() +{ + pthread_mutex_lock ( &mut_i_offset ); + int i_ret_val = i_time_offset; + pthread_mutex_unlock( &mut_i_offset ); + return i_ret_val; +} + +void +timr::start( void *v_ptr ) +{ + wrap::system_message( TIMERTH ); + +#ifdef NCURSES + + print_time( ); +#endif + + time_t clock_start; + time_t clock_now; + + time( &clock_start ); + tm time_start = *localtime( &clock_start ); + tm time_now; + + while ( get_timer_active() ) + { + // sleep a second! + usleep( 1000000 ); + + // get the current time! + time( &clock_now ); + + time_now = *localtime( &clock_now ); + + // set the current time && the current yhttpd uptime! + set_time( difftime( clock_now, clock_start ), + time_now.tm_sec, time_now.tm_min, time_now.tm_hour ); + +#ifdef NCURSES + + if (wrap::NCUR->is_ready()) + print_time( ); +#endif + + // run every minute: + if ( time_now.tm_sec == 0 ) + { +#ifdef SERVMSG + cout << TIMERUP << get_uptime() << endl; +#endif + // Run every ten minutes: + if ( time_now.tm_min % 10 == 0 ) + { + + wrap::SOCK->clean_ipcache(); + // Run every hour + if ( time_now.tm_min % 60 == 0 ) + { + + // Run every day + if (time_now.tm_min == 0 || time_now.tm_min == 60 ) + if (time_now.tm_hour == 0 || time_now.tm_hour == 24) + wrap::STAT->update_rusage_history(); + } + } + } + } +} + +#ifdef NCURSES +void +timr::print_time( ) +{ + if ( !wrap::NCUR->is_ready() ) + return; + + mvprintw( NCUR_TIME_X, NCUR_TIME_Y, "Time: %s ", get_time().c_str()); + mvprintw( NCUR_UPTIME_X, NCUR_UPTIME_Y, "Uptime: %s ", get_uptime().c_str()); + refresh(); +} +#endif + +void +timr::set_time( double d_uptime, int i_cur_seconds, int i_cur_minutes, int i_cur_hours ) +{ + + int i_hours = (int) d_uptime / 3600; + int i_minutes = (int) d_uptime / 60; + + while ( i_minutes >= 60 ) + i_minutes -= 60; + + while ( d_uptime >= 60 ) + d_uptime -= 60; + + // Calculate offset time + i_cur_hours += get_offset(); + + for ( int i = 24-i_cur_hours; i < 0; i = 24-i_cur_hours ) + i_cur_hours =- i; + + if (i_cur_hours == 24) + i_cur_hours = 0; + + pthread_mutex_lock ( &mut_s_time ); + s_time = add_zero_to_front( tool::int2string( i_cur_hours ) ) + ":" + + add_zero_to_front( tool::int2string( i_cur_minutes ) ) + ":" + + add_zero_to_front( tool::int2string( i_cur_seconds ) ); + pthread_mutex_unlock( &mut_s_time ); + + pthread_mutex_lock ( &mut_s_uptime ); + s_uptime = add_zero_to_front( tool::int2string( i_hours ) ) + ":" + + add_zero_to_front( tool::int2string( i_minutes ) ) + ":" + + add_zero_to_front( tool::int2string( (int) d_uptime ) ); + pthread_mutex_unlock( &mut_s_uptime ); +} + +string +timr::add_zero_to_front( string s_time ) +{ + if ( s_time.length() == 1 ) + { + string s_new = "0" + s_time; + return s_new; + } + + return s_time; +} + +double +timr::get_time_diff( time_t &clock_diff ) +{ + time_t clock_now; + time( &clock_now ); + + return difftime(clock_now, clock_diff); +} +#endif diff --git a/yhttpd/src/time/timr.h b/yhttpd/src/time/timr.h new file mode 100644 index 0000000..12cdd8f --- /dev/null +++ b/yhttpd/src/time/timr.h @@ -0,0 +1,64 @@ +#include "../incl.h" + +#ifndef TIMR_H +#define TIMR_H + +#include "../thrd/thro.h" + +#include <unistd.h> + +using namespace std; + +class timr : public thro +{ +private: + bool b_timer_active; + int i_time_offset; + string s_uptime; + string s_time; + + pthread_mutex_t mut_s_time; + pthread_mutex_t mut_s_uptime; + pthread_mutex_t mut_i_offset; + +public: + timr(); + ~timr(); + + bool get_timer_active() const; + void start( void *v_ptr ); + +#ifdef NCURSES + + void print_time(); +#endif + + void set_time( double d_uptime, int i_cur_seconds, int i_cur_minutes, int i_cur_hours ); + string add_zero_to_front( string s_time ); + + // inline for dynamic module access! + string + get_time( ) + { + string s_ret; + pthread_mutex_lock ( &mut_s_time ); + s_ret = this->s_time; + pthread_mutex_unlock( &mut_s_time ); + return s_ret; + } + + string + get_uptime( ) + { + string s_ret; + pthread_mutex_lock ( &mut_s_uptime ); + s_ret = this->s_uptime; + pthread_mutex_unlock( &mut_s_uptime ); + return s_ret; + } + + int get_offset(); + double get_time_diff( time_t &clock_diff ); +}; + +#endif |
