home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / OTL-MC7.DMS / in.adf / classes.lha / Classes / Exec / Ports.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-01-31  |  2.6 KB  |  109 lines

  1. #ifndef CPP_EXEC_PORTS_H
  2. #define CPP_EXEC_PORTS_H
  3.  
  4. // Message und Message Port Klasse
  5. //
  6. // Autor: Jochen Becher
  7. //
  8. // Historie:
  9. // Version 1.0 am 25. Juni 94
  10.  
  11. #ifndef EXEC_PORTS_H
  12. #include <exec/ports.h>
  13. #endif
  14.  
  15. #ifndef CPP_EXEC_SIGNALS_H
  16. #include <classes/exec/signals.h>
  17. #endif
  18.  
  19. #ifndef CPP_EXEC_MEMORY_H
  20. #include <classes/exec/memory.h>
  21. #endif
  22.  
  23. class MessageC : public Message, public PublicHeapC {
  24. public:
  25.     MessageC(struct MsgPort *replyport = NULL);
  26.     MessageC(class PortC &replyport);
  27.     BOOL isReplied() const { return mn_Node.ln_Type == NT_REPLYMSG; };
  28.     VOID reply();
  29. };
  30.  
  31. class PortC : public SignalHandlerC, protected ShareC {
  32. public:
  33.     PortC() throw (PortX, MemoryX);
  34.     PortC(STRPTR name, BYTE pri = 0) throw (PortX, MemoryX);
  35.     PortC(struct MsgPort *) throw (PortX, MemoryX);
  36.     PortC(const PortC &);
  37.     ~PortC();
  38.     PortC &operator= (const PortC &);
  39.     MsgPort *port() const { return msgport; };
  40.     BOOL forMe(ULONG);
  41.     BOOL handle(ULONG);
  42.     BOOL isEmpty() const { return IsMsgPortEmpty(msgport); };
  43.     VOID flush();
  44. protected:
  45.     virtual BOOL handleMsg(MessageC &);
  46. private:
  47.     MsgPort *msgport;
  48.     BOOL pub,own;
  49. };
  50.  
  51. class MessageHandlerC : public NodeC {
  52. friend class HandlerPortC;
  53. friend class HandlerChainC;
  54. public:
  55.     MessageHandlerC() : NodeC() { };
  56.     ~MessageHandlerC() { };
  57.     virtual BOOL forMe(MessageC &) { return FALSE; };
  58.     virtual BOOL handle(MessageC &) { return FALSE; };
  59.     virtual BOOL exit() { return FALSE; };
  60. };
  61.  
  62. class HandlerChainC : protected ListC {
  63. public:
  64.     HandlerChainC() : ListC() { _exit = FALSE };
  65.     ~HandlerChainC() { };
  66.     VOID add(MessageHandlerC &);
  67.     BOOL handle(MessageC &);
  68.     BOOL exit() { return _exit; };
  69. private:
  70.     BOOL _exit;
  71. };
  72.  
  73. class MessageHandlerChainC : public MessageHandlerC, public HandlerChainC {
  74. public:
  75.     MessageHandlerChainC()
  76.         : MessageHandlerC(), HandlerChainC() { };
  77.     ~MessageHandlerChainC() { };
  78.     BOOL handle(MessageC &msg) { return HandlerChainC::handle(msg); };
  79.     BOOL exit() { return HandlerChainC::exit(); };
  80. };
  81.  
  82. class HandlerPortC : public PortC, protected ListC {
  83. public:
  84.     HandlerPortC() throw (PortX, MemoryX)
  85.         : PortC(), ListC() { };
  86.     HandlerPortC(STRPTR name, BYTE pri = 1) throw (PortX, MemoryX)
  87.         : PortC(name,pri), ListC() { };
  88.     HandlerPortC(MsgPort *port) throw (PortX, MemoryX)
  89.         : PortC(port), ListC() { };
  90.     VOID add(MessageHandlerC &h);
  91. protected:
  92.     BOOL handleMsg(MessageC &);
  93. };
  94.  
  95. class SendPortC {
  96. public:
  97.     SendPortC(PortC &) throw (PortX);
  98.     SendPortC(struct MsgPort *) throw (PortX);
  99.     SendPortC(STRPTR name) throw (PortX);
  100.     ~SendPortC();
  101.     struct MsgPort *port() const { return msgport; };
  102.     BOOL send(MessageC &);
  103. private:
  104.     struct MsgPort *msgport;
  105.     STRPTR portname;
  106. };
  107.  
  108. #endif
  109.