1 #ifndef _TESTCLASS_SKELETON_HPP__
2 #define _TESTCLASS_SKELETON_HPP__
5 #include "../IoTRMIObject.hpp"
6 #include "../IoTRMICall.hpp"
7 #include "CallBack_CBStub.hpp"
8 #include "TestClassInterface.hpp"
12 class TestClass_Skeleton : public TestClassInterface {
14 TestClass_Skeleton(TestClassInterface* _tc, int _port);
15 ~TestClass_Skeleton();
17 void waitRequestInvokeMethod();
19 void setB(float _float);
20 void setC(string _string);
21 string sumArray(vector<string> newA);
22 //int64_t sumArray(vector<int> newA);
23 int setAndGetA(int newA);
24 int setACAndGetA(string newC, int newA);
25 void registerCallback(CallBackInterface* _cb);
26 void registerCallback(vector<CallBackInterface*> _cb);
28 void handleStruct(vector<data> vecData);
30 const static int size = 12;
31 const static string methodSignatures[size];
34 TestClassInterface *tc;
38 vector<CallBackInterface*> vecCBObj;
39 //CallBackInterface cbstub;
43 const string TestClass_Skeleton::methodSignatures[TestClass_Skeleton::size] = {
50 "intsetACAndGetA(string,int)",
52 "voidregisterCallBack(CallBackInterface)",
53 "voidregisterCallBack(CallBackInterface[])",
55 "handleStruct(StructJ[])",
60 int TestClass_Skeleton::objIdCnt = 0;
63 TestClass_Skeleton::TestClass_Skeleton(TestClassInterface* _tc, int _port) {
65 bool _bResult = false;
67 cout << "Reached here 1!" << endl;
68 rmiObj = new IoTRMIObject(_port, &_bResult, methodSignatures, size);
69 cout << "Reached here 2!" << endl;
70 waitRequestInvokeMethod();
74 TestClass_Skeleton::~TestClass_Skeleton() {
80 if (rmiCall != NULL) {
84 for(CallBackInterface* cb : vecCBObj) {
91 void TestClass_Skeleton::waitRequestInvokeMethod() {
94 // Loop continuously waiting for incoming bytes
97 rmiObj->getMethodBytes();
98 string methodSign = rmiObj->getSignature();
99 cout << "Method sign: " << methodSign << endl;
101 if (methodSign.compare("voidsetA(int)") == 0) {
102 string paramCls[] = { "int" };
105 void* paramObj[] = { ¶m1 };
106 rmiObj->getMethodParams(paramCls, numParam, paramObj);
108 } else if (methodSign.compare("voidsetB(float)") == 0) {
109 string paramCls[] = { "float" };
112 void* paramObj[] = { ¶m1 };
113 rmiObj->getMethodParams(paramCls, numParam, paramObj);
115 } else if (methodSign.compare("voidsetC(string)") == 0) {
116 string paramCls[] = { "string" };
119 void* paramObj[] = { ¶m1 };
120 rmiObj->getMethodParams(paramCls, numParam, paramObj);
122 } else if (methodSign.compare("sumArray(string[])") == 0) {
123 string paramCls[] = { "string[]" };
125 vector<string> param1;
126 void* paramObj[] = { ¶m1 };
127 rmiObj->getMethodParams(paramCls, numParam, paramObj);
128 string retVal = sumArray(param1);
129 void* retObj = &retVal;
130 rmiObj->sendReturnObj(retObj, "string");
131 /*} else if (methodSign.compare("sumArray(int[])") == 0) {
132 string paramCls[] = { "int[]" };
135 void* paramObj[] = { ¶m1 };
136 rmiObj->getMethodParams(paramCls, numParam, paramObj);
137 int64_t retVal = sumArray(param1);
138 void* retObj = &retVal;
139 rmiObj->sendReturnObj(retObj, "long");*/
140 } else if (methodSign.compare("intsetAndGetA(int)") == 0) {
141 string paramCls[] = { "int" };
144 void* paramObj[] = { ¶m1 };
145 rmiObj->getMethodParams(paramCls, numParam, paramObj);
146 int retVal = setAndGetA(param1);
147 void* retObj = &retVal;
148 rmiObj->sendReturnObj(retObj, "int");
149 } else if (methodSign.compare("intsetACAndGetA(string,int)") == 0) {
150 string paramCls[] = { "string", "int" };
154 void* paramObj[] = { ¶m1, ¶m2 };
155 rmiObj->getMethodParams(paramCls, numParam, paramObj);
156 int retVal = setACAndGetA(param1, param2);
157 void* retObj = &retVal;
158 rmiObj->sendReturnObj(retObj, "int");
159 /*} else if (methodSign.compare("voidregisterCallBack(CallBackInterface)") == 0) {
161 } else if (methodSign.compare("voidregisterCallBack(CallBackInterface[])") == 0) {
162 string paramCls[] = { "int" };
165 void* paramObj[] = { &numStubs };
166 rmiObj->getMethodParams(paramCls, numParam, paramObj);
167 vector<CallBackInterface*> stub;
168 for (int objId = 0; objId < numStubs; objId++) {
169 CallBackInterface* cb = new CallBack_CBStub(rmiCall, objIdCnt);
171 vecCBObj.push_back(cb);
174 registerCallback(stub);
175 } else if (methodSign.compare("registercallback") == 0) {
176 string paramCls[] = { "int", "string", "int" };
181 void* paramObj[] = { ¶m1, ¶m2, ¶m3 };
182 cout << "Get here! Registering callback!" << endl;
183 rmiObj->getMethodParams(paramCls, numParam, paramObj);
184 // Instantiate IoTRMICall object
185 bool bResult = false;
186 rmiCall = new IoTRMICall(param1, param2.c_str(), param3, &bResult,
187 CallBack_CBStub::methodSignatures, CallBack_CBStub::size);
188 } else if (methodSign.compare("intcallBack()") == 0) {
189 cout << "Get here inside callback!!!" << endl;
190 int retVal = callBack();
191 cout << "Return value in TestClass_Skeleton: " << retVal << endl;
192 void* retObj = &retVal;
193 rmiObj->sendReturnObj(retObj, "int");
195 } else if (methodSign.compare("structsize") == 0) {
196 string paramCls[] = { "int" };
199 void* paramObj[] = { ¶m1 };
200 rmiObj->getMethodParams(paramCls, numParam, paramObj);
201 structsize1 = param1;
202 cout << "Struct size: " << structsize1 << endl;
203 } else if (methodSign.compare("handleStruct(StructJ[])") == 0) {
204 string paramCls[3*structsize1];
205 void* paramObj[3*structsize1];
206 int numParam = 3*structsize1;
207 // define array of everything
208 string param1[structsize1];
209 float param2[structsize1];
210 int param3[structsize1];
212 for(int i=0; i < structsize1; i++) {
213 paramCls[pos] = "string";
214 paramObj[pos++] = ¶m1[i];
215 paramCls[pos] = "float";
216 paramObj[pos++] = ¶m2[i];
217 paramCls[pos] = "int";
218 paramObj[pos++] = ¶m3[i];
220 rmiObj->getMethodParams(paramCls, numParam, paramObj);
221 vector<data> dat(structsize1);
223 for (int i=0; i < structsize1; i++) {
224 dat[i].name = param1[i];
225 dat[i].value = param2[i];
226 dat[i].year = param3[i];
230 string error = "Signature unrecognized: " + string(methodSign);
237 void TestClass_Skeleton::setA(int _int) {
243 void TestClass_Skeleton::setB(float _float) {
249 void TestClass_Skeleton::setC(string _string) {
255 string TestClass_Skeleton::sumArray(vector<string> newA) {
257 return tc->sumArray(newA);;
261 /*int64_t TestClass_Skeleton::sumArray(vector<int> newA) {
263 return tc->sumArray(newA);
267 int TestClass_Skeleton::setAndGetA(int newA) {
269 return tc->setAndGetA(newA);
273 int TestClass_Skeleton::setACAndGetA(string newC, int newA) {
275 return tc->setACAndGetA(newC, newA);
279 void TestClass_Skeleton::registerCallback(CallBackInterface* _cb) {
281 tc->registerCallback(_cb);
285 void TestClass_Skeleton::registerCallback(vector<CallBackInterface*> _cb) {
287 tc->registerCallback(_cb);
291 int TestClass_Skeleton::callBack() {
297 void TestClass_Skeleton::handleStruct(vector<data> vecData) {
299 tc->handleStruct(vecData);