00001 #ifndef CS_MESSAGE_DISPATCHABLE_H 00002 #define CS_MESSAGE_DISPATCHABLE_H 00003 00004 #include <vector> 00005 #include "CSLog.h" 00006 00007 class CSMessageListener; 00008 class CSMessage; 00009 class CSMessageDispatchable; 00010 class ListenerInterested; 00011 00012 typedef std::vector<CSMessageListener*> CSMessageListeners; 00013 typedef std::vector<ListenerInterested *> ListenerInteresteds; 00014 00015 class ListenerInterested 00016 { 00017 friend CSMessageDispatchable; 00018 private: 00019 CSMessageListener *mListener; 00020 int mInterestedIn; 00021 public: 00022 ListenerInterested(CSMessageListener *l, int i = -1) 00023 { 00024 mListener = l; 00025 mInterestedIn = i; 00026 } 00027 }; 00028 00029 typedef std::vector<CSMessageListener*> CSMessageListeners; 00030 00031 /** 00032 This is the base class for all classes that wish to dispatch messages 00033 to other classes.<BR> 00034 00035 Just inherit from this class and everything should be fine. 00036 There are only three self explanatory methods:<BR> 00037 <PRE> 00038 // send a message according to its type and priority - now, or later 00039 void sendMessage(CSMessage &message); 00040 00041 // can't add same listener twice! 00042 void addMessageListener(CSMessageListener* listener); 00043 00044 // return # of listeners removed - should allways be 0 or 1 00045 int removeMessageListener(CSMessageListener* listener); 00046 00047 </PRE> 00048 A message is allways sent to ALL listeners! 00049 00050 */ 00051 class CSMessageDispatchable 00052 { 00053 private: 00054 ListenerInteresteds mListeners; 00055 00056 public: 00057 CSMessageDispatchable() {} 00058 virtual ~CSMessageDispatchable() {} 00059 static const char *CLASS; 00060 virtual std::string getType() {return (std::string) CLASS;} 00061 00062 /** send a message according to its type and priority - now, or later */ 00063 void sendMessage(CSMessage &message); 00064 00065 /** can't add same listener twice! */ 00066 void addMessageListener(CSMessageListener* listener, int typeOfMessage = -1); 00067 00068 /** return # of listeners removed - should allways be 0 or 1 */ 00069 int removeMessageListener(CSMessageListener* listener); 00070 00071 /** return # of listeners removed - should allways be 0 or 1 */ 00072 int removeMessageListener(CSMessageListener* listener, int typeOfMessage); 00073 }; 00074 00075 #endif // CS_MESSAGE_DISPATCHABLE_H