Main Page | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

CSMessageDispatchable.h

Go to the documentation of this file.
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

Generated on Wed Jul 14 00:43:31 2004 for CSLib by doxygen 1.3.6