00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __INTERFACETABLE_H_
00021 #define __INTERFACETABLE_H_
00022
00023 #include <queue>
00024 #include <string>
00025 #include <vector>
00026 #include <time.h>
00027 #include <pthread.h>
00028 #include <semaphore.h>
00029
00030 using namespace std;
00031
00032 class RioSession;
00033
00034 class MonitorEvent
00035 {
00036 int type;
00037 public:
00038 MonitorEvent( int type );
00039 virtual ~MonitorEvent();
00040 int getType();
00041 };
00042
00043 class ClientListEvent : public MonitorEvent
00044 {
00045 char *ip;
00046 unsigned short port;
00047 public:
00048 ClientListEvent( char *ip, unsigned short port, int value = 0 );
00049 ~ClientListEvent();
00050 char *getIP();
00051 int getPort();
00052 };
00053
00054 class ConnectEvent : public ClientListEvent
00055 {
00056 char *video;
00057 public:
00058 ConnectEvent( char *ip, unsigned short port, char *video );
00059 ~ConnectEvent();
00060 char *getVideo();
00061 };
00062
00063 class UpdateQueueEvent : public ClientListEvent
00064 {
00065 int queue;
00066 public:
00067 UpdateQueueEvent( char *ip, unsigned short port, int value );
00068 int getQueue();
00069 };
00070
00071 class DisconnectEvent : public ClientListEvent
00072 {
00073 char *video;
00074 public:
00075 DisconnectEvent( char *ip, unsigned short port, char *video );
00076 ~DisconnectEvent();
00077 char *getVideo();
00078 };
00079
00080 class StorageListEvent : public MonitorEvent
00081 {
00082 char *hostname;
00083 public:
00084 StorageListEvent( char *hostname, int value = 0 );
00085 ~StorageListEvent();
00086 char *getHostName();
00087 };
00088
00089 class AddNodeEvent : public StorageListEvent
00090 {
00091 char *ip;
00092 public:
00093 AddNodeEvent( char *hostname, char *ip );
00094 ~AddNodeEvent();
00095 char *getIP();
00096 };
00097
00098 class AddDiskEvent : public StorageListEvent
00099 {
00100 char *diskname;
00101 public:
00102 AddDiskEvent( char *hostname, char *diskname );
00103 ~AddDiskEvent();
00104 char *getDiskName();
00105 };
00106
00107 class UpdateDiskQueueEvent : public StorageListEvent
00108 {
00109 char *diskname;
00110 int queue;
00111 public:
00112 UpdateDiskQueueEvent( char *hostname, char *diskname, int queue );
00113 ~UpdateDiskQueueEvent();
00114 char *getDiskName();
00115 int getQueue();
00116 };
00117
00118 struct ClientData
00119 {
00120 string m_ip;
00121 int m_port;
00122 string m_video;
00123 time_t m_time;
00124
00125 int m_queue;
00126 };
00127
00128 struct StorageData
00129 {
00130 string m_ip;
00131 string m_hostname;
00132 string m_diskname;
00133 int m_queue;
00134 };
00135
00136 class MonitorTable
00137 {
00138 vector<ClientData> client_data;
00139 vector<StorageData> storage_data;
00140 queue<MonitorEvent *> event_queue;
00141
00142 pthread_mutex_t table_access;
00143 sem_t event_queue_semaphore;
00144
00145 bool stopThread;
00146 public:
00147 MonitorTable();
00148 void getData( vector<ClientData> &clientTable,
00149 vector<StorageData> &storageTable );
00150 void putMonitorEvent( MonitorEvent *event );
00151 void Monitor();
00152
00153
00154
00155 void Stop();
00156
00157 };
00158
00159 #endif