home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume26 / mnl-rpc++-2.3.1 / part01 / example / server.cc < prev   
Encoding:
C/C++ Source or Header  |  1993-04-24  |  2.4 KB  |  113 lines

  1. // -*- c++ -*-
  2. static char _server_cc_[]
  3. = "server.cc,v 2.3 1992/06/15 19:13:18 mnl Exp";
  4.  
  5. // server.cc,v
  6. // Revision 2.3  1992/06/15  19:13:18  mnl
  7. // Fixed a few bugs, clarified interface.
  8. //
  9. // Revision 2.2  1992/06/13  14:27:33  mnl
  10. // Adapted to (patched) gcc-2.2. Fixed several bugs.
  11. //
  12. // Revision 2.1.1.1  1992/03/08  13:28:45  mnl
  13. // Initial mnl version.
  14. //
  15.  
  16. #include <unistd.h>
  17. #include <stream.h>
  18. #include <string.h>
  19. #include <malloc.h>
  20.  
  21. #include "rpc++/service.h"
  22. #include "calcsvc.h"
  23.  
  24. class Calc
  25. {
  26. public:
  27.   void* Add (void*, void*);
  28.   void* Sub (void*, void*);
  29.   void* Times (void*, void*);
  30.   void* Div (void*, void*);
  31.   void* Inc (void*);
  32.   void* IToA (void**);
  33.   void Reset (RpcService*);
  34. };
  35.  
  36. void* Calc::Add (void* in1, void* in2)
  37. {
  38.   static int res;
  39.   res = *(int*)in1 + *(int*)in2;
  40.   return &res;
  41. }
  42.  
  43. void* Calc::Sub (void* in1, void* in2)
  44. {
  45.   static int res;
  46.   res = *(int*)in1 - *(int*)in2;
  47.   return &res;
  48. }
  49.  
  50. void* Calc::Times (void* in1, void* in2)
  51. {
  52.   static int res;
  53.   res = *(int*)in1 * *(int*)in2;
  54.   return &res;
  55. }
  56.  
  57. void* Calc::Div (void* in1, void* in2)
  58. {
  59.   static int res;
  60.   res = *(int*)in1 / *(int*)in2;
  61.   return &res;
  62. }
  63.  
  64. void* Calc::Inc (void* in)
  65. {
  66.   static int res;
  67.   res = *(int*)in + 1;
  68.   return &res;
  69. }
  70.  
  71. void* Calc::IToA (void** in)
  72. {
  73.   static char *s = 0;
  74.   delete s;
  75.   char *t = form ("%d", *(int*)in[0]);
  76.   s = new char[strlen (t) + 1];
  77.   strcpy (s, t);
  78.   return &s;
  79. }
  80.  
  81. void Calc::Reset (RpcService* svc)
  82. {
  83.   cout << "Received reset from " << svc->CallerName () << ".\n";
  84. }
  85.  
  86. void printMessage (void* in)
  87. {
  88.   cout << *(char**)in;
  89. }
  90.  
  91. void doSleep (void* in)
  92. {
  93.   cout << form ("Sleeping %d secs.\n", *(int*)in);
  94.   sleep (*(int*)in);
  95.   cout << "Woke up.\n";
  96. }
  97.  
  98. main ()
  99. {
  100.   RpcService svc (CALCSVC, 1);
  101.   Calc calc;
  102.   svc.Register (CalcRequests::Add, RpcMethodCall<Calc> (&calc, &calc.Add));
  103.   svc.Register (CalcRequests::Sub, RpcMethodCall<Calc> (&calc, &calc.Sub));
  104.   svc.Register (CalcRequests::Times, RpcMethodCall<Calc> (&calc, &calc.Times));
  105.   svc.Register (CalcRequests::Div, RpcMethodCall<Calc> (&calc, &calc.Div));
  106.   svc.Register (CalcRequests::Inc, RpcMethodCall<Calc> (&calc, &calc.Inc));
  107.   svc.Register (CalcRequests::IToA,RpcMethodCall<Calc>(&calc, &calc.IToA));
  108.   svc.Register (CalcRequests::Reset, RpcMethodCall<Calc> (&calc, &calc.Reset));
  109.   svc.Register (CalcRequests::Msg, RpcCallback (printMessage));
  110.   svc.Register (CalcRequests::Sleep, RpcCallback (doSleep));
  111.   svc.Provide ();
  112. }
  113.