home *** CD-ROM | disk | FTP | other *** search
- #ifndef CPP_EXEC_PORTS_H
- #define CPP_EXEC_PORTS_H
-
- // Message und Message Port Klasse
- //
- // Autor: Jochen Becher
- //
- // Historie:
- // Version 1.0 am 25. Juni 94
-
- #ifndef EXEC_PORTS_H
- #include <exec/ports.h>
- #endif
-
- #ifndef CPP_EXEC_SIGNALS_H
- #include <classes/exec/signals.h>
- #endif
-
- #ifndef CPP_EXEC_MEMORY_H
- #include <classes/exec/memory.h>
- #endif
-
- class MessageC : public Message, public PublicHeapC {
- public:
- MessageC(struct MsgPort *replyport = NULL);
- MessageC(class PortC &replyport);
- BOOL isReplied() const { return mn_Node.ln_Type == NT_REPLYMSG; };
- VOID reply();
- };
-
- class PortC : public SignalHandlerC, protected ShareC {
- public:
- PortC() throw (PortX, MemoryX);
- PortC(STRPTR name, BYTE pri = 0) throw (PortX, MemoryX);
- PortC(struct MsgPort *) throw (PortX, MemoryX);
- PortC(const PortC &);
- ~PortC();
- PortC &operator= (const PortC &);
- MsgPort *port() const { return msgport; };
- BOOL forMe(ULONG);
- BOOL handle(ULONG);
- BOOL isEmpty() const { return IsMsgPortEmpty(msgport); };
- VOID flush();
- protected:
- virtual BOOL handleMsg(MessageC &);
- private:
- MsgPort *msgport;
- BOOL pub,own;
- };
-
- class MessageHandlerC : public NodeC {
- friend class HandlerPortC;
- friend class HandlerChainC;
- public:
- MessageHandlerC() : NodeC() { };
- ~MessageHandlerC() { };
- virtual BOOL forMe(MessageC &) { return FALSE; };
- virtual BOOL handle(MessageC &) { return FALSE; };
- virtual BOOL exit() { return FALSE; };
- };
-
- class HandlerChainC : protected ListC {
- public:
- HandlerChainC() : ListC() { _exit = FALSE };
- ~HandlerChainC() { };
- VOID add(MessageHandlerC &);
- BOOL handle(MessageC &);
- BOOL exit() { return _exit; };
- private:
- BOOL _exit;
- };
-
- class MessageHandlerChainC : public MessageHandlerC, public HandlerChainC {
- public:
- MessageHandlerChainC()
- : MessageHandlerC(), HandlerChainC() { };
- ~MessageHandlerChainC() { };
- BOOL handle(MessageC &msg) { return HandlerChainC::handle(msg); };
- BOOL exit() { return HandlerChainC::exit(); };
- };
-
- class HandlerPortC : public PortC, protected ListC {
- public:
- HandlerPortC() throw (PortX, MemoryX)
- : PortC(), ListC() { };
- HandlerPortC(STRPTR name, BYTE pri = 1) throw (PortX, MemoryX)
- : PortC(name,pri), ListC() { };
- HandlerPortC(MsgPort *port) throw (PortX, MemoryX)
- : PortC(port), ListC() { };
- VOID add(MessageHandlerC &h);
- protected:
- BOOL handleMsg(MessageC &);
- };
-
- class SendPortC {
- public:
- SendPortC(PortC &) throw (PortX);
- SendPortC(struct MsgPort *) throw (PortX);
- SendPortC(STRPTR name) throw (PortX);
- ~SendPortC();
- struct MsgPort *port() const { return msgport; };
- BOOL send(MessageC &);
- private:
- struct MsgPort *msgport;
- STRPTR portname;
- };
-
- #endif
-