00001 #include "message.hh"
00002
00003 struct int_int_t
00004 {
00005 int a, b;
00006 };
00007
00008 struct int_int_m
00009 {
00010 int msg;
00011 int_int_t data;
00012 };
00013
00014 int unmarshal_int_int_rint( Message_thread*,
00015 Message_thread::method_type,
00016 int,
00017 char*,
00018 Message_thread::pid_type);
00019
00020 struct charp_t
00021 {
00022 char* p;
00023 };
00024
00025 struct charp_m
00026 {
00027 int msg;
00028 charp_t data;
00029 };
00030
00031 int unmarshal_charp_rnone( Message_thread*,
00032 Message_thread::method_type,
00033 int,
00034 char*,
00035 Message_thread::pid_type);
00036
00037 class Message_test : public Message_thread
00038 {
00039 public:
00040 int add(int a, int b);
00041 int subtract(int a, int b);
00042 void print(const char* s);
00043
00044 enum message_t
00045 {
00046 END,
00047 ADD,
00048 SUBTRACT,
00049 PRINT
00050 };
00051 protected:
00052 DECLARE_MESSAGE_TABLE;
00053
00054 };
00055
00056 class Message_test_proxy
00057 {
00058 Message_test mt;
00059 public:
00060 Message_test_proxy()
00061 {
00062 mt.start();
00063 }
00064 ~Message_test_proxy()
00065 {
00066 const int terminate = Message_test::END;
00067 mt.send(&terminate, sizeof(terminate), NULL, 0);
00068 }
00069 int add(int a, int b)
00070 {
00071 int_int_m buffer;
00072 int reply;
00073 buffer.msg = Message_test::ADD;
00074 buffer.data.a = a;
00075 buffer.data.b = b;
00076 mt.send(&buffer, sizeof(buffer), &reply, sizeof(reply));
00077 return reply;
00078 }
00079 int subtract(int a, int b)
00080 {
00081 int_int_m buffer;
00082 int reply;
00083 buffer.msg = Message_test::SUBTRACT;
00084 buffer.data.a = a;
00085 buffer.data.b = b;
00086 mt.send(&buffer, sizeof(buffer), &reply, sizeof(reply));
00087 return reply;
00088 }
00089 void print(char* p)
00090 {
00091 charp_m buffer;
00092 int reply;
00093 buffer.msg = Message_test::PRINT;
00094 buffer.data.p = p;
00095 mt.send(&buffer, sizeof(buffer), &reply, sizeof(reply));
00096 }
00097 };