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 vector<data> handleStruct(vector<data> vecData);
29 vector<EnumC> handleEnum(vector<EnumC> vecEn);
35 //int64_t ____sumArray();
37 void ___setACAndGetA();
38 void ___registerCallback();
39 void ____registerCallback();
40 // For array of callbacks
43 // For array of structs
45 void ___handleStruct(int structsize1);
47 void ___handleEnum(int enumsize1);
50 TestClassInterface *tc;
54 vector<CallBackInterface*> vecCBObj;
55 //CallBackInterface cbstub;
59 int TestClass_Skeleton::objIdCnt = 0;
62 TestClass_Skeleton::TestClass_Skeleton(TestClassInterface* _tc, int _port) {
64 bool _bResult = false;
66 rmiObj = new IoTRMIObject(_port, &_bResult);
67 ___waitRequestInvokeMethod();
71 TestClass_Skeleton::~TestClass_Skeleton() {
77 if (rmiCall != NULL) {
81 for(CallBackInterface* cb : vecCBObj) {
88 void TestClass_Skeleton::setA(int _int) {
94 void TestClass_Skeleton::___setA() {
96 string paramCls[] = { "int" };
99 void* paramObj[] = { ¶m1 };
100 rmiObj->getMethodParams(paramCls, numParam, paramObj);
105 void TestClass_Skeleton::setB(float _float) {
111 void TestClass_Skeleton::___setB() {
113 string paramCls[] = { "float" };
116 void* paramObj[] = { ¶m1 };
117 rmiObj->getMethodParams(paramCls, numParam, paramObj);
122 void TestClass_Skeleton::setC(string _string) {
128 void TestClass_Skeleton::___setC() {
130 string paramCls[] = { "string" };
133 void* paramObj[] = { ¶m1 };
134 rmiObj->getMethodParams(paramCls, numParam, paramObj);
139 string TestClass_Skeleton::sumArray(vector<string> newA) {
141 return tc->sumArray(newA);
145 void TestClass_Skeleton::___sumArray() {
147 string paramCls[] = { "string[]" };
149 vector<string> param1;
150 void* paramObj[] = { ¶m1 };
151 rmiObj->getMethodParams(paramCls, numParam, paramObj);
152 string retVal = sumArray(param1);
153 void* retObj = &retVal;
154 rmiObj->sendReturnObj(retObj, "string");
158 /*int64_t TestClass_Skeleton::sumArray(vector<int> newA) {
160 return tc->sumArray(newA);
164 /*int64_t TestClass_Skeleton::____sumArray() {
169 int TestClass_Skeleton::setAndGetA(int newA) {
171 return tc->setAndGetA(newA);
175 void TestClass_Skeleton::___setAndGetA() {
177 string paramCls[] = { "int" };
180 void* paramObj[] = { ¶m1 };
181 rmiObj->getMethodParams(paramCls, numParam, paramObj);
182 int retVal = setAndGetA(param1);
183 void* retObj = &retVal;
184 rmiObj->sendReturnObj(retObj, "int");
188 int TestClass_Skeleton::setACAndGetA(string newC, int newA) {
190 return tc->setACAndGetA(newC, newA);
194 void TestClass_Skeleton::___setACAndGetA() {
196 string paramCls[] = { "string", "int" };
200 void* paramObj[] = { ¶m1, ¶m2 };
201 rmiObj->getMethodParams(paramCls, numParam, paramObj);
202 int retVal = setACAndGetA(param1, param2);
203 void* retObj = &retVal;
204 rmiObj->sendReturnObj(retObj, "int");
208 void TestClass_Skeleton::registerCallback(CallBackInterface* _cb) {
210 tc->registerCallback(_cb);
214 void TestClass_Skeleton::___registerCallback() {
219 void TestClass_Skeleton::registerCallback(vector<CallBackInterface*> _cb) {
221 tc->registerCallback(_cb);
225 void TestClass_Skeleton::___regCB() {
227 string paramCls[] = { "int", "string", "int" };
232 void* paramObj[] = { ¶m1, ¶m2, ¶m3 };
233 rmiObj->getMethodParams(paramCls, numParam, paramObj);
234 // Instantiate IoTRMICall object
235 bool bResult = false;
236 cout << "Port: " << param1 << endl;
237 cout << "Address: " << param2 << endl;
239 rmiCall = new IoTRMICall(param1, param2.c_str(), param3, &bResult);
243 void TestClass_Skeleton::____registerCallback() {
245 string paramCls[] = { "int" };
248 void* paramObj[] = { &numStubs };
249 rmiObj->getMethodParams(paramCls, numParam, paramObj);
250 vector<CallBackInterface*> stub;
251 for (int objId = 0; objId < numStubs; objId++) {
252 CallBackInterface* cb = new CallBack_CBStub(rmiCall, objIdCnt);
254 vecCBObj.push_back(cb);
257 registerCallback(stub);
261 int TestClass_Skeleton::callBack() {
267 void TestClass_Skeleton::___callBack() {
269 int retVal = callBack();
270 void* retObj = &retVal;
271 rmiObj->sendReturnObj(retObj, "int");
275 vector<data> TestClass_Skeleton::handleStruct(vector<data> vecData) {
277 return tc->handleStruct(vecData);
281 int TestClass_Skeleton::___structSize() {
283 string paramCls[] = { "int" };
286 void* paramObj[] = { ¶m1 };
287 rmiObj->getMethodParams(paramCls, numParam, paramObj);
292 void TestClass_Skeleton::___handleStruct(int structsize1) {
294 string paramCls[3*structsize1];
295 void* paramObj[3*structsize1];
296 int numParam = 3*structsize1;
297 // define array of everything
298 string param1[structsize1];
299 float param2[structsize1];
300 int param3[structsize1];
302 for(int i=0; i < structsize1; i++) {
303 paramCls[pos] = "string";
304 paramObj[pos++] = ¶m1[i];
305 paramCls[pos] = "float";
306 paramObj[pos++] = ¶m2[i];
307 paramCls[pos] = "int";
308 paramObj[pos++] = ¶m3[i];
310 rmiObj->getMethodParams(paramCls, numParam, paramObj);
311 vector<data> dat(structsize1);
313 for (int i=0; i < structsize1; i++) {
314 dat[i].name = param1[i];
315 dat[i].value = param2[i];
316 dat[i].year = param3[i];
318 // This is a return value of type vector of struct
319 // If no return value, then just "handleStruct(dat)"
320 vector<data> retData = handleStruct(dat);
321 // Send the length first!
322 int retLength = retData.size();
323 void* retObj = &retLength;
324 rmiObj->sendReturnObj(retObj, "int");
325 // Send the actual bytes - struct of 3 members
326 int numRetObj = 3*retLength;
327 string retCls[numRetObj];
328 void* retObj2[numRetObj];
330 for(int i = 0; i < retLength; i++) {
331 retCls[pos] = "string";
332 retObj2[pos] = &retData[i].name; pos++;
333 retCls[pos] = "float";
334 retObj2[pos] = &retData[i].value; pos++;
336 retObj2[pos] = &retData[i].year; pos++;
338 rmiObj->sendReturnObj(retObj2, retCls, numRetObj);
342 vector<EnumC> TestClass_Skeleton::handleEnum(vector<EnumC> vecEn) {
344 return tc->handleEnum(vecEn);
348 int TestClass_Skeleton::___enumSize() {
350 string paramCls[] = { "int" };
353 void* paramObj[] = { ¶m1 };
354 rmiObj->getMethodParams(paramCls, numParam, paramObj);
359 void TestClass_Skeleton::___handleEnum(int enumsize1) {
362 string paramCls[] = { "int[]" };
363 vector<int> paramInt;
364 void* paramObj[] = { ¶mInt };
365 // Receive the array of integers
366 rmiObj->getMethodParams(paramCls, numParam, paramObj);
367 int enumSize1 = paramInt.size();
368 vector<EnumC> en(enumSize1);
369 for (int i=0; i < enumSize1; i++) {
370 en[i] = (EnumC) paramInt[i];
373 // if void, just "handleEnum(en)"
374 // this is when we have return value vector<EnumC>
375 vector<EnumC> retEnum = handleEnum(en);
377 int enumSize2 = retEnum.size();
378 // Now send the array of integers
379 vector<int> retEnumInt(enumSize2);
380 for (int i=0; i < enumSize2; i++) {
381 retEnumInt[i] = (int) retEnum[i];
383 void* retObj = &retEnumInt;
384 rmiObj->sendReturnObj(retObj, "int[]");
388 void TestClass_Skeleton::___waitRequestInvokeMethod() {
392 // Loop continuously waiting for incoming bytes
395 rmiObj->getMethodBytes();
396 int methodId = rmiObj->getMethodId();
399 case 0: ___setA(); break;
400 case 1: ___setB(); break;
401 case 2: ___setC(); break;
402 case 3: ___sumArray(); break;
403 /* case 3: ____sumArray(); break;*/
404 case 4: ___setAndGetA(); break;
405 case 5: ___setACAndGetA(); break;
406 case 6: ___callBack(); break;
407 case 7: ___registerCallback(); break;
408 case 8: ____registerCallback(); break;
409 case 9: ___regCB(); break;
411 case 10: ___handleStruct(structsize1); break;
412 case 11: structsize1 = ___structSize(); break;
413 case 12: ___handleEnum(enumsize1); break;
415 string error = "Method Id not recognized!";