home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / gnu / aplusplus-1.01-src.lha / APlusPlus-1.01 / TESTPRGS / exec / MsgPort_test.cxx < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-10  |  2.3 KB  |  95 lines

  1. /******************************************************************************
  2.  *
  3.  *    $Source: apphome:APlusPlus/RCS/TESTPRGS/exec/MsgPort_test.cxx,v $
  4.  *
  5.  *    Demo for the A++ Library
  6.  *    Copyright (C) 1994 by Armin Vogt, EMail: armin@uni-paderborn.de
  7.  *
  8.  *       $Revision: 1.3 $
  9.  *       $Date: 1994/04/23 21:26:36 $
  10.  *       $Author: Armin_Vogt $
  11.  *
  12.  ******************************************************************************/
  13.  
  14.  
  15. extern "C" {
  16. #include <dos/dos.h>
  17. }
  18. #include <iostream.h>
  19. #include <APlusPlus/exec/TimedMsgPort.h>
  20.  
  21.  
  22. volatile static char rcs_id[] = "$Id: MsgPort_test.cxx,v 1.3 1994/04/23 21:26:36 Armin_Vogt Exp Armin_Vogt $";
  23.  
  24.  
  25. class MySRSP:  public SignalResponder
  26. {
  27.    private:
  28.       BOOL running;
  29.    public:
  30.       MySRSP() : SignalResponder(SIGBREAKB_CTRL_C,0)
  31.       { running = TRUE; }
  32.       ~MySRSP() {}
  33.  
  34.       // overload the virtual 'signal received' action callback method.
  35.       void actionCallback()
  36.       {
  37.          cout << "**Break\n";
  38.          running = FALSE;
  39.       }
  40.  
  41.       BOOL hasNotOccured() { return running==TRUE; }
  42. };
  43.  
  44. /**************************** MyMsgPort ***********************************/
  45. class TM : public MessageC
  46. {
  47.     private:
  48.         const UBYTE *textString;
  49.     public:
  50.         TM(const UBYTE *text) { textString = text; }
  51.         const UBYTE *string() { return textString; }
  52.             
  53. }; 
  54.             
  55. class MyMsgPort : public TimedMsgPort
  56. {
  57.     public:
  58.         MyMsgPort(const UBYTE *portName,BYTE portPri=0,UWORD sendWindowSize=1) 
  59.         : TimedMsgPort(portName,portPri,sendWindowSize) { }
  60.         ~MyMsgPort() {}
  61.                 
  62.         void processMsg(MessageC *msg)
  63.         {
  64.             char c;
  65.             cout <<"#"<< (APTR)this << ": received message '"<<((TM*)msg)->string()<<"'\n";
  66.             cout <<"Press a key ->"; cin >> c; cout<<endl;
  67.         }
  68.         void processReply(MessageC *reply)
  69.         {
  70.             cout <<"#"<< (APTR)this << ": reply received\n";
  71.         }
  72. };
  73.  
  74. int main(int argc,char *argv[])
  75. {
  76.    MySRSP ctrlCBreak;
  77.       
  78.    cout << "SignalResponder - Test: please press CTRL-c to end this programm.\n";
  79.  
  80.    cout << "waiting..\n";
  81.     MyMsgPort p1((UBYTE*)"Port_1"), p2((UBYTE*)"Port_2");
  82.     TM tmsg1((UBYTE*)"Message_1"),tmsg2((UBYTE*)"Message_2");
  83.     
  84.     p1.sendMsgToPort(&tmsg1,(UBYTE*)"Port_2");
  85.     p2.sendMsgToPort(&tmsg2,(UBYTE*)"Port_1");    // send after first message has arrived.
  86.     
  87.    while ( ctrlCBreak.hasNotOccured() )
  88.    {        
  89.       SignalResponder::WaitSignal();
  90.    }
  91.  
  92.    cout << "Thank You. Goodbye.\n";
  93.    return 0;
  94. }
  95.