00001 /* 00002 * Copyright (C) 2009, Edmundo Albuquerque de Souza e Silva. 00003 * 00004 * This file may be distributed under the terms of the Q Public License 00005 * as defined by Trolltech AS of Norway and appearing in the file 00006 * LICENSE.QPL included in the packaging of this file. 00007 * 00008 * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING 00009 * THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00010 * PURPOSE. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, 00011 * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING 00012 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, 00013 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 00014 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 00015 * 00016 * Thanks: Jose Renato Santos 00017 * 00018 */ 00019 00020 /////////////////////////////////////////////////////////////////////////////// 00021 // Event.h: declaration of CEvent and CEventQueue 00022 // Events are elements queued and processed by 00023 // StreamManager and Router 00024 /////////////////////////////////////////////////////////////////////////////// 00025 00026 #ifndef __EVENT_H_ 00027 #define __EVENT_H_ 00028 00029 #include "RioTypes.h" 00030 #include "ServerTypes.h" 00031 #include "msgrouterstorage.h" 00032 #include "RioQueue.h" 00033 00034 typedef enum 00035 { 00036 EventTypeStorageRequest = 1, 00037 EventTypeStorageReply = 2, 00038 EventTypeRTDataRequest = 3, 00039 EventTypeNRTDataRequest = 4, 00040 EventTypeAddDisk = 5, 00041 EventTypeTimeOut = 6, 00042 EventTypeStorageDown = 7, 00043 EventTypeStorageUp = 8, 00044 EventTypeFinalizeThread = 9 00045 }EventType; 00046 00047 // Event structure (item queued on router or stream manager input queue) 00048 struct Event 00049 { 00050 Event *linkf; 00051 Event *linkb; 00052 EventType Type; 00053 }; 00054 00055 struct EventDataRequest 00056 { 00057 Event Header; 00058 DataRequest Request; 00059 }; 00060 00061 struct EventStorageRequest 00062 { 00063 Event Header; 00064 MsgRSSrouter StorageRequest; // storage node query 00065 }; 00066 00067 struct EventStorageReply 00068 { 00069 Event Header; 00070 MsgRSSstorage StorageReply; // storage node reply 00071 }; 00072 00073 struct EventAddDisk 00074 { 00075 Event Header; 00076 int Disk; 00077 }; 00078 00079 struct EventTimeOut 00080 { 00081 Event Header; 00082 }; 00083 00084 struct EventStorageDown 00085 { 00086 Event Header; 00087 int StorageId; 00088 bool EmptyStorageQueue; 00089 }; 00090 00091 struct EventStorageUp 00092 { 00093 Event Header; 00094 int StorageId; 00095 }; 00096 00097 struct EventFinalizeThread 00098 { 00099 Event Header; 00100 }; 00101 00102 /////////////////////////////////////////////////////////////////////////////// 00103 class EventQueue 00104 { 00105 public: 00106 EventQueue() {}; 00107 ~EventQueue() {}; 00108 void Put(Event *ep) { m_queue.Put( (RioQueueEle *) ep); } 00109 Event *Get() { return (Event *) m_queue.Get(); } 00110 // Nova funcao para remover todos os eventos da fila (isso nao pode ser 00111 // feito usando Get, porque a thread, caso nao existam eventos a serem 00112 // removidos, ficara bloqueada ate que um evento seja colocado na fila). 00113 Event *Remove() { return ( Event * ) m_queue.Remove(); } 00114 private: 00115 RioQueue m_queue; 00116 }; 00117 00118 /////////////////////////////////////////////////////////////////////////////// 00119 class CEventManager 00120 { 00121 public: 00122 CEventManager(); 00123 ~CEventManager(); 00124 00125 int Initialize ( EventType Type, int n ); 00126 Event* New ( EventType Type ); 00127 void Free ( Event *event ); 00128 00129 private: 00130 EventDataRequest* m_VectorRTDataRequest; 00131 EventQueue m_FreeRTDataRequest; 00132 EventDataRequest* m_VectorNRTDataRequest; 00133 EventQueue m_FreeNRTDataRequest; 00134 EventStorageRequest* m_VectorStorageRequest; 00135 EventQueue m_FreeStorageRequest; 00136 EventStorageReply* m_VectorStorageReply; 00137 EventQueue m_FreeStorageReply; 00138 EventAddDisk* m_VectorAddDisk; 00139 EventQueue m_FreeAddDisk; 00140 EventTimeOut* m_VectorTimeOut; 00141 EventQueue m_FreeTimeOut; 00142 EventStorageDown* m_VectorStorageDown; 00143 EventQueue m_FreeStorageDown; 00144 EventStorageUp* m_VectorStorageUp; 00145 EventQueue m_FreeStorageUp; 00146 EventFinalizeThread* m_VectorFinalizeThread; 00147 EventQueue m_FreeFinalizeThread; 00148 }; 00149 #endif //__EVENT_H_