00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _C_PROTOCOL_STATS_H
00021 #define _C_PROTOCOL_STATS_H
00022
00023 #include "iostream_t.hpp"
00024 #include "C_ProtocolFrame.hpp"
00025 #include "Utils.hpp"
00026 #include "C_DisplayObject.hpp"
00027 #include "C_ProtocolStatsFrame.hpp"
00028
00029 #include "C_Semaphore.hpp"
00030 #include "fstream_t.hpp"
00031 #include "TimeUtils.hpp"
00032
00033 #define TIME_LENGTH 32
00034
00035 class C_ProtocolStats : public C_DisplayObject,
00036 public C_ProtocolStatsFrame {
00037
00038 public:
00039
00040 C_ProtocolStats(C_ProtocolFrame *P_protocol) ;
00041 virtual ~C_ProtocolStats();
00042
00043 void updateStats (T_ProtocolStatDataType P_type,
00044 T_ProtocolStatDataAction P_action,
00045 int P_id);
00046
00047 iostream_output& display (iostream_output& P_stream);
00048
00049 void display_stats_message ();
00050 void display_stats_sub_message ();
00051
00052 void displayScreen() ;
00053 void setCurrentScreen(bool P_first) ;
00054
00055
00056 void set_file_name (char * name) ;
00057 void make_first_log () ;
00058 void make_log () ;
00059 int init () ;
00060 void do_log () ;
00061
00062 void reset_cumul_counters () ;
00063
00064
00065 protected:
00066 private:
00067
00068 class C_CounterData {
00069 public:
00070 T_CounterType m_counter_value ;
00071 T_CounterType m_counter_periodic_value ;
00072
00073
00074 T_CounterType m_counter_log_value ;
00075 T_CounterType m_counter_periodic_log_value ;
00076
00077 C_Semaphore m_sem ;
00078 C_Semaphore m_sem_log ;
00079
00080 } ;
00081
00082 typedef C_CounterData *C_pCounterData ;
00083
00084 int m_nb_counter_msg ;
00085 int m_nb_counter_msg_comp ;
00086
00087 C_pCounterData *m_counter_msg_comp_table ;
00088 C_pCounterData *m_counter_msg_table ;
00089
00090 int *m_id_msg_table ;
00091 int *m_id_msg_comp_table ;
00092 int m_max_id_msg ;
00093 int m_max_id_msg_comp ;
00094
00095 char *m_message_name ;
00096 char *m_message_component_name ;
00097 char **m_message_names ;
00098 char **m_message_component_names ;
00099
00100
00101 typedef void (C_ProtocolStats::* T_DisplayProtocolFct)() ;
00102
00103 int m_current_proto_stat_id ;
00104 int m_nb_stat_proto_id ;
00105 T_DisplayProtocolFct *m_current_proto_stat_table ;
00106 T_DisplayProtocolFct m_current_proto_stat_display ;
00107
00108
00109
00110 bool m_initDone ;
00111 struct timeval m_startTime;
00112 struct timeval m_plStartTime;
00113
00114 bool m_headerAlreadyDisplayed;
00115 char *m_fileName;
00116 fstream_output *m_outputStream;
00117 char* formatTime (struct timeval* P_tv);
00118 char* msToHHMMSS (unsigned long P_ms);
00119
00120 bool m_do_log ;
00121
00122 int m_counter_message ;
00123 int m_counter_message_comp ;
00124
00125 bool m_other_msg_screen ;
00126 bool m_other_msg_screen_comp ;
00127
00128
00129 } ;
00130
00131 #endif // _C_PROTOCOL_STATS_H
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150