95afe9b7e35b4c01614a7bfdbdd51c5c981e6c7a
[iot2.git] / iotjava / iotrmi / C++ / sample / TestClass_Skeleton.hpp
1 #include <iostream>
2 #include "../IoTRMIObject.hpp"
3 #include "TestClass.hpp"
4
5 using namespace std;
6
7 class TestClass_Skeleton {
8         public:
9                 TestClass_Skeleton(TestClassInterface* _tc, int _port);
10                 ~TestClass_Skeleton();
11
12                 void    waitRequestInvokeMethod();
13
14         private:                
15                 TestClassInterface              *tc;
16                 IoTRMIObject                    *rmiObj;
17                 //CallBackInterface cbstub;
18
19                 const static int size = 8;
20                 string methodSignatures[size] = {
21
22                         "voidsetA(int)",
23                         "voidsetB(float)",
24                         "voidsetC(string)",
25                         "sumArray(string[])",
26                         "intsetAndGetA(int)",
27                         "intsetACAndGetA(string,int)",
28                         "intcallBack()",
29                         "voidregisterCallBack(CallBackInterface)"
30                 };
31 };
32
33
34 TestClass_Skeleton::TestClass_Skeleton(TestClassInterface* _tc, int _port) {
35
36         bool _bResult = false;
37         tc = _tc;
38         rmiObj = new IoTRMIObject(_port, &_bResult, methodSignatures, size);
39 }
40
41
42 TestClass_Skeleton::~TestClass_Skeleton() {
43
44         if (rmiObj != NULL) {
45                 delete rmiObj;
46                 rmiObj = NULL;
47         }
48 }
49
50
51 void TestClass_Skeleton::waitRequestInvokeMethod() {
52
53         // Loop continuously waiting for incoming bytes
54         while (true) {
55
56                 rmiObj->getMethodBytes();
57                 string methodSign = rmiObj->getSignature();
58                 cout << "Method sign: " << methodSign << endl;
59                 
60                 if (methodSign.compare("voidsetA(int)") == 0) {
61                         string paramCls[] = { "int" };
62                         int numParam = 1;
63                         int param1 = 0;
64                         void* paramObj[] = { &param1 };
65                         rmiObj->getMethodParams(paramCls, numParam, paramObj);
66                         tc->setA(param1);
67                 } else if (methodSign.compare("voidsetB(float)") == 0) {
68                         string paramCls[] = { "float" };
69                         int numParam = 1;
70                         float param1 = 0.0;
71                         void* paramObj[] = { &param1 };
72                         rmiObj->getMethodParams(paramCls, numParam, paramObj);
73                         tc->setB(param1);
74                 } else if (methodSign.compare("voidsetC(string)") == 0) {
75                         string paramCls[] = { "string" };
76                         int numParam = 1;
77                         string param1 = "";
78                         void* paramObj[] = { &param1 };
79                         rmiObj->getMethodParams(paramCls, numParam, paramObj);
80                         tc->setC(param1);
81                 } else if (methodSign.compare("sumArray(string[])") == 0) {
82                         string paramCls[] = { "string[]" };
83                         int numParam = 1;
84                         vector<string> param1;
85                         void* paramObj[] = { &param1 };
86                         rmiObj->getMethodParams(paramCls, numParam, paramObj);
87                         string retVal = tc->sumArray(param1);
88                         void* retObj = &retVal;
89                         rmiObj->sendReturnObj(retObj, "string");
90                 } else if (methodSign.compare("intsetAndGetA(int)") == 0) {
91                         string paramCls[] = { "int" };
92                         int numParam = 1;
93                         int param1 = 0;
94                         void* paramObj[] = { &param1 };
95                         rmiObj->getMethodParams(paramCls, numParam, paramObj);
96                         int retVal = tc->setAndGetA(param1);
97                         void* retObj = &retVal;
98                         rmiObj->sendReturnObj(retObj, "int");
99                 } else if (methodSign.compare("intsetACAndGetA(string,int)") == 0) {
100                         string paramCls[] = { "string", "int" };
101                         int numParam = 2;
102                         string param1 = "";
103                         int param2 = 0;
104                         void* paramObj[] = { &param1, &param2 };
105                         rmiObj->getMethodParams(paramCls, numParam, paramObj);
106                         int retVal = tc->setACAndGetA(param1, param2);
107                         void* retObj = &retVal;
108                         rmiObj->sendReturnObj(retObj, "int");
109                 /*} else if (methodSign.compare("voidregisterCallBack(CallBackInterface)") == 0) {
110                         //
111                 } else if (methodSign.compare("intcallBack()") == 0) {
112                         //*/
113                 } else {
114                         string error = "Signature unreqcognized: " + string(methodSign);
115                         throw error;
116                 }
117         }
118 }
119
120
121 /*void TestClass_Stub::registerCallback(CallBackInterface _cb) {
122
123         cb = _cb;
124 }
125
126
127 int TestClass_Stub::callBack() {
128
129         return cb.printInt();
130 }*/
131