0ad75869f1436ca13846c5badae0fca7c810ab0b
[iot2.git] / iotjava / iotrmi / C++ / basics / TestClassInterface_Skeleton.cpp
1 #include <iostream>
2 #include <string>
3 #include "TestClassInterface_Skeleton.hpp"
4 #include "TestClass.hpp"
5
6 #include "CallBackInterfaceWithCallBack_Stub.cpp"
7
8 using namespace std;
9
10 TestClassInterface_Skeleton::TestClassInterface_Skeleton(TestClassInterface *_mainObj, string _callbackAddress, int _port) {
11         bool _bResult = false;
12         mainObj = _mainObj;
13         callbackAddress = _callbackAddress;
14         rmiObj = new IoTRMIObject(_port, &_bResult);
15         set0Allowed.insert(-9999);
16         ___waitRequestInvokeMethod();
17 }
18
19 TestClassInterface_Skeleton::TestClassInterface_Skeleton(TestClassInterface *_mainObj, int _objIdCnt, string _callbackAddress) {
20         bool _bResult = false;
21         mainObj = _mainObj;
22         objIdCnt = _objIdCnt;
23         callbackAddress = _callbackAddress;
24         set0Allowed.insert(-9999);
25         ___waitRequestInvokeMethod();
26 }
27
28 TestClassInterface_Skeleton::~TestClassInterface_Skeleton() {
29         if (rmiObj != NULL) {
30                 delete rmiObj;
31                 rmiObj = NULL;
32         }
33         if (rmiCall != NULL) {
34                 delete rmiCall;
35                 rmiCall = NULL;
36         }
37         for(CallBackInterfaceWithCallBack* cb : vecCallbackObj) {
38                 delete cb;
39                 cb = NULL;
40         }
41 }
42
43 short TestClassInterface_Skeleton::getShort(short in) {
44         return mainObj->getShort(in);
45 }
46
47 void TestClassInterface_Skeleton::registerCallback(CallBackInterfaceWithCallBack* _cb) {
48         mainObj->registerCallback(_cb);
49 }
50
51 void TestClassInterface_Skeleton::___regCB() {
52         int numParam = 3;
53         vector<int> param1;
54         string param2 = "";
55         int param3 = 0;
56         string paramCls[] = { "int*", "String", "int" };
57         void* paramObj[] = { &param1, &param2, &param3 };
58         rmiObj->getMethodParams(paramCls, numParam, paramObj);
59         bool bResult = false;
60         rmiCall = new IoTRMICall(param1[1], param2.c_str(), param3, &bResult);
61 }
62
63 int TestClassInterface_Skeleton::callBack() {
64         return mainObj->callBack();
65 }
66
67 void TestClassInterface_Skeleton::___getShort() {
68         string paramCls[] = { "short" };
69         int numParam = 1;
70         short in;
71         void* paramObj[] = { &in };
72         rmiObj->getMethodParams(paramCls, numParam, paramObj);
73         short retVal = getShort(in);
74         void* retObj = &retVal;
75         rmiObj->sendReturnObj(retObj, "short");
76 }
77
78 void TestClassInterface_Skeleton::___registerCallback() {
79         string paramCls[] = { "int" };
80         int numParam = 1;
81         int numStubs0 = 0;
82         void* paramObj[] = { &numStubs0 };
83         rmiObj->getMethodParams(paramCls, numParam, paramObj);
84         //CallBackInterfaceWithCallBack* stub0 = new CallBackInterfaceWithCallBack_CallbackStub(rmiCall, callbackAddress, objIdCnt, ports);
85         CallBackInterfaceWithCallBack* stub0 = new CallBackInterfaceWithCallBack_Stub(rmiCall, callbackAddress, objIdCnt, ports);
86         vecCallbackObj.push_back(stub0);
87         objIdCnt++;
88         registerCallback(stub0);
89 }
90
91 void TestClassInterface_Skeleton::___callBack() {
92         string paramCls[] = {  };
93         int numParam = 0;
94         void* paramObj[] = {  };
95         rmiObj->getMethodParams(paramCls, numParam, paramObj);
96         int retVal = callBack();
97         void* retObj = &retVal;
98         rmiObj->sendReturnObj(retObj, "int");
99 }
100
101 void TestClassInterface_Skeleton::___waitRequestInvokeMethod() {
102         while (true) {
103                 rmiObj->getMethodBytes();
104                 int _objectId = rmiObj->getObjectId();
105                 int methodId = rmiObj->getMethodId();
106                 if (_objectId == object0Id) {
107                         if (set0Allowed.find(methodId) == set0Allowed.end()) {
108                                 cerr << "Object with object Id: " << _objectId << "  is not allowed to access method: " << methodId << endl;
109                                 return;
110                         }
111                 }
112                 else {
113                         cerr << "Object Id: " << _objectId << " not recognized!" << endl;
114                         return;
115                 }
116                 switch (methodId) {
117                         case 0: ___getShort(); break;
118                         case 1: ___registerCallback(); break;
119                         case 2: ___callBack(); break;
120                         case -9999: ___regCB(); break;
121                         default: 
122                         cerr << "Method Id " << methodId << " not recognized!" << endl;
123                         throw exception();
124                 }
125         }
126 }
127
128
129 int main(int argc, char *argv[])
130 {
131         // First argument is port number
132         /*int port = atoi(argv[1]);
133         int argv2 = atoi(argv[2]);
134         float argv3 = atof(argv[3]);
135         string argv4 = string(argv[4]);
136
137         cout << port << endl;
138         cout << argv2 << endl;
139         cout << argv3 << endl;
140         cout << argv4 << endl;*/
141
142         int port = 5010;
143         //TestClassInterface *tc = new TestClass(argv2, argv3, argv4);
144         TestClassInterface *tc = new TestClass(123, 2.345, "test");
145         TestClassInterface_Skeleton *tcSkel = new TestClassInterface_Skeleton(tc, "localhost", port);
146
147         //delete tc;
148         //delete tcSkel;
149         return 0;
150 }