From ffea2cb68e5a2e1bac041fe2279620eba8d227f8 Mon Sep 17 00:00:00 2001 From: rtrimana Date: Thu, 29 Mar 2018 11:49:48 -0700 Subject: [PATCH] Cleaning up drivers/Cpp, Cpp/Lifxtest, virtuals, and iotrmi/C++ (revisiting the C++ side of Vigilia). --- benchmarks/Cpp/Lifxtest/Lifxtest.config | 1 + benchmarks/Cpp/Lifxtest/Lifxtest.cpp | 208 +----- benchmarks/Cpp/Lifxtest/Lifxtest.hpp | 1 - .../Cpp/Lifxtest/LightBulbTest_Stub.cpp | 56 +- .../Cpp/Lifxtest/LightBulbTest_Stub.hpp | 3 +- benchmarks/Cpp/Lifxtest/Makefile | 2 +- benchmarks/Cpp/Lifxtest/RoomSmart_Stub.cpp | 12 + benchmarks/drivers/Cpp/LabRoom/LabRoom.cpp | 1 - benchmarks/drivers/Cpp/LabRoom/LabRoom.hpp | 1 - .../drivers/Cpp/LabRoom/Room_Skeleton.cpp | 12 +- .../drivers/Cpp/LabRoom/Room_Skeleton.hpp | 3 - .../Cpp/LifxLightBulb/LifxLightBulb.cpp | 100 --- .../Cpp/LifxLightBulb/LifxLightBulb.hpp | 1 - .../Cpp/LifxLightBulb/LightBulb_Skeleton.cpp | 7 +- .../Cpp/LifxLightBulb/LightBulb_Skeleton.hpp | 1 - benchmarks/drivers/Java/Makefile | 7 +- benchmarks/virtuals/LightBulbSmart.hpp | 1 - benchmarks/virtuals/LightBulbTest.hpp | 11 - benchmarks/virtuals/RoomSmart.hpp | 1 - .../iotrmi/C++/ConcurrentLinkedListQueue.cpp | 4 - iotjava/iotrmi/C++/IoTRMICall.cpp | 29 - iotjava/iotrmi/C++/IoTRMICall.hpp | 215 ------- iotjava/iotrmi/C++/IoTRMIComm.hpp | 62 +- iotjava/iotrmi/C++/IoTRMICommClient.hpp | 5 - iotjava/iotrmi/C++/IoTRMICommServer.hpp | 7 - iotjava/iotrmi/C++/IoTRMIObject.cpp | 22 - iotjava/iotrmi/C++/IoTRMIUtil.hpp | 13 +- iotjava/iotrmi/C++/IoTSocket.hpp | 30 +- iotjava/iotrmi/C++/IoTSocketClient.cpp | 60 -- iotjava/iotrmi/C++/IoTSocketClient.hpp | 9 +- iotjava/iotrmi/C++/IoTSocketServer.cpp | 54 -- iotjava/iotrmi/C++/IoTSocketServer.hpp | 19 +- iotjava/iotrmi/C++/Test.cpp | 37 -- iotjava/iotrmi/C++/basics/CallBack.hpp | 46 -- iotjava/iotrmi/C++/basics/TestClass.hpp | 598 ------------------ .../C++/basics/TestClassAdvanced_Stub.cpp | 154 ----- .../C++/basics/TestClassCallbacks_Stub.cpp | 122 ---- .../C++/basics/TestClassComplete_Stub.cpp | 162 ----- .../basics/TestClassInterface_Skeleton.cpp | 182 ------ .../iotrmi/C++/basics/TestClassProfiling.hpp | 35 - .../iotrmi/C++/basics/TestClass_Skeleton.cpp | 22 - iotjava/iotrmi/C++/basics/TestClass_Stub.cpp | 167 ----- iotjava/iotrmi/C++/sample/CallBack.hpp | 43 -- .../iotrmi/C++/sample/CallBackInterface.hpp | 15 - .../iotrmi/C++/sample/CallBack_CBSkeleton.hpp | 92 --- iotjava/iotrmi/C++/sample/CallBack_CBStub.hpp | 76 --- .../iotrmi/C++/sample/CallBack_Skeleton.cpp | 18 - .../iotrmi/C++/sample/CallBack_Skeleton.hpp | 102 --- iotjava/iotrmi/C++/sample/CallBack_Stub.cpp | 23 - iotjava/iotrmi/C++/sample/CallBack_Stub.hpp | 76 --- iotjava/iotrmi/C++/sample/EnumC.cpp | 24 - iotjava/iotrmi/C++/sample/EnumC.hpp | 19 - iotjava/iotrmi/C++/sample/StructC.cpp | 33 - iotjava/iotrmi/C++/sample/StructC.hpp | 13 - iotjava/iotrmi/C++/sample/Test.cpp | 32 - iotjava/iotrmi/C++/sample/Test2.cpp | 25 - iotjava/iotrmi/C++/sample/TestClass.cpp | 42 -- iotjava/iotrmi/C++/sample/TestClass.hpp | 202 ------ .../iotrmi/C++/sample/TestClassInterface.hpp | 29 - .../iotrmi/C++/sample/TestClass_Skeleton.cpp | 24 - .../iotrmi/C++/sample/TestClass_Skeleton.hpp | 452 ------------- iotjava/iotrmi/C++/sample/TestClass_Stub.cpp | 91 --- iotjava/iotrmi/C++/sample/TestClass_Stub.hpp | 376 ----------- 63 files changed, 161 insertions(+), 4129 deletions(-) delete mode 100644 iotjava/iotrmi/C++/IoTRMICall.cpp delete mode 100644 iotjava/iotrmi/C++/IoTRMICall.hpp delete mode 100644 iotjava/iotrmi/C++/IoTRMIObject.cpp delete mode 100644 iotjava/iotrmi/C++/IoTSocketClient.cpp delete mode 100644 iotjava/iotrmi/C++/IoTSocketServer.cpp delete mode 100644 iotjava/iotrmi/C++/Test.cpp delete mode 100644 iotjava/iotrmi/C++/basics/CallBack.hpp delete mode 100644 iotjava/iotrmi/C++/basics/TestClass.hpp delete mode 100644 iotjava/iotrmi/C++/basics/TestClassAdvanced_Stub.cpp delete mode 100644 iotjava/iotrmi/C++/basics/TestClassCallbacks_Stub.cpp delete mode 100644 iotjava/iotrmi/C++/basics/TestClassComplete_Stub.cpp delete mode 100644 iotjava/iotrmi/C++/basics/TestClassInterface_Skeleton.cpp delete mode 100644 iotjava/iotrmi/C++/basics/TestClassProfiling.hpp delete mode 100644 iotjava/iotrmi/C++/basics/TestClass_Skeleton.cpp delete mode 100644 iotjava/iotrmi/C++/basics/TestClass_Stub.cpp delete mode 100644 iotjava/iotrmi/C++/sample/CallBack.hpp delete mode 100644 iotjava/iotrmi/C++/sample/CallBackInterface.hpp delete mode 100644 iotjava/iotrmi/C++/sample/CallBack_CBSkeleton.hpp delete mode 100644 iotjava/iotrmi/C++/sample/CallBack_CBStub.hpp delete mode 100644 iotjava/iotrmi/C++/sample/CallBack_Skeleton.cpp delete mode 100644 iotjava/iotrmi/C++/sample/CallBack_Skeleton.hpp delete mode 100644 iotjava/iotrmi/C++/sample/CallBack_Stub.cpp delete mode 100644 iotjava/iotrmi/C++/sample/CallBack_Stub.hpp delete mode 100644 iotjava/iotrmi/C++/sample/EnumC.cpp delete mode 100644 iotjava/iotrmi/C++/sample/EnumC.hpp delete mode 100644 iotjava/iotrmi/C++/sample/StructC.cpp delete mode 100644 iotjava/iotrmi/C++/sample/StructC.hpp delete mode 100644 iotjava/iotrmi/C++/sample/Test.cpp delete mode 100644 iotjava/iotrmi/C++/sample/Test2.cpp delete mode 100644 iotjava/iotrmi/C++/sample/TestClass.cpp delete mode 100644 iotjava/iotrmi/C++/sample/TestClass.hpp delete mode 100644 iotjava/iotrmi/C++/sample/TestClassInterface.hpp delete mode 100644 iotjava/iotrmi/C++/sample/TestClass_Skeleton.cpp delete mode 100644 iotjava/iotrmi/C++/sample/TestClass_Skeleton.hpp delete mode 100644 iotjava/iotrmi/C++/sample/TestClass_Stub.cpp delete mode 100644 iotjava/iotrmi/C++/sample/TestClass_Stub.hpp diff --git a/benchmarks/Cpp/Lifxtest/Lifxtest.config b/benchmarks/Cpp/Lifxtest/Lifxtest.config index ae14332..c8a5ef8 100644 --- a/benchmarks/Cpp/Lifxtest/Lifxtest.config +++ b/benchmarks/Cpp/Lifxtest/Lifxtest.config @@ -2,6 +2,7 @@ ADDITIONAL_ZIP_FILE=No # For C++ instrumentation FIELD_NUMBER=3 +#FIELD_NUMBER=1 # Field lifx_light_bulb FIELD_0=lifx_light_bulb diff --git a/benchmarks/Cpp/Lifxtest/Lifxtest.cpp b/benchmarks/Cpp/Lifxtest/Lifxtest.cpp index 07ae82f..6823b71 100644 --- a/benchmarks/Cpp/Lifxtest/Lifxtest.cpp +++ b/benchmarks/Cpp/Lifxtest/Lifxtest.cpp @@ -5,13 +5,10 @@ #include "Lifxtest.hpp" #include "LifxLightBulb.cpp" #include "LabRoom.cpp" -#include "Iterator.hpp" - // External create, destroy, and init functions extern "C" void* createLifxtest(void** params) { - // Arguments: IoTSet* lifx_light_bulb - //return new Lifxtest((IoTSet*) params[0]); + // Arguments: IoTSet* lifx_light_bulb, IoTSet* lab_room, IoTRelation roomLightRelation return new Lifxtest((IoTSet*) params[0], (IoTSet*) params[1], (IoTRelation*) params[2]); } @@ -30,170 +27,81 @@ extern "C" void initLifxtest(void* t) { // Empty constructor (for testing) Lifxtest::Lifxtest() { - log.open("Lifxtest_object_cpp.log"); - log << "lifx_light_bulb initialized!" << endl; -} - - -// Constructor with only 1 IoTSet object (lifx_light_bulb) -Lifxtest::Lifxtest(IoTSet* _lifx_light_bulb) { - - log.open("Lifxtest_object_cpp.log"); - lifx_light_bulb = _lifx_light_bulb; - log << "lifx_light_bulb initialized!" << endl; } // Constructor with 2 IoTSet and 1 IoTRelation objects Lifxtest::Lifxtest(IoTSet* _lifx_light_bulb, IoTSet* _lab_room, IoTRelation* _roomLightRelation) { - log.open("Lifxtest_object_cpp.log"); - lifx_light_bulb = _lifx_light_bulb; - lab_room = _lab_room; - roomLightRelation = _roomLightRelation; - log << "lifx_light_bulb initialized!" << endl; -} - - -// Constructor with void** argument -Lifxtest::Lifxtest(void** args) { - - log.open("Lifxtest_object_cpp.log"); - lifx_light_bulb = (IoTSet*) args[0]; - log << "lifx_light_bulb initialized!" << endl; + log.open("/home/iotuser/iot2/bin/iotruntime/log/Lifxtest_object_cpp.log"); + lifx_light_bulb = _lifx_light_bulb; + lab_room = _lab_room; + roomLightRelation = _roomLightRelation; + log << "lifx_light_bulb initialized!" << endl; } - Lifxtest::~Lifxtest() { } - -/*void Lifxtest::init() { - - unordered_set* bulbSet = lifx_light_bulb->values(); - //for (unordered_set::const_iterator itr = bulbSet->begin(); itr != bulbSet->end(); ++itr) { - log << "Get into Lifxtest init()!" << endl; - for (auto itr = bulbSet->begin(); itr != bulbSet->end(); ++itr) { - log << "Iteration init()!" << endl; - //LightBulb* lifx = (LightBulb*) *itr; - LightBulbTest* lifx = (LightBulbTest*) *itr; - log << "Getting object!" << endl; - lifx->init(); - log << "Executing init!" << endl; - this_thread::sleep_for (chrono::milliseconds(1000)); - - for (int i = 0; i < 10; i++) { - - lifx->init(); -// lifx->turnOff(); - //cout << "Turning off!" << endl; - log << "Turning off!" << endl; - this_thread::sleep_for (chrono::milliseconds(1000)); -// lifx->turnOn(); - //cout << "Turning on!" << endl; - log << "Turning on!" << i << endl; - this_thread::sleep_for (chrono::milliseconds(1000)); - } - -*/ -/* for (int i = 2500; i < 9000; i += 100) { - //cout << "Adjusting Temp: " << i << endl; - log << "Adjusting Temp: " << i << endl; - lifx->setTemperature(i); - this_thread::sleep_for (chrono::milliseconds(100)); - } - - for (int i = 9000; i > 2500; i -= 100) { - //cout << "Adjusting Temp: " << i << endl; - log << "Adjusting Temp: " << i << endl; - lifx->setTemperature(i); - this_thread::sleep_for (chrono::milliseconds(100)); - } - - for (int i = 100; i > 0; i -= 10) { - //cout << "Adjusting Brightness: " << i << endl; - log << "Adjusting Brightness: " << i << endl; - lifx->setColor(lifx->getHue(), lifx->getSaturation(), i); - this_thread::sleep_for (chrono::milliseconds(500)); - } - - for (int i = 0; i < 100; i += 10) { - //cout << "Adjusting Brightness: " << i << endl; - log << "Adjusting Brightness: " << i << endl; - lifx->setColor(lifx->getHue(), lifx->getSaturation(), i); - this_thread::sleep_for (chrono::milliseconds(500)); - } - lifx->turnOff(); - } - - log << "End of iteration.. closing!" << endl; - log.close(); - //while(true) { } // Testing infinite loop - will need to do "pkill IoTSlave" -}*/ - - void Lifxtest::init() { unordered_set* bulbSet = lifx_light_bulb->values(); unordered_set* roomSet = lab_room->values(); unordered_multimap* roomLightRel = roomLightRelation->values(); log << "Size of map: " << roomLightRel->size() << endl; - //for (unordered_set::const_iterator itr = bulbSet->begin(); itr != bulbSet->end(); ++itr) { + for (auto itr = roomSet->begin(); itr != roomSet->end(); ++itr) { - log << "Getting Room!" << endl; - //Room* rs = (Room*) *itr; RoomSmart* rs = (RoomSmart*) *itr; - log << "Getting Room! ID: " << rs->getRoomID() << endl; - //auto itrLight = roomLightRel->find(rs); + log << "Now turning on lights in room with ID: " << rs->getRoomID() << endl; + auto itrLight = roomLightRel->find(rs); - /*if (itrLight == roomLightRel->end()) - log << "No match!" << endl; - //while (itrLight != roomLightRel->end()) { + if (itrLight == roomLightRel->end()) + log << "No matching light! - should not get here at all!" << endl; else { - //LightBulb* lifx = (LightBulb*) itrLight->second; log << "Getting LightBulb!" << endl; LightBulbTest* lifx = (LightBulbTest*) itrLight->second; log << "Executing init!" << endl; lifx->init(); for (int i = 0; i < 10; i++) { lifx->turnOff(); - //cout << "Turning off!" << endl; log << "Turning off!" << endl; this_thread::sleep_for (chrono::milliseconds(1000)); lifx->turnOn(); - //cout << "Turning on!" << endl; log << "Turning on!" << i << endl; this_thread::sleep_for (chrono::milliseconds(1000)); } + /* Note: The bottom part has not yet been heavily tested and + this might get the execution stuck at some point. + We are suspecting that this is due to the complex interaction + of the multiple threads that we have. for (int i = 2500; i < 9000; i += 100) { - //cout << "Adjusting Temp: " << i << endl; log << "Adjusting Temp: " << i << endl; lifx->setTemperature(i); this_thread::sleep_for (chrono::milliseconds(100)); } for (int i = 9000; i > 2500; i -= 100) { - //cout << "Adjusting Temp: " << i << endl; log << "Adjusting Temp: " << i << endl; lifx->setTemperature(i); this_thread::sleep_for (chrono::milliseconds(100)); } + + double hue = lifx->getHue(); + double saturation = lifx->getSaturation(); for (int i = 100; i > 0; i -= 10) { - //cout << "Adjusting Brightness: " << i << endl; log << "Adjusting Brightness: " << i << endl; - lifx->setColor(lifx->getHue(), lifx->getSaturation(), i); + lifx->setColor(hue, saturation, i); this_thread::sleep_for (chrono::milliseconds(500)); } for (int i = 0; i < 100; i += 10) { - //cout << "Adjusting Brightness: " << i << endl; log << "Adjusting Brightness: " << i << endl; - lifx->setColor(lifx->getHue(), lifx->getSaturation(), i); + lifx->setColor(hue, saturation, i); this_thread::sleep_for (chrono::milliseconds(500)); - } - //++itrLight; - }*/ + }*/ + //lifx->turnOff(); + } log << "End of one LightBulb!" << endl << endl; } @@ -201,73 +109,3 @@ void Lifxtest::init() { log.close(); //while(true) { } // Testing infinite loop - will need to do "pkill IoTSlave" } - -/* -int main(int argc, char *argv[]) -{ - // LightBulb #1 - string macAddress1 = "D073D5128E300000"; - string devIPAddress1 = "192.168.2.126"; - IoTDeviceAddress* devAddress1 = new IoTDeviceAddress(devIPAddress1, 12345, 56700, false, false); - unordered_set* myset1 = new unordered_set(); - myset1->insert(devAddress1); - IoTSet* setDevAddress1 = new IoTSet(myset1); - LifxLightBulb *llb1 = new LifxLightBulb(setDevAddress1, macAddress1); - //cout << "Generated LifxLightBulb object!" << endl; - - // LightBulb #2 - string macAddress2 = "D073D50241DA0000"; - string devIPAddress2 = "192.168.2.232"; - IoTDeviceAddress* devAddress2 = new IoTDeviceAddress(devIPAddress2, 12346, 56700, false, false); - unordered_set* myset2 = new unordered_set(); - myset2->insert(devAddress2); - IoTSet* setDevAddress2 = new IoTSet(myset2); - LifxLightBulb *llb2 = new LifxLightBulb(setDevAddress2, macAddress2); - - // Set of lightbulbs - unordered_set* setLb = new unordered_set(); - setLb->insert(llb1); - setLb->insert(llb2); - IoTSet* lbSet = new IoTSet(setLb); - - // Set of rooms - LabRoom *lr1 = new LabRoom(); - LabRoom *lr2 = new LabRoom(); - unordered_set* setLR = new unordered_set(); - setLR->insert(lr1); - setLR->insert(lr2); - IoTSet* lrSet = new IoTSet(setLR); - - pair* pair1 = new pair(lr1, llb1); - pair* pair2 = new pair(lr2, llb2); - unordered_multimap* mmap = new unordered_multimap(); - mmap->insert(*pair1); - mmap->insert(*pair2); - IoTRelation* rlRel = new IoTRelation(mmap); - - //void* args[1]; - //args[0] = (void*) lbSet; - //Lifxtest *lt = new Lifxtest(args); - Lifxtest *lt = new Lifxtest(lbSet, lrSet, rlRel); - lt->init(); - - //delete llb1; - //delete llb2; - delete devAddress1; - delete devAddress2; - delete myset1; - delete myset2; - delete setDevAddress1; - delete setDevAddress2; - delete setLb; - delete lbSet; - delete lr1; - delete lr2; - delete lrSet; - delete pair1; - delete pair2; - - return 0; -}*/ - - diff --git a/benchmarks/Cpp/Lifxtest/Lifxtest.hpp b/benchmarks/Cpp/Lifxtest/Lifxtest.hpp index c074848..4631ed2 100644 --- a/benchmarks/Cpp/Lifxtest/Lifxtest.hpp +++ b/benchmarks/Cpp/Lifxtest/Lifxtest.hpp @@ -24,7 +24,6 @@ class Lifxtest { public: Lifxtest(); - Lifxtest(IoTSet* _lifx_light_bulb); Lifxtest(IoTSet* _lifx_light_bulb, IoTSet* _lab_room, IoTRelation* _roomLightRelation); Lifxtest(void** args); ~Lifxtest(); diff --git a/benchmarks/Cpp/Lifxtest/LightBulbTest_Stub.cpp b/benchmarks/Cpp/Lifxtest/LightBulbTest_Stub.cpp index b2e1623..f760f89 100644 --- a/benchmarks/Cpp/Lifxtest/LightBulbTest_Stub.cpp +++ b/benchmarks/Cpp/Lifxtest/LightBulbTest_Stub.cpp @@ -3,8 +3,25 @@ using namespace std; +//LightBulbTest_Stub::LightBulbTest_Stub(int _portSend, int _portRecv, const char* _skeletonAddress, int _rev, bool* _bResult) { LightBulbTest_Stub::LightBulbTest_Stub(int _portSend, int _portRecv, const char* _skeletonAddress, int _rev, bool* _bResult) { + + int i=0; + string file = "LightBulbTest_cpp" + to_string(i) + ".log"; + while (ifstream(file.c_str())) { + i++; + file = "LightBulbTest_cpp" + to_string(i) + ".log"; + } + log.open(file); + log << "Constructing LightBulbTest_Stub!" << endl; + log << "Port send: " << _portSend << endl; + log << "Port recv: " << _portRecv << endl; + log << "Skeleton addr: " << _skeletonAddress << endl; + log << "Rev: " << _rev << endl; + log << "Result: " << _bResult << endl; + rmiComm = new IoTRMICommClient(_portSend, _portRecv, _skeletonAddress, _rev, _bResult); + log << "Reached 1!" << endl; rmiComm->registerStub(objectId, 6, &retValueReceived6); rmiComm->registerStub(objectId, 3, &retValueReceived3); rmiComm->registerStub(objectId, 8, &retValueReceived8); @@ -198,6 +215,43 @@ extern "C" void destroyLightBulbTest_Stub(void* t) { extern "C" void initLightBulbTest_Stub(void* t) { } -int main() { +/*int main() { + return 0; +}*/ + +int main() +{ + + int send_port = 5010; + int recv_port = 5011; + //const char* skeletonAddress = "127.0.0.1"; + const char* skeletonAddress = "localhost"; + int rev = 0; + bool result = false; + + LightBulbTest_Stub *lbs = new LightBulbTest_Stub(send_port, recv_port, skeletonAddress, rev, &result); + cout << "Successfully instantiated stub!" << endl; + lbs->init(); + lbs->turnOn(); + this_thread::sleep_for (chrono::milliseconds(1000)); + lbs->turnOff(); + for (int i = 0; i < 2; i++) { + lbs->turnOff(); + cout << "Turning off!" << endl; + this_thread::sleep_for (chrono::milliseconds(1000)); + lbs->turnOn(); + cout << "Turning on!" << endl; + this_thread::sleep_for (chrono::milliseconds(1000)); + double hue = lbs->getHue(); + double saturation = lbs->getSaturation(); + cout << "Hue: " << hue << endl; + cout << "Saturation: " << saturation << endl; + this_thread::sleep_for (chrono::milliseconds(1000)); + } + //lbs->turnOff(); + cout << "Done controlling! Exit now!" << endl; + + delete lbs; + return 0; } diff --git a/benchmarks/Cpp/Lifxtest/LightBulbTest_Stub.hpp b/benchmarks/Cpp/Lifxtest/LightBulbTest_Stub.hpp index 64c5012..3cb1c6d 100644 --- a/benchmarks/Cpp/Lifxtest/LightBulbTest_Stub.hpp +++ b/benchmarks/Cpp/Lifxtest/LightBulbTest_Stub.hpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "IoTRMIComm.hpp" #include "IoTRMICommClient.hpp" #include "IoTRMICommServer.hpp" @@ -25,7 +26,7 @@ class LightBulbTest_Stub : public LightBulbTest bool retValueReceived8 = false; bool retValueReceived7 = false; bool retValueReceived9 = false; - + ofstream log; public: diff --git a/benchmarks/Cpp/Lifxtest/Makefile b/benchmarks/Cpp/Lifxtest/Makefile index 38a378a..c57d1a4 100755 --- a/benchmarks/Cpp/Lifxtest/Makefile +++ b/benchmarks/Cpp/Lifxtest/Makefile @@ -21,7 +21,7 @@ so-lifxtest-arm: # Light stub .so file will be generated for ARM (Raspberry Pi) PHONY += so-lightstub so-lightstub: - $(G++) $(ARGS) ./LightBulbTest_Stub.cpp $(BASE)/iotjava/iotruntime/cpp/socket/Socket.cpp -o $(BIN_DIR)/Lifxtest/LightBulbTest_Stub.so --std=c++11 -pthread -pg -I$(BASE)/iotjava/iotruntime/cpp/ -I$(BASE)/iotjava/iotruntime/cpp/socket/ -I$(BASE)/iotjava/iotruntime/cpp/setrelation/ -I$(BASE)/iotjava/iotrmi/C++/ -I$(BASE)/benchmarks/virtuals/ + $(G++) $(ARGS) ./LightBulbTest_Stub.cpp -o $(BIN_DIR)/Lifxtest/LightBulbTest_Stub.so --std=c++11 -pthread -pg -I$(BASE)/iotjava/iotruntime/cpp/ -I$(BASE)/iotjava/iotruntime/cpp/socket/ -I$(BASE)/iotjava/iotruntime/cpp/setrelation/ -I$(BASE)/iotjava/iotrmi/C++/ -I$(BASE)/benchmarks/virtuals/ cp ./Lifxtest.config $(BIN_DIR)/Lifxtest # Light stub .so file will be generated for ARM (Raspberry Pi) using a cross-compiler diff --git a/benchmarks/Cpp/Lifxtest/RoomSmart_Stub.cpp b/benchmarks/Cpp/Lifxtest/RoomSmart_Stub.cpp index 0e1a498..bfe7f78 100644 --- a/benchmarks/Cpp/Lifxtest/RoomSmart_Stub.cpp +++ b/benchmarks/Cpp/Lifxtest/RoomSmart_Stub.cpp @@ -70,5 +70,17 @@ extern "C" void initRoomSmart_Stub(void* t) { } int main() { + + /*int send_port = 5010; + int recv_port = 5011; + const char* skeletonAddress = "localhost"; + //const char* skeletonAddress = "l92.168.1.198"; + //const char* skeletonAddress = "127.0.0.1"; + int rev = 0; + bool result = false; + + RoomSmart_Stub *rm = new RoomSmart_Stub(send_port, recv_port, skeletonAddress, rev, &result); + cout << "Successfully instantiated stub!" << endl;*/ + return 0; } diff --git a/benchmarks/drivers/Cpp/LabRoom/LabRoom.cpp b/benchmarks/drivers/Cpp/LabRoom/LabRoom.cpp index 3107a50..e26c37e 100644 --- a/benchmarks/drivers/Cpp/LabRoom/LabRoom.cpp +++ b/benchmarks/drivers/Cpp/LabRoom/LabRoom.cpp @@ -5,7 +5,6 @@ using namespace std; // External functions to create, destroy and initialize this class object extern "C" void* createLabRoom(void** params) { - // Arguments: IoTSet* _devAddress, string macAddress return new LabRoom(); } diff --git a/benchmarks/drivers/Cpp/LabRoom/LabRoom.hpp b/benchmarks/drivers/Cpp/LabRoom/LabRoom.hpp index 2559fe7..0ef2294 100644 --- a/benchmarks/drivers/Cpp/LabRoom/LabRoom.hpp +++ b/benchmarks/drivers/Cpp/LabRoom/LabRoom.hpp @@ -1,7 +1,6 @@ #ifndef _LABROOM_HPP__ #define _LABROOM_HPP__ #include -#include #include "Room.hpp" diff --git a/benchmarks/drivers/Cpp/LabRoom/Room_Skeleton.cpp b/benchmarks/drivers/Cpp/LabRoom/Room_Skeleton.cpp index 3124cf4..c51102f 100644 --- a/benchmarks/drivers/Cpp/LabRoom/Room_Skeleton.cpp +++ b/benchmarks/drivers/Cpp/LabRoom/Room_Skeleton.cpp @@ -4,20 +4,9 @@ using namespace std; Room_Skeleton::Room_Skeleton(Room *_mainObj, int _portSend, int _portRecv) { - // Logging - int i=0; - string file = "Room_Skeleton_cpp" + to_string(i) + ".log"; - while (ifstream(file.c_str())) { - i++; - file = "Room_Skeleton_cpp" + to_string(i) + ".log"; - } - log.open(file); - log << "Port send: " << _portSend << endl; - log << "Port receive: " << _portRecv << endl; bool _bResult = false; mainObj = _mainObj; rmiComm = new IoTRMICommServer(_portSend, _portRecv, &_bResult); - log << "Established connection with slave! Wait request invoke now..." << endl; IoTRMIUtil::mapSkel->insert(make_pair(_mainObj, this)); IoTRMIUtil::mapSkelId->insert(make_pair(_mainObj, objectId)); rmiComm->registerSkeleton(objectId, &methodReceived); @@ -107,6 +96,7 @@ extern "C" void destroyRoom_Skeleton(void* t) { extern "C" void initRoom_Skeleton(void* t) { } + int main() { return 0; } diff --git a/benchmarks/drivers/Cpp/LabRoom/Room_Skeleton.hpp b/benchmarks/drivers/Cpp/LabRoom/Room_Skeleton.hpp index 5570778..8965f0b 100644 --- a/benchmarks/drivers/Cpp/LabRoom/Room_Skeleton.hpp +++ b/benchmarks/drivers/Cpp/LabRoom/Room_Skeleton.hpp @@ -9,8 +9,6 @@ #include "IoTRMICommClient.hpp" #include "IoTRMICommServer.hpp" -#include - using namespace std; class Room_Skeleton : public Room @@ -26,7 +24,6 @@ class Room_Skeleton : public Room // Synchronization variables bool methodReceived = false; bool didAlreadyInitWaitInvoke = false; - ofstream log; public: diff --git a/benchmarks/drivers/Cpp/LifxLightBulb/LifxLightBulb.cpp b/benchmarks/drivers/Cpp/LifxLightBulb/LifxLightBulb.cpp index 976ec54..667d765 100644 --- a/benchmarks/drivers/Cpp/LifxLightBulb/LifxLightBulb.cpp +++ b/benchmarks/drivers/Cpp/LifxLightBulb/LifxLightBulb.cpp @@ -47,7 +47,6 @@ LifxLightBulb::LifxLightBulb() { char tmpMacAddress[16]; strcpy(tmpMacAddress, macAddress.c_str()); - //test[0] = (char) strtol(strTest.c_str(), NULL, 16); for(int i=0; i<16; i=i+2) { // Take 2 digits and then convert char tmpMacByte[2]; @@ -55,7 +54,6 @@ LifxLightBulb::LifxLightBulb() { tmpMacByte[1] = tmpMacAddress[i+1]; bulbMacAddress[i/2] = (char) strtol(tmpMacByte, NULL, 16); } - //IoTRMIUtil::printBytes(bulbMacAddress, 8, false); } @@ -74,16 +72,6 @@ LifxLightBulb::LifxLightBulb(IoTSet* _devAddress, string macAddress) { bulbMacAddress[i/2] = (char) strtol(tmpMacByte, NULL, 16); } //cout << "MAC address is set. Value: "; - IoTRMIUtil::printBytes(bulbMacAddress, 8, false); - // Logging - int i=0; - string file = "LifxLightBulb_cpp" + to_string(i) + ".log"; - while (ifstream(file.c_str())) { - i++; - file = "LifxLightBulb_cpp" + to_string(i) + ".log"; - } - log.open(file); - log << "MAC address is " << macAddress << endl; // Initialize device address lb_addresses = _devAddress; @@ -119,11 +107,9 @@ void LifxLightBulb::init() { if (didAlreadyInit.exchange(true)) return; - log << "lb_addresses has: " << lb_addresses->size() << endl; unordered_set::const_iterator itr = lb_addresses->begin(); IoTDeviceAddress* deviceAddress = (IoTDeviceAddress*) *itr; //cout << "Address: " << deviceAddress->getAddress() << endl; - log << "Address: " << deviceAddress->getAddress() << endl; // Create IoTUDP socket communicationSocket = new IoTUDP(deviceAddress); @@ -131,9 +117,6 @@ void LifxLightBulb::init() { //cout << "Host address: " << communicationSocket->getHostAddress() << endl; //cout << "Source port: " << communicationSocket->getSourcePort() << endl; //cout << "Destination port: " << communicationSocket->getDestinationPort() << endl << endl; - log << "Host address: " << communicationSocket->getHostAddress() << endl; - log << "Source port: " << communicationSocket->getSourcePort() << endl; - log << "Destination port: " << communicationSocket->getDestinationPort() << endl << endl; // Launch the worker function in a separate thread. // NOTE: "this" pointer is passed into the detached thread because it does not belong @@ -143,8 +126,6 @@ void LifxLightBulb::init() { th1.detach(); //cout << "Initialized LifxLightBulb!" << endl; - log << "Initialized LifxLightBulb!" << endl; - log.close(); } @@ -346,7 +327,6 @@ void LifxLightBulb::receivedPacket(char* packetData) { int type = recHeader.getType(); //cout << "Received: " << type << endl; - log << "Received: " << type << endl; DeviceStateService* dat = NULL; switch (type) { @@ -397,14 +377,11 @@ void LifxLightBulb::workerFunction(LifxLightBulb* llb) { // Need timeout on receives since we are not sure if a packet will be available // for processing so don't block waiting llb->communicationSocket->setTimeOut(50000); // In milliseconds - llb->turnOff(); int64_t lastSentGetBulbVersionRequest = 0; // time last request sent char dat[1024]; - llb->log << "Turning off and entering while loop!" << endl; - while (true) { // Check if we got the bulb version yet // could have requested it but message could have gotten lost (UDP) @@ -812,10 +789,8 @@ void LifxLightBulb::sendSetLightPowerPacket(int level, long duration) { cerr << "Invalid parameter values" << endl; exit(1); } - char packetBytes[42]; - LifxHeader header; header.setSize(42); header.setTagged(false); @@ -1171,78 +1146,3 @@ void LifxLightBulb::handleLightStateMessageReceived(char* payloadData) { delete color; } - -// Functions for the main function -void onOff(LifxLightBulb *llb) { - - for (int i = 0; i < 2; i++) { - llb->turnOff(); - //cout << "Turning off!" << endl; - this_thread::sleep_for (chrono::milliseconds(1000)); - llb->turnOn(); - //cout << "Turning on!" << endl; - this_thread::sleep_for (chrono::milliseconds(1000)); - } -} - - -void adjustTemp(LifxLightBulb *llb) { - - for (int i = 2500; i < 9000; i += 100) { - //cout << "Adjusting Temp: " << i << endl; - llb->setTemperature(i); - this_thread::sleep_for (chrono::milliseconds(100)); - } - //cout << "Adjusted temperature to 9000!" << endl; - for (int i = 9000; i > 2500; i -= 100) { - //cout << "Adjusting Temp: " << i << endl; - llb->setTemperature(i); - this_thread::sleep_for (chrono::milliseconds(100)); - } - //cout << "Adjusted temperature to 2500!" << endl; -} - - -void adjustBright(LifxLightBulb *llb) { - for (int i = 100; i > 0; i -= 10) { - //cout << "Adjusting Brightness: " << i << endl; - llb->setColor(llb->getHue(), llb->getSaturation(), i); - this_thread::sleep_for (chrono::milliseconds(100)); - } - //cout << "Adjusted brightness to 0!" << endl; - for (int i = 0; i < 100; i += 10) { - //cout << "Adjusting Brightness: " << i << endl; - llb->setColor(llb->getHue(), llb->getSaturation(), i); - this_thread::sleep_for (chrono::milliseconds(100)); - } - //cout << "Adjusting brightness to 100!" << endl; -} - - -/*int main(int argc, char *argv[]) -{ - string macAddress1 = "D073D5128E300000"; - //string macAddress = "D073D50241DA0000"; - string devIPAddress1 = "192.168.1.126"; - //string devIPAddress = "192.168.1.232"; - IoTDeviceAddress* devAddress1 = new IoTDeviceAddress(devIPAddress1, 12345, 56700, false, false); - unordered_set* myset1 = new unordered_set(); - myset1->insert(devAddress1); - - IoTSet* setDevAddress1 = new IoTSet(myset1); - LifxLightBulb *llb1 = new LifxLightBulb(setDevAddress1, macAddress1); - cout << "Generated LifxLightBulb object!" << endl; - llb1->init(); - cout << "Initialized!" << endl; - llb1->turnOn(); - cout << "Turning on!" << endl; - onOff(llb1); -// adjustTemp(llb1); -// adjustBright(llb1); - llb1->turnOff(); - -// delete devAddress1; -// delete llb1; - - return 0; -}*/ diff --git a/benchmarks/drivers/Cpp/LifxLightBulb/LifxLightBulb.hpp b/benchmarks/drivers/Cpp/LifxLightBulb/LifxLightBulb.hpp index ec1bcdb..a337527 100644 --- a/benchmarks/drivers/Cpp/LifxLightBulb/LifxLightBulb.hpp +++ b/benchmarks/drivers/Cpp/LifxLightBulb/LifxLightBulb.hpp @@ -16,7 +16,6 @@ #include "IoTSet.hpp" #include "IoTUDP.hpp" #include "IoTDeviceAddress.hpp" -#include "Iterator.hpp" // Helper classes for LifxLightBulb #include "LifxHeader.hpp" diff --git a/benchmarks/drivers/Cpp/LifxLightBulb/LightBulb_Skeleton.cpp b/benchmarks/drivers/Cpp/LifxLightBulb/LightBulb_Skeleton.cpp index b2ec398..240c361 100644 --- a/benchmarks/drivers/Cpp/LifxLightBulb/LightBulb_Skeleton.cpp +++ b/benchmarks/drivers/Cpp/LifxLightBulb/LightBulb_Skeleton.cpp @@ -4,6 +4,7 @@ using namespace std; LightBulb_Skeleton::LightBulb_Skeleton(LightBulb *_mainObj, int _portSend, int _portRecv) { + bool _bResult = false; mainObj = _mainObj; rmiComm = new IoTRMICommServer(_portSend, _portRecv, &_bResult); @@ -453,7 +454,7 @@ void LightBulb_Skeleton::___waitRequestInvokeMethod(LightBulb_Skeleton* skel) { extern "C" void* createLightBulb_Skeleton(void** params) { // Args: *_mainObj, int _portSend, int _portRecv - return new LightBulb_Skeleton((LightBulb*) params[0], *((int*) params[0]), *((int*) params[1])); + return new LightBulb_Skeleton((LightBulb*) params[0], *((int*) params[1]), *((int*) params[2])); } extern "C" void destroyLightBulb_Skeleton(void* t) { @@ -464,7 +465,3 @@ extern "C" void destroyLightBulb_Skeleton(void* t) { extern "C" void initLightBulb_Skeleton(void* t) { } -int main() { - return 0; -} - diff --git a/benchmarks/drivers/Cpp/LifxLightBulb/LightBulb_Skeleton.hpp b/benchmarks/drivers/Cpp/LifxLightBulb/LightBulb_Skeleton.hpp index ab5f981..82fa32a 100644 --- a/benchmarks/drivers/Cpp/LifxLightBulb/LightBulb_Skeleton.hpp +++ b/benchmarks/drivers/Cpp/LifxLightBulb/LightBulb_Skeleton.hpp @@ -24,7 +24,6 @@ class LightBulb_Skeleton : public LightBulb // Synchronization variables bool methodReceived = false; bool didAlreadyInitWaitInvoke = false; - public: diff --git a/benchmarks/drivers/Java/Makefile b/benchmarks/drivers/Java/Makefile index 3ba1d43..3304677 100644 --- a/benchmarks/drivers/Java/Makefile +++ b/benchmarks/drivers/Java/Makefile @@ -26,7 +26,7 @@ light: $(JAVAC) $(JFLAGS) LifxLightBulb/*.java cp LifxLightBulb/LifxLightBulb.config $(BIN_DIR)/iotcode/LifxLightBulb cd $(BIN_DIR)/iotcode/LifxLightBulb; $(JAR) $(JARFLAGS) LifxLightBulb.jar ../../iotcode/LifxLightBulb/*.class ../../iotcode/interfaces/LightBulb*.class; mkdir tmp; mv LifxLightBulb.class ./tmp; rm -rf *.class; mv ./tmp/* ./; rm -rf ./tmp - + PHONY += camera camera: $(JAVAC) $(JFLAGS) AmcrestCamera/*.java @@ -62,7 +62,6 @@ PHONY += moisture moisture: $(JAVAC) $(JFLAGS) SpruceSensor/*.java cp SpruceSensor/SpruceSensor.config $(BIN_DIR)/iotcode/SpruceSensor - #cd $(BIN_DIR)/iotcode/SpruceSensor; $(JAR) $(JARFLAGS) SpruceSensor.jar ../../iotcode/SpruceSensor/*.class ../../iotcode/interfaces/MoistureSensor*.class ../../iotcode/interfaces/Camera*.class ../../IrrigationController/MotionDetection*.class cd $(BIN_DIR)/iotcode/SpruceSensor; $(JAR) $(JARFLAGS) SpruceSensor.jar ../../iotcode/SpruceSensor/*.class ../../iotcode/interfaces/MoistureSensor*.class ../../iotcode/interfaces/Camera*.class; mkdir tmp; mv SpruceSensor.class ./tmp; rm -rf *.class; mv ./tmp/* ./; rm -rf ./tmp PHONY += weathergateway @@ -111,21 +110,18 @@ PHONY += motion motion: $(JAVAC) $(JFLAGS) MotionSensor/*.java cp MotionSensor/MotionSensor.config $(BIN_DIR)/iotcode/MotionSensor - #cd $(BIN_DIR)/iotcode/MotionSensor; $(JAR) $(JARFLAGS) MotionSensor.jar ../../iotcode/MotionSensor/*.class ../../iotcode/interfaces/SmartthingsSensor*.class ../../iotcode/interfaces/Camera*.class ../../IrrigationController/MotionDetection*.class cd $(BIN_DIR)/iotcode/MotionSensor; $(JAR) $(JARFLAGS) MotionSensor.jar ../../iotcode/MotionSensor/*.class ../../iotcode/interfaces/SmartthingsSensor*.class ../../iotcode/interfaces/Camera*.class; mkdir tmp; mv MotionSensor.class ./tmp; rm -rf *.class; mv ./tmp/* ./; rm -rf ./tmp PHONY += multipurpose multipurpose: $(JAVAC) $(JFLAGS) MultipurposeSensor/*.java cp MultipurposeSensor/MultipurposeSensor.config $(BIN_DIR)/iotcode/MultipurposeSensor - #cd $(BIN_DIR)/iotcode/MultipurposeSensor; $(JAR) $(JARFLAGS) MultipurposeSensor.jar ../../iotcode/MultipurposeSensor/*.class ../../iotcode/interfaces/SmartthingsSensor*.class ../../iotcode/interfaces/Camera*.class ../../IrrigationController/MotionDetection*.class cd $(BIN_DIR)/iotcode/MultipurposeSensor; $(JAR) $(JARFLAGS) MultipurposeSensor.jar ../../iotcode/MultipurposeSensor/*.class ../../iotcode/interfaces/SmartthingsSensor*.class ../../iotcode/interfaces/Camera*.class; mkdir tmp; mv MultipurposeSensor.class ./tmp; rm -rf *.class; mv ./tmp/* ./; rm -rf ./tmp PHONY += waterleak waterleak: $(JAVAC) $(JFLAGS) WaterLeakSensor/*.java cp WaterLeakSensor/WaterLeakSensor.config $(BIN_DIR)/iotcode/WaterLeakSensor - #cd $(BIN_DIR)/iotcode/WaterLeakSensor; $(JAR) $(JARFLAGS) WaterLeakSensor.jar ../../iotcode/WaterLeakSensor/*.class ../../iotcode/interfaces/SmartthingsSensor*.class ../../iotcode/interfaces/Camera*.class ../../IrrigationController/MotionDetection*.class cd $(BIN_DIR)/iotcode/WaterLeakSensor; $(JAR) $(JARFLAGS) WaterLeakSensor.jar ../../iotcode/WaterLeakSensor/*.class ../../iotcode/interfaces/SmartthingsSensor*.class ../../iotcode/interfaces/Camera*.class; mkdir tmp; mv WaterLeakSensor.class ./tmp; rm -rf *.class; mv ./tmp/* ./; rm -rf ./tmp PHONY += doorlock @@ -183,7 +179,6 @@ PHONY += check-moisture check-moisture: $(JAVAC) $(JFLAGS) $(CHECKER_OPT) $(ASTUBS) SpruceSensor/*.java cp SpruceSensor/SpruceSensor.config $(BIN_DIR)/iotcode/SpruceSensor - #cd $(BIN_DIR)/iotcode/SpruceSensor; $(JAR) $(JARFLAGS) SpruceSensor.jar ../../iotcode/SpruceSensor/*.class ../../iotcode/interfaces/MoistureSensor*.class ../../iotcode/interfaces/Camera*.class ../../IrrigationController/MotionDetection*.class cd $(BIN_DIR)/iotcode/SpruceSensor; $(JAR) $(JARFLAGS) SpruceSensor.jar ../../iotcode/SpruceSensor/*.class ../../iotcode/interfaces/MoistureSensor*.class ../../iotcode/interfaces/Camera*.class; mkdir tmp; mv SpruceSensor.class ./tmp; rm -rf *.class; mv ./tmp/* ./; rm -rf ./tmp PHONY += check-weathergateway diff --git a/benchmarks/virtuals/LightBulbSmart.hpp b/benchmarks/virtuals/LightBulbSmart.hpp index 5666280..2920c21 100644 --- a/benchmarks/virtuals/LightBulbSmart.hpp +++ b/benchmarks/virtuals/LightBulbSmart.hpp @@ -3,7 +3,6 @@ #include #include #include -#include "IoTRMICall.hpp" #include "IoTRMIObject.hpp" using namespace std; diff --git a/benchmarks/virtuals/LightBulbTest.hpp b/benchmarks/virtuals/LightBulbTest.hpp index 5b60f41..544a9d0 100644 --- a/benchmarks/virtuals/LightBulbTest.hpp +++ b/benchmarks/virtuals/LightBulbTest.hpp @@ -4,7 +4,6 @@ #include #include #include -#include "IoTRMICall.hpp" #include "IoTRMIObject.hpp" using namespace std; @@ -22,15 +21,5 @@ class LightBulbTest virtual void setTemperature(int _temperature) = 0; virtual double getHue() = 0; virtual int getTemperature() = 0; - - // Custom hasher for LightBulbTest iterator - size_t hash(LightBulbTest const& device) const { - - // Use device address for hashing - std::stringstream ss; - ss << &device; - std::hash hashVal; - return hashVal(ss.str()); - } }; #endif diff --git a/benchmarks/virtuals/RoomSmart.hpp b/benchmarks/virtuals/RoomSmart.hpp index 7a9e845..8500311 100644 --- a/benchmarks/virtuals/RoomSmart.hpp +++ b/benchmarks/virtuals/RoomSmart.hpp @@ -3,7 +3,6 @@ #include #include #include -#include "IoTRMICall.hpp" #include "IoTRMIObject.hpp" using namespace std; diff --git a/iotjava/iotrmi/C++/ConcurrentLinkedListQueue.cpp b/iotjava/iotrmi/C++/ConcurrentLinkedListQueue.cpp index 9b6826d..0cdcebb 100644 --- a/iotjava/iotrmi/C++/ConcurrentLinkedListQueue.cpp +++ b/iotjava/iotrmi/C++/ConcurrentLinkedListQueue.cpp @@ -123,10 +123,6 @@ char* ConcurrentLinkedListQueue::deQAndGetLength(int* length) { retEl->setNext(NULL); delete retEl; // Return just the value - //cout << "Print bytes inside dequeue: "; - //IoTRMIUtil::printBytes(*((char**) retVal), *length, false); - //cout << "Dequeuing: " << *((char**) retVal) << endl; - //cout << "Dequeuing address: " << std::ref(retVal) << endl; return retVal; } } diff --git a/iotjava/iotrmi/C++/IoTRMICall.cpp b/iotjava/iotrmi/C++/IoTRMICall.cpp deleted file mode 100644 index aefe533..0000000 --- a/iotjava/iotrmi/C++/IoTRMICall.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include -#include -#include "IoTRMICall.hpp" - -using namespace std; - -int main(int argc, char *argv[]) -{ - int port = 5010; - const char* address = "localhost"; - int rev = 0; - bool bResult = false; - - int numRet = 3; - string retCls[] = { "int", "string", "int" }; - int param1 = 0; - string param2 = ""; - int param3 = 0; - void* retObj[] = { ¶m1, ¶m2, ¶m3 }; - - IoTRMICall *rc = new IoTRMICall(port, address, rev, &bResult); - char retBytes[] = { 0, 0, 4, -46, 0, 0, 0, 10, 116, 101, 115, 116, 115, 116, 114, 105, 110, 103, 0, 0, 21, 56 }; - rc->getReturnObjects(retBytes, retCls, numRet, retObj); - cout << "Param1: " << param1 << endl; - cout << "Param2: " << param2 << endl; - cout << "Param3: " << param3 << endl; - - return 0; -} diff --git a/iotjava/iotrmi/C++/IoTRMICall.hpp b/iotjava/iotrmi/C++/IoTRMICall.hpp deleted file mode 100644 index ee04ef1..0000000 --- a/iotjava/iotrmi/C++/IoTRMICall.hpp +++ /dev/null @@ -1,215 +0,0 @@ -/** Class IoTRMICall provides methods that the upper - * layers can use to transport and invoke methods - * when using IoTSocket, IoTSocketClient and IoTSocketServer. - *

- * This class serves in the stub part of the RMI - * communication. It bridges and creates RMI requests to be - * transferred into the RMI object. - * - * @author Rahmadi Trimananda - * @version 1.0 - * @since 2016-10-18 - */ -#ifndef _IOTRMICALL_HPP__ -#define _IOTRMICALL_HPP__ - -#include -#include -#include -#include "IoTRMIUtil.hpp" -#include "IoTSocketClient.hpp" - -using namespace std; - -mutex mtx; - -class IoTRMICall final { - public: - IoTRMICall(int _port, const char* _address, int _rev, bool* _bResult); - ~IoTRMICall(); - // Public methods - int methodLength(string paramCls[], void* paramObj[], int numParam); - char* methodToBytes(int objectId, int methId, string paramCls[], void* paramObj[], - char* method, int numParam); - void* remoteCall(int objectId, int methodId, string retType, string paramCls[], - void* paramObj[], int numParam, void* retObj); - void** getStructObjects(string retType[], int numRet, void* retObj[]); - void** getReturnObjects(char* retBytes, string retCls[], int numRet, void* retObj[]); - - private: - IoTRMIUtil *rmiUtil; - IoTSocketClient *rmiClient; - - // Private methods - void getMethodIds(const string methodSign[], const int size); -}; - - -// Constructor -IoTRMICall::IoTRMICall(int _port, const char* _address, int _rev, bool* _bResult) { - - rmiUtil = new IoTRMIUtil(); - if (rmiUtil == NULL) { - perror("IoTRMICall: IoTRMIUtil isn't initialized!"); - } - rmiClient = new IoTSocketClient(_port, _address, _rev, _bResult); - if (rmiClient == NULL) { - perror("IoTRMICall: IoTSocketClient isn't initialized!"); - } -} - - -// Destructor -IoTRMICall::~IoTRMICall() { - - // Clean up - if (rmiUtil != NULL) { - - delete rmiUtil; - rmiUtil = NULL; - } - if (rmiClient != NULL) { - - fflush(NULL); - rmiClient->close(); - delete rmiClient; - rmiClient = NULL; - } -} - - -// Calls a method remotely by passing in parameters and getting a return object -void* IoTRMICall::remoteCall(int objectId, int methodId, string retType, string paramCls[], - void* paramObj[], int numParam, void* retObj) { - - // Critical section that is used by different objects - lock_guard guard(mtx); - // Send input parameters - int len = methodLength(paramCls, paramObj, numParam); - char method[len]; - methodToBytes(objectId, methodId, paramCls, paramObj, method, numParam); - // Send bytes - fflush(NULL); - rmiClient->sendBytes(method, len); - fflush(NULL); - // Receive return value and return it to caller - if (retType.compare("void") == 0) - // Just make it NULL if it's a void return - retObj = NULL; - else { - int retLen = 0; - char* retObjBytes = NULL; - retObjBytes = rmiClient->receiveBytes(retObjBytes, &retLen); - retObj = IoTRMIUtil::getParamObject(retObj, retType.c_str(), retObjBytes, retLen); - // Delete received bytes object - delete[] retObjBytes; - } - - return retObj; -} - - -// Get a set of return objects (struct) -void** IoTRMICall::getStructObjects(string retType[], int numRet, void* retObj[]) { - - // Critical section that is used by different objects - lock_guard guard(mtx); - // Receive struct return value and return it to caller - int retLen = 0; - char* retObjBytes = NULL; - // Return size of array of struct - retObjBytes = rmiClient->receiveBytes(retObjBytes, &retLen); - retObj = getReturnObjects(retObjBytes, retType, numRet, retObj); - // Delete received bytes object - delete[] retObjBytes; - - return retObj; -} - - -// Find the bytes length of a method -int IoTRMICall::methodLength(string paramCls[], void* paramObj[], int numParam) { - - // Get byte arrays and calculate method bytes length - // Start from the object Id + method Id... - int methodLen = IoTRMIUtil::OBJECT_ID_LEN + IoTRMIUtil::METHOD_ID_LEN; - for (int i = 0; i < numParam; i++) { - // Find the parameter length - int paramLen = rmiUtil->getTypeSize(paramCls[i]); - if (paramLen == -1) { // Store the length of the field - indefinite length - paramLen = rmiUtil->getVarTypeSize(paramCls[i], paramObj[i]); - // Some space for param length, i.e. 32 bits for integer - methodLen = methodLen + IoTRMIUtil::PARAM_LEN; - } - // Calculate methodLen - methodLen = methodLen + paramLen; - } - return methodLen; -} - - -// Convert method and its parameters into bytes -char* IoTRMICall::methodToBytes(int objectId, int methId, string paramCls[], - void* paramObj[], char* method, int numParam) { - - // Get object Id in bytes - char objId[IoTRMIUtil::OBJECT_ID_LEN]; - IoTRMIUtil::intToByteArray(objectId, objId); - memcpy(method, objId, IoTRMIUtil::OBJECT_ID_LEN); - int pos = IoTRMIUtil::OBJECT_ID_LEN; - // Get method Id in bytes - char methodId[IoTRMIUtil::METHOD_ID_LEN]; - IoTRMIUtil::intToByteArray(methId, methodId); - memcpy(method + pos, methodId, IoTRMIUtil::METHOD_ID_LEN); - pos = pos + IoTRMIUtil::METHOD_ID_LEN; - // Get byte arrays and calculate method bytes length - for (int i = 0; i < numParam; i++) { - // Find the parameter length - int paramLen = rmiUtil->getTypeSize(paramCls[i]); - if (paramLen == -1) { // Store the length of the field - indefinite length - paramLen = rmiUtil->getVarTypeSize(paramCls[i], paramObj[i]); - // Write the parameter length - char prmLenBytes[IoTRMIUtil::PARAM_LEN]; - IoTRMIUtil::intToByteArray(paramLen, prmLenBytes); - memcpy(method + pos, prmLenBytes, IoTRMIUtil::PARAM_LEN); - pos = pos + IoTRMIUtil::PARAM_LEN; - } - // Get array of bytes and put it in the array of array of bytes - char objBytes[paramLen]; - IoTRMIUtil::getObjectBytes(objBytes, paramObj[i], paramCls[i].c_str()); - memcpy(method + pos, objBytes, paramLen); - pos = pos + paramLen; - } - - return method; -} - - -void** IoTRMICall::getReturnObjects(char* retBytes, string retCls[], int numRet, void* retObj[]) { - - // Byte scanning position - int pos = 0; - for (int i = 0; i < numRet; i++) { - int retLen = rmiUtil->getTypeSize(retCls[i]); - // Get the 32-bit field in the byte array to get the actual - // length (this is a param with indefinite length) - if (retLen == -1) { - char bytRetLen[IoTRMIUtil::RETURN_LEN]; - memcpy(bytRetLen, retBytes + pos, IoTRMIUtil::RETURN_LEN); - pos = pos + IoTRMIUtil::RETURN_LEN; - int* retLenPtr = IoTRMIUtil::byteArrayToInt(&retLen, bytRetLen); - retLen = *retLenPtr; - } - char retObjBytes[retLen]; - memcpy(retObjBytes, retBytes + pos, retLen); - pos = pos + retLen; - retObj[i] = IoTRMIUtil::getParamObject(retObj[i], retCls[i].c_str(), retObjBytes, retLen); - } - - return retObj; -} - - -#endif - - diff --git a/iotjava/iotrmi/C++/IoTRMIComm.hpp b/iotjava/iotrmi/C++/IoTRMIComm.hpp index 9f45c60..7d1502b 100644 --- a/iotjava/iotrmi/C++/IoTRMIComm.hpp +++ b/iotjava/iotrmi/C++/IoTRMIComm.hpp @@ -39,42 +39,42 @@ class IoTRMIComm { // Public methods virtual void sendReturnObj(void* retObj, string type, char* methodBytes) = 0; virtual void sendReturnObj(void* retObj[], string type[], int numRet, char* methodBytes) = 0; - int returnLength(void* retObj[], string retCls[], int numRet); - char* returnToBytes(void* retObj[], string retCls[], char* retBytes, int numRet); - char* getMethodBytes(); - int getMethodLength(); - int getObjectIdFromMethod(); - static int getObjectId(char* packetBytes); - static int getMethodId(char* packetBytes); - static int getPacketType(char* packetBytes); - void** getMethodParams(string paramCls[], int numParam, void* paramObj[], char* methodBytes); - void registerSkeleton(int objectId, bool* methodReceived); - void registerStub(int objectId, int methodId, bool* retValueReceived); - int getObjectIdCounter(); - void setObjectIdCounter(int objIdCounter); - void decrementObjectIdCounter(); - - int methodLength(string paramCls[], void* paramObj[], int numParam); - char* methodToBytes(int objectId, int methId, string paramCls[], void* paramObj[], - char* method, int numParam); + int returnLength(void* retObj[], string retCls[], int numRet); + char* returnToBytes(void* retObj[], string retCls[], char* retBytes, int numRet); + char* getMethodBytes(); + int getMethodLength(); + int getObjectIdFromMethod(); + static int getObjectId(char* packetBytes); + static int getMethodId(char* packetBytes); + static int getPacketType(char* packetBytes); + void** getMethodParams(string paramCls[], int numParam, void* paramObj[], char* methodBytes); + void registerSkeleton(int objectId, bool* methodReceived); + void registerStub(int objectId, int methodId, bool* retValueReceived); + int getObjectIdCounter(); + void setObjectIdCounter(int objIdCounter); + void decrementObjectIdCounter(); + + int methodLength(string paramCls[], void* paramObj[], int numParam); + char* methodToBytes(int objectId, int methId, string paramCls[], void* paramObj[], + char* method, int numParam); virtual void remoteCall(int objectId, int methodId, string paramCls[], - void* paramObj[], int numParam) = 0; - void* getReturnValue(string retType, void* retObj); + void* paramObj[], int numParam) = 0; + void* getReturnValue(string retType, void* retObj); - void** getStructObjects(string retType[], int numRet, void* retObj[]); - void** getReturnObjects(char* retBytes, string retCls[], int numRet, void* retObj[]); + void** getStructObjects(string retType[], int numRet, void* retObj[]); + void** getReturnObjects(char* retBytes, string retCls[], int numRet, void* retObj[]); protected: - IoTRMIUtil *rmiUtil; - char* methodBytes; - int methodLen; - char* retValueBytes; - int retValueLen; + IoTRMIUtil *rmiUtil; + char* methodBytes; + int methodLen; + char* retValueBytes; + int retValueLen; ConcurrentLinkedListQueue methodQueue; ConcurrentLinkedListQueue returnQueue; - map mapSkeletonId; - map mapStubId; - int objectIdCounter = std::numeric_limits::max(); + map mapSkeletonId; + map mapStubId; + int objectIdCounter = std::numeric_limits::max(); private: // Private methods @@ -113,7 +113,6 @@ IoTRMIComm::~IoTRMIComm() { void IoTRMIComm::wakeUpThreadOnMethodCall(IoTRMIComm* rmiComm) { int methLen = 0; - //cout << "Starting wakeUpThreadOnMethodCall()" << endl; while(true) { // Convert back to char* char* queueHead = rmiComm->methodQueue.deQAndGetLength(&methLen); @@ -135,7 +134,6 @@ void IoTRMIComm::wakeUpThreadOnMethodCall(IoTRMIComm* rmiComm) { void IoTRMIComm::wakeUpThreadOnReturnValue(IoTRMIComm* rmiComm) { int retLen = 0; - //cout << "Starting wakeUpThreadOnReturnValue()" << endl; while(true) { // Convert back to char* char* queueHead = rmiComm->returnQueue.deQAndGetLength(&retLen); diff --git a/iotjava/iotrmi/C++/IoTRMICommClient.hpp b/iotjava/iotrmi/C++/IoTRMICommClient.hpp index 77804cd..a08bb04 100644 --- a/iotjava/iotrmi/C++/IoTRMICommClient.hpp +++ b/iotjava/iotrmi/C++/IoTRMICommClient.hpp @@ -30,8 +30,6 @@ class IoTRMICommClient final : public IoTRMIComm { void sendReturnObj(void* retObj, string type, char* methodBytes); void sendReturnObj(void* retObj[], string type[], int numRet, char* methodBytes); void remoteCall(int objectId, int methodId, string paramCls[], void* paramObj[], int numParam); - //void waitForPackets(); - //void waitForPackets(IoTRMICommClient* rmiComm); private: IoTSocketClient *rmiClientSend; @@ -49,7 +47,6 @@ IoTRMICommClient::IoTRMICommClient(int _portSend, int _portRecv, const char* _ad rmiClientSend = new IoTSocketClient(_portRecv, _address, _rev, _bResult); thread th1 (&IoTRMICommClient::waitForPackets, this, this); th1.detach(); - } @@ -77,8 +74,6 @@ void IoTRMICommClient::waitForPackets(IoTRMICommClient* rmiComm) { packetBytes = rmiClientRecv->receiveBytes(packetBytes, &packetLen); fflush(NULL); if (packetBytes != NULL) { // If there is method bytes - //IoTRMIUtil::printBytes(packetBytes, packetLen, false); - //packetBytesPtr = &packetBytes; int packetType = getPacketType(packetBytes); if (packetType == IoTRMIUtil::METHOD_TYPE) { rmiComm->methodQueue.enqueue(packetBytes, packetLen); diff --git a/iotjava/iotrmi/C++/IoTRMICommServer.hpp b/iotjava/iotrmi/C++/IoTRMICommServer.hpp index 070b95a..3dd2074 100644 --- a/iotjava/iotrmi/C++/IoTRMICommServer.hpp +++ b/iotjava/iotrmi/C++/IoTRMICommServer.hpp @@ -71,17 +71,13 @@ IoTRMICommServer::~IoTRMICommServer() { void IoTRMICommServer::waitForConnectionOnServerRecv() { - //cout << "Wait on connection ServerRecv!" << endl; rmiServerRecv->connect(); - //cout << "Connected on connection ServerRecv!" << endl; } void IoTRMICommServer::waitForConnectionOnServerSend() { - //cout << "Wait on connection ServerSend!" << endl; rmiServerSend->connect(); - //cout << "Connected on connection ServerSend!" << endl; } @@ -89,13 +85,11 @@ void IoTRMICommServer::waitForPackets(IoTRMICommServer* rmiComm) { char* packetBytes = NULL; int packetLen = 0; - //cout << "Starting waitForPacketsOnServer()" << endl; while(true) { fflush(NULL); packetBytes = rmiComm->rmiServerRecv->receiveBytes(packetBytes, &packetLen); fflush(NULL); if (packetBytes != NULL) { // If there is method bytes - //IoTRMIUtil::printBytes(packetBytes, packetLen, false); int packetType = IoTRMIComm::getPacketType(packetBytes); if (packetType == IoTRMIUtil::METHOD_TYPE) { rmiComm->methodQueue.enqueue(packetBytes, packetLen); @@ -139,7 +133,6 @@ void IoTRMICommServer::sendReturnObj(void* retObj, string type, char* methodByte IoTRMIUtil::getObjectBytes(retObjBytes, retObj, type.c_str()); memcpy(retAllObjBytes + headerLen, retObjBytes, retLen); fflush(NULL); - //IoTRMIUtil::printBytes(retAllObjBytes, headerLen+retLen, false); rmiServerSend->sendBytes(retAllObjBytes, headerLen+retLen); fflush(NULL); } diff --git a/iotjava/iotrmi/C++/IoTRMIObject.cpp b/iotjava/iotrmi/C++/IoTRMIObject.cpp deleted file mode 100644 index a2e321a..0000000 --- a/iotjava/iotrmi/C++/IoTRMIObject.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include -#include -#include "IoTRMIObject.hpp" - -using namespace std; - -int main(int argc, char *argv[]) -{ - int port = 5010; - bool bResult = false; - IoTRMIObject *ro = new IoTRMIObject(port, &bResult); - - int numRet = 3; - string retCls[] = { "int", "string", "int" }; - int param1 = 1234; - string param2 = "teststring"; - int param3 = 5432; - void* retObj[] = { ¶m1, ¶m2, ¶m3 }; - ro->sendReturnObj(retObj, retCls, numRet); - - return 0; -} diff --git a/iotjava/iotrmi/C++/IoTRMIUtil.hpp b/iotjava/iotrmi/C++/IoTRMIUtil.hpp index 2f18adc..0090c06 100644 --- a/iotjava/iotrmi/C++/IoTRMIUtil.hpp +++ b/iotjava/iotrmi/C++/IoTRMIUtil.hpp @@ -34,13 +34,13 @@ class IoTRMIUtil final { //~IoTRMIUtil(); // Helper functions - static void printBytes(char* bytes, const int len, const bool hex); - static int hashCode(string str); + static void printBytes(char* bytes, const int len, const bool hex); + static int hashCode(string str); static char* getHashCodeBytes(string methodSign, char* bytes); - int getTypeSize(string type); - int getVarTypeSize(string type, void* paramObj); - static int getArrStringLength(vector arrString); - static int getByteStringLength(vector arrString); + int getTypeSize(string type); + int getVarTypeSize(string type, void* paramObj); + static int getArrStringLength(vector arrString); + static int getByteStringLength(vector arrString); // Primitives to byte array static char* byteToByteArray(char c, char* bytes); @@ -138,7 +138,6 @@ IoTRMIUtil::IoTRMIUtil() { std::vector nonPrimCplus (IoTRMITypes::nonPrimitivesCplus, IoTRMITypes::nonPrimitivesCplus + sizeof(IoTRMITypes::nonPrimitivesCplus)/sizeof(string)); - // Write into maps IoTRMITypes::arraysToMap(mapPrimitives, primJava, primCplus); IoTRMITypes::arraysToMap(mapPrimitiveSizes, primJava, primSizes); diff --git a/iotjava/iotrmi/C++/IoTSocket.hpp b/iotjava/iotrmi/C++/IoTSocket.hpp index d39eba7..d967ded 100644 --- a/iotjava/iotrmi/C++/IoTSocket.hpp +++ b/iotjava/iotrmi/C++/IoTSocket.hpp @@ -32,6 +32,7 @@ static const int MSG_LEN_SIZE = 4; #include #include #include +#include #include "IoTRMIUtil.hpp" @@ -50,19 +51,19 @@ class IoTSocket { IoTSocket(int iPort, bool* pResult); ~IoTSocket(); - bool close(); // Close the socket - bool sendBytes(char* pVals, int _iLen); // Send a set of bytes - char* receiveBytes(char* pVals, int* len); // Receive a set of bytes + bool close(); // Close the socket + bool sendBytes(char* pVals, int _iLen); // Send a set of bytes + char* receiveBytes(char* pVals, int* len); // Receive a set of bytes protected: - int m_iPort; // Port I'm listening on - int m_iSock; // Socket connection - struct sockaddr_in m_addrRemote; // Connector's address information - double* m_pBuffer; // Reuse the same memory for buffer + int m_iPort; // Port I'm listening on + int m_iSock; // Socket connection + struct sockaddr_in m_addrRemote; // Connector's address information + double* m_pBuffer; // Reuse the same memory for buffer private: - bool receiveAck(); - bool sendAck(); + bool receiveAck(); + bool sendAck(); }; @@ -109,8 +110,6 @@ bool IoTSocket::sendBytes(char* pVals, int iLen) { return false; } - //IoTRMIUtil::printBytes(size, 4, false); - if (send(m_iSock, (char *) pVals, iLen, 0) == -1) { perror("IoTSocket: Send bytes error!"); return false; @@ -134,12 +133,12 @@ char* IoTSocket::receiveBytes(char* pVals, int* len) // Critical section that is used by different objects lock_guard guard(recvBytesMutex); - int i = 0; - int j = 0; - char* pTemp = NULL; + int i = 0; + int j = 0; + char* pTemp = NULL; int iTotalBytes = 0; int iNumBytes = 0; - bool bEnd = false; + bool bEnd = false; int iTotal = 0; int iResult = 0; @@ -149,6 +148,7 @@ char* IoTSocket::receiveBytes(char* pVals, int* len) iResult = recv(m_iSock, size, MSG_LEN_SIZE, 0); iTotal += iResult; } + if (iResult == -1) { perror("IoTSocket: Receive size error!"); return NULL; diff --git a/iotjava/iotrmi/C++/IoTSocketClient.cpp b/iotjava/iotrmi/C++/IoTSocketClient.cpp deleted file mode 100644 index ce9f0a5..0000000 --- a/iotjava/iotrmi/C++/IoTSocketClient.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include -#include -#include "IoTSocketClient.hpp" - -using namespace std; - -#define SIZE 10 /* how many items per packet */ -#define NUM_PACKS 3 /* number of times we'll do it */ - -int main(int argc, char *argv[]) -{ - char D[SIZE]; - - /* if no command line arguments passed, we'll default to - these two port number */ - int port = 5010; - int rev = 0; - bool bResult = false; - - fflush(NULL); - IoTSocketClient mylink(port, "127.0.0.1", rev, &bResult); - - if (!bResult) - { - printf("Failed to create Client object!\n"); - return 0; - } - - printf("Client, made connection...\n"); - fflush(NULL); - - /* put some dummy data in our arrays */ - - for (int i = 0; i < SIZE; i++) - { - D[i] = i; - } - - for (int i = 0; i < NUM_PACKS; i++) - { - printf("Client, receiving bytes, iteration %d\n", i); - fflush(NULL); - mylink.receiveBytes(D); - } - - char str[50]; - char* str2; - fflush(NULL); - str2 = mylink.receiveBytes(str); - string s(str2); - cout << "Received text: " << s << endl; - - printf("Client, closing connection...\n"); - fflush(NULL); - mylink.close(); - - printf("Client, done...\n"); - fflush(NULL); - return 0; -} diff --git a/iotjava/iotrmi/C++/IoTSocketClient.hpp b/iotjava/iotrmi/C++/IoTSocketClient.hpp index 4f5dec5..271d465 100644 --- a/iotjava/iotrmi/C++/IoTSocketClient.hpp +++ b/iotjava/iotrmi/C++/IoTSocketClient.hpp @@ -28,16 +28,12 @@ IoTSocketClient::IoTSocketClient(int iPort, const char* pStrHost, bool bReverse, IoTSocket(iPort, pResult) { struct hostent* he = NULL; - if (pResult) *pResult = false; - if ((he = gethostbyname(pStrHost)) == NULL) { - perror("IoTSocketClient: Gethostbyname error!"); return; } - if ((m_iSock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("IoTSocketClient: Socket error!"); @@ -50,7 +46,10 @@ IoTSocketClient::IoTSocketClient(int iPort, const char* pStrHost, bool bReverse, memset(&(m_addrRemote.sin_zero), 0, 8); // Make socket client wait for socket server to be ready - while (connect(m_iSock, (struct sockaddr *) &m_addrRemote, sizeof(struct sockaddr)) == -1) { } + if (connect(m_iSock, (struct sockaddr *) &m_addrRemote, sizeof(struct sockaddr)) == -1) { + perror("IoTSocketServer: Accept connection error!"); + return; + } // Send out request for reversed bits or not char temp[1]; diff --git a/iotjava/iotrmi/C++/IoTSocketServer.cpp b/iotjava/iotrmi/C++/IoTSocketServer.cpp deleted file mode 100644 index 95e1e60..0000000 --- a/iotjava/iotrmi/C++/IoTSocketServer.cpp +++ /dev/null @@ -1,54 +0,0 @@ -#include -#include -#include "IoTSocketServer.hpp" -#include "IoTRMIUtil.hpp" - -using namespace std; - - -#define SIZE 10 /* how many items per packet */ -#define NUM_PACKS 3 /* number of times we'll do it */ - -int main(int argc, char *argv[]) -{ - char D[SIZE]; - bool bResult = false; - - /* if no command line arguments passed, we'll default to - these two port number */ - int port = 5010; - - fflush(NULL); - - IoTSocketServer mylink(port, &bResult); - if (!bResult) - { - printf("Failed to create Server object!\n"); - return 0; - } - - /* put some dummy data in our arrays */ - for (int i = 0,j = 100; i < SIZE; i++, j--) - { - //D[i] = i; - D[i] = j; - } - printf("Server, waiting for connection...\n"); - fflush(NULL); - mylink.connect(); - printf("Server, got a connection...\n"); - fflush(NULL); - - char bytes[24]; - mylink.receiveBytes(bytes); - cout << "Received bytes: "; - IoTRMIUtil::printBytes(bytes, 24, false); - - printf("Server, closing connection...\n"); - fflush(NULL); - mylink.close(); - - printf("Server, done...\n"); - fflush(NULL); - return 0; -} diff --git a/iotjava/iotrmi/C++/IoTSocketServer.hpp b/iotjava/iotrmi/C++/IoTSocketServer.hpp index 47400f9..f82bbf1 100644 --- a/iotjava/iotrmi/C++/IoTSocketServer.hpp +++ b/iotjava/iotrmi/C++/IoTSocketServer.hpp @@ -20,15 +20,14 @@ class IoTSocketServer final : public IoTSocket { - public: + public: IoTSocketServer(int iPort, bool* pResult); - - bool connect(); // Accept a new connection + bool connect(); // Accept a new connection protected: - bool m_bReverse; // Am I reversing byte order or not? - int m_iListen; // Descriptor we are listening on - struct sockaddr_in m_addrMe; // My address information + bool m_bReverse; // Am I reversing byte order or not? + int m_iListen; // Descriptor we are listening on + struct sockaddr_in m_addrMe; // My address information }; @@ -37,10 +36,8 @@ IoTSocketServer::IoTSocketServer(int iPort, bool* pResult) : IoTSocket(iPort, pResult) { m_iListen = -1; - if (pResult) *pResult = false; - if ((m_iListen = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("IoTSocketServer: Socket error!"); @@ -75,12 +72,12 @@ IoTSocketServer::IoTSocketServer(int iPort, bool* pResult) : bool IoTSocketServer::connect() { socklen_t iSinSize = (socklen_t) sizeof(struct sockaddr_in); - if ((m_iSock = accept(m_iListen, (struct sockaddr *) &m_addrRemote, &iSinSize)) == -1) { perror("IoTSocketServer: Accept connection error!"); return false; } + // The client sends us an int to indicate if we should // be reversing byte order on this connection. The client // is sending 0 or 1, so a reversed 0 still looks @@ -93,6 +90,7 @@ bool IoTSocketServer::connect() iResult = recv(m_iSock, temp, 1, 0); iTotal += iResult; } + if (iResult == -1) { perror("IoTSocketServer: Receive data error!"); @@ -100,12 +98,11 @@ bool IoTSocketServer::connect() } int iVal = temp[0]; - if (iVal == 0) m_bReverse = false; else m_bReverse = true; - + return true; } diff --git a/iotjava/iotrmi/C++/Test.cpp b/iotjava/iotrmi/C++/Test.cpp deleted file mode 100644 index 7c77d30..0000000 --- a/iotjava/iotrmi/C++/Test.cpp +++ /dev/null @@ -1,37 +0,0 @@ -#include -#include -#include -#include "IoTRMITypes.hpp" - -using namespace std; - - -int main(int argc, char *argv[]) -{ - std::array myints; - std::cout << "size of myints: " << myints.size() << std::endl; - std::cout << "sizeof(myints): " << sizeof(myints) << std::endl; - - int test[5] = { 0 }; - std::memcpy(myints.data(), test, 5); - - std::vector test2 (test, test + sizeof(test)/sizeof(int)); - - string test3[2] = { "test1", "test2" }; - std::vector test4 (test3, test3 + sizeof(test3)/sizeof(string)); - std::cout << "vector[0]: " << test4[0] << std::endl; - - std::vector primJava (IoTRMITypes::primitivesJava, - IoTRMITypes::primitivesJava + sizeof(IoTRMITypes::primitivesJava)/sizeof(string)); - std::vector primCplus (IoTRMITypes::primitivesCplus, - IoTRMITypes::primitivesCplus + sizeof(IoTRMITypes::primitivesCplus)/sizeof(string)); - - map mymap; - IoTRMITypes::arraysToMap(mymap, primJava, primCplus); - for (std::map::iterator it=mymap.begin(); it!=mymap.end(); ++it) - std::cout << it->first << " => " << it->second << '\n'; - - std::cout << "Result of find: " << mymap.find("Boolean")->second << std::endl; - - return 0; -} diff --git a/iotjava/iotrmi/C++/basics/CallBack.hpp b/iotjava/iotrmi/C++/basics/CallBack.hpp deleted file mode 100644 index 7b7c8a1..0000000 --- a/iotjava/iotrmi/C++/basics/CallBack.hpp +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef _CALLBACK_HPP__ -#define _CALLBACK_HPP__ - -#include - -using namespace std; - -class CallBack : public CallBackInterface { - public: - CallBack(int _i); - - int printInt(); - void setInt(int _i); - void needCallback(TestClassComplete* tc); - - private: - int intA; -}; - - -// Constructor -CallBack::CallBack(int _i) { - - intA = _i; -} - - -int CallBack::printInt() { - - cout << "Integer: " << intA << endl; - return intA; -} - - -void CallBack::setInt(int _i) { - - intA = _i; -} - -void CallBack::needCallback(TestClassComplete* tc) { - - cout << endl << "Short from TestClass: " << tc->getShort(1234) << endl << endl; -} - -#endif - diff --git a/iotjava/iotrmi/C++/basics/TestClass.hpp b/iotjava/iotrmi/C++/basics/TestClass.hpp deleted file mode 100644 index ca96349..0000000 --- a/iotjava/iotrmi/C++/basics/TestClass.hpp +++ /dev/null @@ -1,598 +0,0 @@ -#ifndef _TESTCLASS_HPP__ -#define _TESTCLASS_HPP__ - -#include -#include -#include -#include "TestClassInterface.hpp" -#include "CallBackInterfaceWithCallBack.hpp" -#include "Enum.hpp" -#include "Struct.hpp" - -using namespace std; - -class TestClass : public TestClassInterface { - public: - TestClass(); - TestClass(int _int, float _float, string _string); - - char getByte(char in); - short getShort(short in); - int64_t getLong(int64_t in); - float getFloat(float in); - double getDouble(double in); - bool getBoolean(bool in); - char getChar(char in); - - vector getByteArray(vector in); - vector getShortArray(vector in); - vector getLongArray(vector in); - vector getFloatArray(vector in); - vector getDoubleArray(vector in); - vector getBooleanArray(vector in); - vector getCharArray(vector in); - - vector getByteList(vector in); - vector getShortList(vector in); - vector getLongList(vector in); - vector getFloatList(vector in); - vector getDoubleList(vector in); - vector getBooleanList(vector in); - vector getCharList(vector in); - - // Callbacks - void registerCallback(CallBackInterfaceWithCallBack* _cb); - void registerCallbackArray(vector _cb); - void registerCallbackList(vector _cb); - void registerCallbackComplex(int in, vector _cb, double db); - int callBack(); - vector handleCallbackEnum(vector en, char c, vector _cb); - - // Enum - Enum handleEnum(Enum en); - vector handleEnumArray(vector vecEn); - vector handleEnumList(vector vecEn); - Enum handleEnumComplex(Enum en, int i, char c); - vector handleEnumComplex2(vector en, int i, char c); - vector handleEnumTwo(vector en1, vector en2); - vector handleEnumThree(vector en1, vector en2, vector str1, vector str2); - - // Struct - Struct handleStruct(Struct str); - vector handleStructArray(vector vecStr); - vector handleStructList(vector vecStr); - Struct handleStructComplex(int in, char c, Struct str); - vector handleStructComplex2(int in, char c, vector vecStr); - vector handleStructTwo(vector str1, vector str2); - vector handleStructThree(vector str1, vector str2, vector str3); - - vector handleEnumStruct(vector en, vector str, char c); - vector handleAll(vector en, vector str, char c, vector _cb); - vector handleAllTwo(vector en1, vector en2, vector str1, vector str2, char c, - vector _cb1, vector _cb2); - - int getA(); - void setA(int _int); - void setB(float _float); - void setC(string _string); - string sumArray(vector newA); - int setAndGetA(int newA); - int setACAndGetA(string newC, int newA); - - private: - int intA; - float floatB; - string stringC; - vector cbvec; -}; - - -TestClass::TestClass() { - - intA = 1; - floatB = 2; - stringC = "345"; - // cbvec doesn't need to be initialized again -} - - -TestClass::TestClass(int _int, float _float, string _string) { - - intA = _int; - floatB = _float; - stringC = _string; - // cbvec doesn't need to be initialized again -} - - -void TestClass::registerCallbackArray(vector _cb) { - - for (CallBackInterfaceWithCallBack* cb : _cb) { - cbvec.push_back(cb); - cout << "Registering callback object in array!" << endl; - } -} - - -void TestClass::registerCallbackList(vector _cb) { - - for (CallBackInterfaceWithCallBack* cb : _cb) { - cbvec.push_back(cb); - cout << "Registering callback object in list!" << endl; - } -} - - -void TestClass::registerCallbackComplex(int in, vector _cb, double db) { - - for (CallBackInterfaceWithCallBack* cb : _cb) { - cbvec.push_back(cb); - cout << "Registering callback object in list!" << endl; - } - - cout << "Integer: " << in << endl; - cout << "Double: " << db << endl; -} - - -void TestClass::registerCallback(CallBackInterfaceWithCallBack* _cb) { - - cbvec.push_back(_cb); - cout << "Registering callback object!" << endl; -} - - -int TestClass::callBack() { - - int sum = 0; - for (CallBackInterfaceWithCallBack* cb : cbvec) { - //cout << "Sum: " << sum << endl; - sum = sum + cb->printInt(); - cb->needCallback(this); - //cb->needCallback(this); - TestClass* tc = new TestClass(); - cb->needCallback(tc); - //cout << "Sum after: " << sum << endl; - } - cout << "About to return sum: " << sum << endl; - - return sum; -} - - -// Single variables -char TestClass::getByte(char in) { - - return in; -} - - -short TestClass::getShort(short in) { - - return in; -} - - -int64_t TestClass::getLong(int64_t in) { - - return in; -} - - -float TestClass::getFloat(float in) { - - return in; -} - - -double TestClass::getDouble(double in) { - - return in; -} - - -bool TestClass::getBoolean(bool in) { - - return in; -} - - -char TestClass::getChar(char in) { - - return in; -} - - -// Arrays -vector TestClass::getByteArray(vector in) { - - return in; -} - - -vector TestClass::getShortArray(vector in) { - - return in; -} - - -vector TestClass::getLongArray(vector in) { - - return in; -} - - -vector TestClass::getFloatArray(vector in) { - - return in; -} - - -vector TestClass::getDoubleArray(vector in) { - - return in; -} - - -vector TestClass::getBooleanArray(vector in) { - - return in; -} - - -vector TestClass::getCharArray(vector in) { - - return in; -} - -// List -vector TestClass::getByteList(vector in) { - - return in; -} - - -vector TestClass::getShortList(vector in) { - - return in; -} - - -vector TestClass::getLongList(vector in) { - - return in; -} - - -vector TestClass::getFloatList(vector in) { - - return in; -} - - -vector TestClass::getDoubleList(vector in) { - - return in; -} - - -vector TestClass::getBooleanList(vector in) { - - return in; -} - - -vector TestClass::getCharList(vector in) { - - return in; -} - - -int TestClass::getA() { - - return intA; -} - - -void TestClass::setA(int _int) { - - intA = _int; -} - - -void TestClass::setB(float _float) { - - floatB = _float; -} - - -void TestClass::setC(string _string) { - - stringC = _string; -} - - -// Enum -Enum TestClass::handleEnum(Enum en) { - - cout << "Enum: " << en << endl; - - return en; -} - - -vector TestClass::handleEnumArray(vector vecEn) { - - for (Enum en : vecEn) { - cout << "Enum: " << en << endl; - } - - return vecEn; -} - - -vector TestClass::handleEnumList(vector vecEn) { - - for (Enum en : vecEn) { - cout << "Enum: " << en << endl; - } - - return vecEn; -} - - -Enum TestClass::handleEnumComplex(Enum en, int i, char c) { - - cout << "Enum: " << en << endl; - cout << "Integer: " << i << endl; - cout << "Char: " << c << endl; - - return en; -} - - -vector TestClass::handleEnumComplex2(vector vecEn, int in, char c) { - - for (Enum en : vecEn) { - cout << "Enum: " << en << endl; - } - cout << "Integer: " << in << endl; - cout << "Char: " << c << endl; - - return vecEn; -} - - -vector TestClass::handleEnumTwo(vector en1, vector en2) { - - for (Enum en : en1) { - cout << "Enum1: " << en << endl; - } - for (Enum en : en2) { - cout << "Enum2: " << en << endl; - } - - return en1; -} - - -vector TestClass::handleEnumThree(vector en1, vector en2, vector str1, vector str2) { - - for (Enum en : en1) { - cout << "Enum1: " << en << endl; - } - for (Enum en : en2) { - cout << "Enum2: " << en << endl; - } - - return en1; -} - - - -// Struct -Struct TestClass::handleStruct(Struct str) { - - cout << "Name: " << str.name << endl; - cout << "Value: " << str.value << endl; - cout << "Year: " << str.year << endl; - - Struct test; - test.name = "Anonymous"; - test.value = 1.33; - test.year = 2016; - str = test; - - return str; -} - - -vector TestClass::handleStructArray(vector vecStr) { - - for (Struct str : vecStr) { - - cout << "Name: " << str.name << endl; - cout << "Value: " << str.value << endl; - cout << "Year: " << str.year << endl; - } - Struct test; - test.name = "Anonymous"; - test.value = 1.33; - test.year = 2016; - vecStr.push_back(test); - - return vecStr; -} - - -vector TestClass::handleStructList(vector vecStr) { - - for (Struct str : vecStr) { - - cout << "Name: " << str.name << endl; - cout << "Value: " << str.value << endl; - cout << "Year: " << str.year << endl; - } - Struct test; - test.name = "Trimananda"; - test.value = 1.33; - test.year = 2016; - vecStr.push_back(test); - - return vecStr; -} - - -vector TestClass::handleStructTwo(vector str1, vector str2) { - - for (Struct str : str1) { - - cout << "Name: " << str.name << endl; - cout << "Value: " << str.value << endl; - cout << "Year: " << str.year << endl; - } - - return str2; -} - - -vector TestClass::handleStructThree(vector str1, vector str2, vector str3) { - - for (Struct str : str1) { - - cout << "Name: " << str.name << endl; - cout << "Value: " << str.value << endl; - cout << "Year: " << str.year << endl; - } - - return str2; -} - - -Struct TestClass::handleStructComplex(int in, char c, Struct str) { - - cout << "Name: " << str.name << endl; - cout << "Value: " << str.value << endl; - cout << "Year: " << str.year << endl; - - cout << "Integer: " << in << endl; - cout << "Char: " << c << endl; - - Struct test; - test.name = "Anonymous"; - test.value = 1.33; - test.year = 2016; - str = test; - - return str; -} - - -vector TestClass::handleStructComplex2(int in, char c, vector vecStr) { - - for (Struct str : vecStr) { - cout << "Name: " << str.name << endl; - cout << "Value: " << str.value << endl; - cout << "Year: " << str.year << endl; - } - - cout << "Integer: " << in << endl; - cout << "Char: " << c << endl; - - return vecStr; -} - - -vector TestClass::handleEnumStruct(vector en, vector str, char c) { - - for (Struct st : str) { - cout << "Name: " << st.name << endl; - cout << "Value: " << st.value << endl; - cout << "Year: " << st.year << endl; - } - - cout << "Char: " << c << endl; - - return en; -} - - -vector TestClass::handleAll(vector en, vector str, char c, vector _cb) { - - for (CallBackInterfaceWithCallBack* cb : _cb) { - cbvec.push_back(cb); - cout << "Registering callback object in array!" << endl; - } - - for (Struct st : str) { - cout << "Name: " << st.name << endl; - cout << "Value: " << st.value << endl; - cout << "Year: " << st.year << endl; - } - - cout << "Char: " << c << endl; - - return en; -} - - -vector TestClass::handleAllTwo(vector en1, vector en2, vector str1, vector str2, char c, - vector _cb1, vector _cb2) { - - for (CallBackInterfaceWithCallBack* cb : _cb1) { - cbvec.push_back(cb); - cout << "Registering callback object in array!" << endl; - } - - for (Struct st : str1) { - cout << "Name: " << st.name << endl; - cout << "Value: " << st.value << endl; - cout << "Year: " << st.year << endl; - } - - cout << "Char: " << c << endl; - - return en1; -} - - -vector TestClass::handleCallbackEnum(vector en, char c, vector _cb) { - - for (CallBackInterfaceWithCallBack* cb : _cb) { - cbvec.push_back(cb); - cout << "Registering callback object in array!" << endl; - } - - cout << "Char: " << c << endl; - - return en; -} - - -string TestClass::sumArray(vector newA) { - - string sum = ""; - int len = newA.size(); - for(int c = 0; c < len; c++) { - sum = sum + newA[c]; - } - return sum; -} - - -int TestClass::setAndGetA(int newA) { - - intA = newA; - return intA; -} - - -int TestClass::setACAndGetA(string newC, int newA) { - - stringC = newC; - intA = newA; - return intA; -} - -#endif - diff --git a/iotjava/iotrmi/C++/basics/TestClassAdvanced_Stub.cpp b/iotjava/iotrmi/C++/basics/TestClassAdvanced_Stub.cpp deleted file mode 100644 index 069c35f..0000000 --- a/iotjava/iotrmi/C++/basics/TestClassAdvanced_Stub.cpp +++ /dev/null @@ -1,154 +0,0 @@ -#include -#include -#include "TestClassComplete_Stub.hpp" -#include "CallBack.hpp" - -using namespace std; - -int main(int argc, char *argv[]) -{ - - int port = 5010; - const char* address = "localhost"; - //const char* address = "192.168.2.191"; // RPi2 - //const char* skeletonAddress = "128.195.136.170"; // dc-9.calit2.uci.edu - const char* skeletonAddress = "128.195.204.132"; - const char* callbackAddress = "128.195.204.132"; // dw-2.eecs.uci.edu (this machine) - //const char* skeletonAddress = "192.168.2.108"; // RPi1 - //const char* callbackAddress = "192.168.2.191"; // RPi2 - int rev = 0; - bool bResult = false; - vector ports; - ports.push_back(12345); - - TestClassComplete *tcStub = new TestClassComplete_Stub(port, skeletonAddress, callbackAddress, rev, &bResult, ports); - /*cout << "==== ENUM ====" << endl; - Enum en; - en = APPLE; - Enum res = tcStub->handleEnum(en); - cout << "Return value: " << res << endl; - Enum resComp = tcStub->handleEnumComplex(en, 23, 'c'); - cout << "Return value: " << resComp << endl; - vector vecEn; - vecEn.push_back(APPLE); - vecEn.push_back(ORANGE); - vecEn.push_back(APPLE); - vecEn.push_back(GRAPE); - vector vecRes = tcStub->handleEnumArray(vecEn); - for (Enum en : vecRes) { - cout << "Enum value: " << en << endl; - } - vector vecRes2 = tcStub->handleEnumList(vecEn); - for (Enum en : vecRes2) { - cout << "Enum value: " << en << endl; - } - vector vecRes3 = tcStub->handleEnumComplex2(vecEn, 23, 'c'); - for (Enum en : vecRes3) { - cout << "Enum value: " << en << endl; - } - - - cout << "==== STRUCT ====" << endl; - Struct str; - str.name = "Rahmadi"; - str.value = 0.123; - str.year = 2016; - Struct resStr = tcStub->handleStruct(str); - cout << "Name: " << resStr.name << endl; - cout << "Value:" << resStr.value << endl; - cout << "Year" << resStr.year << endl; - Struct resStr2 = tcStub->handleStructComplex(23, 'c', str); - cout << "Name: " << resStr2.name << endl; - cout << "Value:" << resStr2.value << endl; - cout << "Year" << resStr2.year << endl; - Struct str2; - str2.name = "Trimananda"; - str2.value = 0.124; - str2.year = 2017; - vector vecStr; - vecStr.push_back(str); - vecStr.push_back(str2); - vector vecRetStr = tcStub->handleStructArray(vecStr); - for (Struct st : vecRetStr) { - cout << "Name: " << st.name << endl; - cout << "Value: " << st.value << endl; - cout << "Year: " << st.year << endl; - } - vector vecRetStr2 = tcStub->handleStructList(vecStr); - for (Struct st : vecRetStr2) { - cout << "Name: " << st.name << endl; - cout << "Value: " << st.value << endl; - cout << "Year: " << st.year << endl; - } - vector vecRetStr3 = tcStub->handleStructComplex2(23, 'c', vecStr); - for (Struct st : vecRetStr3) { - cout << "Name: " << st.name << endl; - cout << "Value:" << st.value << endl; - cout << "Year" << st.year << endl; - } - vector vecRes4 = tcStub->handleEnumStruct(vecEn, vecStr, 'c'); - for (Enum en : vecRes4) { - cout << "Enum value: " << en << endl; - }*/ - - cout << "==== CALLBACK ====" << endl; - CallBackInterface *cbSingle = new CallBack(2354); - tcStub->registerCallback(cbSingle); - cout << "Return value from callback: " << tcStub->callBack() << endl; - /*CallBackInterface *cb1 = new CallBack(23); - CallBackInterface *cb2 = new CallBack(33); - CallBackInterface *cb3 = new CallBack(43); - vector cb; - cb.push_back(cb1); - cb.push_back(cb2); - cb.push_back(cb3); - tcStub->registerCallbackArray(cb); - cout << "Return value from callback: " << tcStub->callBack() << endl;*/ - /*CallBackInterface *cb4 = new CallBack(53); - CallBackInterface *cb5 = new CallBack(63); - CallBackInterface *cb6 = new CallBack(73); - vector cblist; - cblist.push_back(cb4); - cblist.push_back(cb5); - cblist.push_back(cb6);*/ -// tcStub->registerCallbackList(cblist); -// cout << "Return value from callback: " << tcStub->callBack() << endl; -/* tcStub->registerCallbackComplex(23, cblist, 0.1234); - cout << "Return value from callback: " << tcStub->callBack() << endl; - vector vecRes5 = tcStub->handleAll(vecEn, vecStr, 'c', cblist); - for (Enum en : vecRes5) { - cout << "Enum value: " << en << endl; - } - - vector vecRes6 = tcStub->handleCallbackEnum(vecEn, 'c', cblist); - for (Enum en : vecRes6) { - cout << "Enum value: " << en << endl; - }*/ - //vector vecRes7 = tcStub->handleAllTwo(vecEn, vecStr, vecStr, vecEn, 'c', cblist, cblist); - /*vector vecRes7 = tcStub->handleAllTwo(vecEn, vecEn, vecStr, vecStr, 'c', cblist, cblist); - for (Enum en : vecRes7) { - cout << "Enum value: " << en << endl; - } - vector vecRes8 = tcStub->handleEnumTwo(vecEn, vecEn); - for (Enum en : vecRes8) { - cout << "Enum value: " << en << endl; - } - vector vecRes9 = tcStub->handleEnumThree(vecEn, vecEn, vecStr, vecStr); - for (Enum en : vecRes9) { - cout << "Enum value: " << en << endl; - } - vector vecRetStr2 = tcStub->handleStructTwo(vecStr, vecStr); - for (Struct st : vecRetStr2) { - cout << "Name: " << st.name << endl; - cout << "Value: " << st.value << endl; - cout << "Year: " << st.year << endl; - } - vector vecRetStr3 = tcStub->handleStructThree(vecStr, vecStr, vecStr); - for (Struct st : vecRetStr3) { - cout << "Name: " << st.name << endl; - cout << "Value: " << st.value << endl; - cout << "Year: " << st.year << endl; - }*/ - - return 0; -} diff --git a/iotjava/iotrmi/C++/basics/TestClassCallbacks_Stub.cpp b/iotjava/iotrmi/C++/basics/TestClassCallbacks_Stub.cpp deleted file mode 100644 index 4003d89..0000000 --- a/iotjava/iotrmi/C++/basics/TestClassCallbacks_Stub.cpp +++ /dev/null @@ -1,122 +0,0 @@ -#include -#include -#include "TestClassComplete_Stub.hpp" -#include "CallBack.hpp" - -#include "CallBackInterface_Skeleton.cpp" - -using namespace std; - - -TestClassComplete_Stub::TestClassComplete_Stub(int _port, const char* _skeletonAddress, string _callbackAddress, int _rev, bool* _bResult, vector _ports) { - callbackAddress = _callbackAddress; - ports = _ports; - rmiCall = new IoTRMICall(_port, _skeletonAddress, _rev, _bResult); - set0Allowed.insert(-9998); - //thread th1 (&TestClassComplete_Stub::___initCallBack, this); - //th1.detach(); - ___regCB(); -} - -TestClassComplete_Stub::TestClassComplete_Stub(IoTRMICall* _rmiCall, string _callbackAddress, int _objIdCnt, vector _ports) { - callbackAddress = _callbackAddress; - rmiCall = _rmiCall; - objIdCnt = _objIdCnt; - set0Allowed.insert(-9998); - //thread th1 (&TestClassComplete_Stub::___initCallBack, this); - //th1.detach(); - ___regCB(); -} - -TestClassComplete_Stub::~TestClassComplete_Stub() { - if (rmiCall != NULL) { - delete rmiCall; - rmiCall = NULL; - } - if (rmiObj != NULL) { - delete rmiObj; - rmiObj = NULL; - } - for(CallBackInterface* cb : vecCallbackObj) { - delete cb; - cb = NULL; - } -} - -void TestClassComplete_Stub::registerCallback(CallBackInterface* _cb) { - //CallBackInterface_CallbackSkeleton* skel0 = new CallBackInterface_CallbackSkeleton(_cb, callbackAddress, objIdCnt++); - CallBackInterface_Skeleton* skel0 = new CallBackInterface_Skeleton(_cb, callbackAddress, objIdCnt++); - vecCallbackObj.push_back(skel0); - int ___paramCB0 = 1; - int methodId = 1; - string retType = "void"; - int numParam = 1; - string paramCls[] = { "int" }; - void* paramObj[] = { &___paramCB0 }; - void* retObj = NULL; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); -} - -void TestClassComplete_Stub::___regCB() { - int numParam = 3; - int methodId = -9999; - string retType = "void"; - string paramCls[] = { "int*", "String", "int" }; - int rev = 0; - void* paramObj[] = { &ports, &callbackAddress, &rev }; - void* retObj = NULL; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); -} - -short TestClassComplete_Stub::getShort(short in) { - int methodId = 0; - string retType = "short"; - int numParam = 1; - string paramCls[] = { "short" }; - void* paramObj[] = { &in }; - short retVal = 0; - void* retObj = &retVal; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); - return retVal; -} - -int TestClassComplete_Stub::callBack() { - int methodId = 2; - string retType = "int"; - int numParam = 0; - string paramCls[] = { }; - void* paramObj[] = { }; - int retVal = 0; - void* retObj = &retVal; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); - return retVal; -} - - -int main(int argc, char *argv[]) -{ - - int port = 5010; - const char* address = "localhost"; - //const char* address = "192.168.2.191"; // RPi2 - //const char* skeletonAddress = "128.195.136.170"; // dc-9.calit2.uci.edu - const char* skeletonAddress = "128.195.204.132"; - const char* callbackAddress = "128.195.204.132"; // dw-2.eecs.uci.edu (this machine) - //const char* skeletonAddress = "192.168.2.108"; // RPi1 - //const char* callbackAddress = "192.168.2.191"; // RPi2 - int rev = 0; - bool bResult = false; - vector ports; - ports.push_back(12345); - ports.push_back(22346); - //ports.push_back(32344); - //ports.push_back(43212); - - TestClassComplete *tcStub = new TestClassComplete_Stub(port, skeletonAddress, callbackAddress, rev, &bResult, ports); - cout << "==== CALLBACK ====" << endl; - CallBackInterface *cbSingle = new CallBack(2354); - tcStub->registerCallback(cbSingle); - cout << "Return value from callback: " << tcStub->callBack() << endl; - - return 0; -} diff --git a/iotjava/iotrmi/C++/basics/TestClassComplete_Stub.cpp b/iotjava/iotrmi/C++/basics/TestClassComplete_Stub.cpp deleted file mode 100644 index d8f7b58..0000000 --- a/iotjava/iotrmi/C++/basics/TestClassComplete_Stub.cpp +++ /dev/null @@ -1,162 +0,0 @@ -#include -#include -#include "TestClassComplete_Stub.hpp" -#include "CallBack.hpp" - -#include "CallBackInterface_Skeleton.cpp" - -using namespace std; - - -TestClassComplete_Stub::TestClassComplete_Stub(int _portSend, int _portRecv, const char* _skeletonAddress, int _rev, bool* _bResult) { - rmiComm = new IoTRMICommClient(_portSend, _portRecv, _skeletonAddress, _rev, _bResult); - rmiComm->registerStub(objectId, 0, &retValueReceived0); - rmiComm->registerStub(objectId, 2, &retValueReceived2); - IoTRMIUtil::mapStub->insert(make_pair(objectId, this)); -} - -TestClassComplete_Stub::TestClassComplete_Stub(IoTRMIComm* _rmiComm, int _objectId) { - rmiComm = _rmiComm; - objectId = _objectId; - rmiComm->registerStub(objectId, 0, &retValueReceived0); - rmiComm->registerStub(objectId, 2, &retValueReceived2); -} - -TestClassComplete_Stub::~TestClassComplete_Stub() { - if (rmiComm != NULL) { - delete rmiComm; - rmiComm = NULL; - } - for(CallBackInterface* cb : vecCallbackObj) { - delete cb; - cb = NULL; - } -} - -mutex mtxMethodExec1; // TODO: We probably need to correlate this always with class name, e.g. methodExecCallBackInterfaceWithCallBack -void TestClassComplete_Stub::registerCallback(CallBackInterface* _cb) { - lock_guard guard(mtxMethodExec1); - int objIdSent = 0; - auto it = IoTRMIUtil::mapSkel->find(_cb); - if (it == IoTRMIUtil::mapSkel->end()) { // Not in the map, so new object - objIdSent = rmiComm->getObjectIdCounter(); - rmiComm->decrementObjectIdCounter(); - CallBackInterface_Skeleton* skel0 = new CallBackInterface_Skeleton(_cb, rmiComm, objIdSent); - vecCallbackObj.push_back(skel0); - IoTRMIUtil::mapSkel->insert(make_pair(_cb, skel0)); - IoTRMIUtil::mapSkelId->insert(make_pair(_cb, objIdSent)); - cout << "Create new skeleton for TestClass! ID=" << objIdSent << endl; - thread th0 (&CallBackInterface_Skeleton::___waitRequestInvokeMethod, std::ref(skel0), std::ref(skel0)); - th0.detach(); - while(!skel0->didInitWaitInvoke()); - } else { - auto itId = IoTRMIUtil::mapSkelId->find(_cb); - objIdSent = itId->second; - cout << "Skeleton exists for TestClass! ID=" << objIdSent << endl; - } - - int ___paramCB0 = objIdSent; - int methodId = 1; - string retType = "void"; - int numParam = 1; - string paramCls[] = { "int" }; - void* paramObj[] = { &___paramCB0 }; - void* retObj = NULL; - rmiComm->remoteCall(objectId, methodId, paramCls, paramObj, numParam); -} - -mutex mtxMethodExec0; // TODO: We probably need to correlate this always with class name, e.g. methodExecCallBackInterfaceWithCallBack -short TestClassComplete_Stub::getShort(short in) { - lock_guard guard(mtxMethodExec0); - cout << "getShort() is called!!!" << endl << endl; - int methodId = 0; - string retType = "short"; - int numParam = 1; - string paramCls[] = { "short" }; - void* paramObj[] = { &in }; - short retVal = 0; - void* retObj = &retVal; - cout << "Calling remote call!" << endl; - rmiComm->remoteCall(objectId, methodId, paramCls, paramObj, numParam); - cout << "Finished calling remote call!" << endl; - // Waiting for return value - while(!retValueReceived0); - rmiComm->getReturnValue(retType, retObj); - //retValueReceived0.exchange(false); - retValueReceived0 = false; - didGetReturnBytes.exchange(true); - cout << "Getting return value for getShort(): " << retVal << endl; - - return retVal; -} - -mutex mtxMethodExec2; // TODO: We probably need to correlate this always with class name, e.g. methodExecCallBackInterfaceWithCallBack -int TestClassComplete_Stub::callBack() { - lock_guard guard(mtxMethodExec2); - int methodId = 2; - string retType = "int"; - int numParam = 0; - string paramCls[] = { }; - void* paramObj[] = { }; - int retVal = 0; - void* retObj = &retVal; - rmiComm->remoteCall(objectId, methodId, paramCls, paramObj, numParam); - // Waiting for return value - while(!retValueReceived2); - rmiComm->getReturnValue(retType, retObj); - //retValueReceived2.exchange(false); - retValueReceived2 = false; - didGetReturnBytes.exchange(true); - - cout << "Getting return value for callback(): " << retVal << endl; - - return retVal; -} - - -int main(int argc, char *argv[]) -{ - - int portSend = 5000; - int portRecv = 6000; - const char* address = "localhost"; - //const char* address = "192.168.2.191"; // RPi2 - //const char* skeletonAddress = "128.195.136.163"; // dc-2.calit2.uci.edu - const char* skeletonAddress = "128.195.204.132"; - const char* callbackAddress = "128.195.204.132"; // dw-2.eecs.uci.edu (this machine) - //const char* skeletonAddress = "192.168.2.108"; // RPi1 - //const char* callbackAddress = "192.168.2.191"; // RPi2 - int rev = 0; - bool bResult = false; - //vector ports; - //ports.push_back(12345); - //ports.push_back(22346); - //ports.push_back(32344); - //ports.push_back(43212); - - TestClassComplete *tcStub = new TestClassComplete_Stub(portSend, portRecv, skeletonAddress, rev, &bResult); - vector in; - in.push_back(68); - in.push_back(68); - vector result = tcStub->getByteArray(in); - cout << "Test print: " << in[0] << endl; - - cout << "Getting return value from getShort(): " << tcStub->getShort(1234) << endl; -/* //cout << "Getting return value from getShort(): " << tcStub->getShort(4321) << endl; - //cout << "Getting return value from getShort(): " << tcStub->getShort(5678) << endl; - cout << "==== CALLBACK ====" << endl; - CallBackInterface *cbSingle = new CallBack(2354); - tcStub->registerCallback(cbSingle); - //tcStub->registerCallback(cbSingle); - CallBackInterface *cbSingle1 = new CallBack(2646); - tcStub->registerCallback(cbSingle1); - CallBackInterface *cbSingle2 = new CallBack(2000); - tcStub->registerCallback(cbSingle2); - cout << "Return value from callback: " << tcStub->callBack() << endl; - //cout << "Return value from callback: " << tcStub->callBack() << endl; - - // TODO: we need this while loop at the end to keep the threads running - while(true);*/ - - return 0; -} diff --git a/iotjava/iotrmi/C++/basics/TestClassInterface_Skeleton.cpp b/iotjava/iotrmi/C++/basics/TestClassInterface_Skeleton.cpp deleted file mode 100644 index b4f5c5b..0000000 --- a/iotjava/iotrmi/C++/basics/TestClassInterface_Skeleton.cpp +++ /dev/null @@ -1,182 +0,0 @@ -#include -#include -#include "TestClassInterface_Skeleton.hpp" -#include "TestClass.hpp" - -#include "CallBackInterfaceWithCallBack_Stub.cpp" - -using namespace std; - -TestClassInterface_Skeleton::TestClassInterface_Skeleton(TestClassInterface *_mainObj, int _portSend, int _portRecv) { - bool _bResult = false; - mainObj = _mainObj; - rmiComm = new IoTRMICommServer(_portSend, _portRecv, &_bResult); - IoTRMIUtil::mapSkel->insert(make_pair(_mainObj, this)); - IoTRMIUtil::mapSkelId->insert(make_pair(_mainObj, objectId)); - rmiComm->registerSkeleton(objectId, &methodReceived); - thread th1 (&TestClassInterface_Skeleton::___waitRequestInvokeMethod, this, this); -// th1.detach(); - th1.join(); -} - -TestClassInterface_Skeleton::TestClassInterface_Skeleton(TestClassInterface *_mainObj, IoTRMIComm *_rmiComm, int _objectId) { - bool _bResult = false; - mainObj = _mainObj; - rmiComm = _rmiComm; - objectId = _objectId; - rmiComm->registerSkeleton(objectId, &methodReceived); -} - -TestClassInterface_Skeleton::~TestClassInterface_Skeleton() { - if (rmiComm != NULL) { - delete rmiComm; - rmiComm = NULL; - } - for(CallBackInterfaceWithCallBack* cb : vecCallbackObj) { - delete cb; - cb = NULL; - } -} - -bool TestClassInterface_Skeleton::didInitWaitInvoke() { - - return didAlreadyInitWaitInvoke; -} - -short TestClassInterface_Skeleton::getShort(short in) { - return mainObj->getShort(in); -} - -void TestClassInterface_Skeleton::registerCallback(CallBackInterfaceWithCallBack* _cb) { - mainObj->registerCallback(_cb); -} - -int TestClassInterface_Skeleton::callBack() { - return mainObj->callBack(); -} - -void TestClassInterface_Skeleton::___getShort(TestClassInterface_Skeleton* skel) { - char* localMethodBytes = new char[methodLen]; - memcpy(localMethodBytes, skel->methodBytes, methodLen); - //cout << "Bytes inside getShort: " << endl; - //IoTRMIUtil::printBytes(localMethodBytes, methodLen, false); - didGetMethodBytes.exchange(true); - string paramCls[] = { "short" }; - int numParam = 1; - short in; - void* paramObj[] = { &in }; - skel->rmiComm->getMethodParams(paramCls, numParam, paramObj, localMethodBytes); - short retVal = getShort(in); - cout << "Getting return value getShort(): " << retVal << endl; - void* retObj = &retVal; - skel->rmiComm->sendReturnObj(retObj, "short", localMethodBytes); - cout << "Sent return value for getShort()" << endl; - delete[] localMethodBytes; -} - -void TestClassInterface_Skeleton::___registerCallback(TestClassInterface_Skeleton* skel) { - char* localMethodBytes = new char[methodLen]; - memcpy(localMethodBytes, skel->methodBytes, methodLen); - didGetMethodBytes.exchange(true); - string paramCls[] = { "int" }; - int numParam = 1; - int numStubs0 = 0; - void* paramObj[] = { &numStubs0 }; - skel->rmiComm->getMethodParams(paramCls, numParam, paramObj, localMethodBytes); - // Choosing the right stub - int objIdRecv = numStubs0; - CallBackInterfaceWithCallBack* stub0 = NULL; - auto it = IoTRMIUtil::mapStub->find(objIdRecv); - if (it == IoTRMIUtil::mapStub->end()) { // Not in the map, so new object - stub0 = new CallBackInterfaceWithCallBack_Stub(rmiComm, objIdRecv); - IoTRMIUtil::mapStub->insert(make_pair(objIdRecv, stub0)); - cout << "Create new stub for Callback! ID=" << objIdRecv << endl; - rmiComm->setObjectIdCounter(objIdRecv); - rmiComm->decrementObjectIdCounter(); - } else { - stub0 = (CallBackInterfaceWithCallBack_Stub*) it->second; - cout << "Stub exists for Callback! ID=" << objIdRecv << endl; - } - skel->vecCallbackObj.push_back(stub0); - skel->registerCallback(stub0); - delete[] localMethodBytes; -} - -void TestClassInterface_Skeleton::___callBack(TestClassInterface_Skeleton* skel) { - char* localMethodBytes = new char[methodLen]; - memcpy(localMethodBytes, skel->methodBytes, methodLen); - didGetMethodBytes.exchange(true); - string paramCls[] = { }; - int numParam = 0; - void* paramObj[] = { }; - skel->rmiComm->getMethodParams(paramCls, numParam, paramObj, localMethodBytes); - int retVal = callBack(); - void* retObj = &retVal; - skel->rmiComm->sendReturnObj(retObj, "int", localMethodBytes); - delete[] localMethodBytes; -} - -void TestClassInterface_Skeleton::___waitRequestInvokeMethod(TestClassInterface_Skeleton* skel) { - cout << "Running loop!" << endl; - //didAlreadyInitWaitInvoke.exchange(true); - skel->didAlreadyInitWaitInvoke = true; - while (true) { - if (!methodReceived) - continue; - skel->methodBytes = skel->rmiComm->getMethodBytes(); - skel->methodLen = skel->rmiComm->getMethodLength(); - cout << endl; - // TODO: Get method length as well!!! - //methodReceived.exchange(false); - methodReceived = false; - int _objectId = skel->rmiComm->getObjectId(skel->methodBytes); - int methodId = skel->rmiComm->getMethodId(skel->methodBytes); - if (_objectId == objectId) { - if (skel->set0Allowed.find(methodId) == skel->set0Allowed.end()) { - cerr << "Object with object Id: " << _objectId << " is not allowed to access method: " << methodId << endl; - return; - } - } - else - continue; - switch (methodId) { - case 0: { thread th0 (&TestClassInterface_Skeleton::___getShort, std::ref(skel), skel); th0.detach(); break; } - //___getShort(skel); break; - case 1: { thread th1 (&TestClassInterface_Skeleton::___registerCallback, std::ref(skel), skel); th1.detach(); break; } - //___registerCallback(skel); break; - case 2: { thread th2 (&TestClassInterface_Skeleton::___callBack, std::ref(skel), skel); th2.detach(); break; } - //___callBack(skel); break; - default: - cerr << "Method Id " << methodId << " not recognized!" << endl; - return; - } - cout << "Out of switch statement!" << endl; - } -} - - - -int main(int argc, char *argv[]) -{ - // First argument is port number - /*int port = atoi(argv[1]); - int argv2 = atoi(argv[2]); - float argv3 = atof(argv[3]); - string argv4 = string(argv[4]); - - cout << port << endl; - cout << argv2 << endl; - cout << argv3 << endl; - cout << argv4 << endl;*/ - - int portSend = 5000; - int portRecv = 6000; - //TestClassInterface *tc = new TestClass(argv2, argv3, argv4); - TestClassInterface *tc = new TestClass(123, 2.345, "test"); - //TestClassInterface *tc = new TestClassProfiling(); - TestClassInterface_Skeleton *tcSkel = new TestClassInterface_Skeleton(tc, portSend, portRecv); - - //delete tc; - //delete tcSkel; - return 0; -} diff --git a/iotjava/iotrmi/C++/basics/TestClassProfiling.hpp b/iotjava/iotrmi/C++/basics/TestClassProfiling.hpp deleted file mode 100644 index b15f092..0000000 --- a/iotjava/iotrmi/C++/basics/TestClassProfiling.hpp +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef _TESTCLASS_HPP__ -#define _TESTCLASS_HPP__ - -#include -#include -#include -#include "TestClassInterface.hpp" -#include "CallBackInterfaceWithCallBack.hpp" -#include "Enum.hpp" -#include "Struct.hpp" - -using namespace std; - -class TestClassProfiling : public TestClassInterface { - public: - TestClassProfiling(); - - vector getByteArray(vector in); - -}; - - -TestClassProfiling::TestClassProfiling() { - -} - -// Arrays -vector TestClass::getByteArray(vector in) { - - return in; -} - - -#endif - diff --git a/iotjava/iotrmi/C++/basics/TestClass_Skeleton.cpp b/iotjava/iotrmi/C++/basics/TestClass_Skeleton.cpp deleted file mode 100644 index afb287e..0000000 --- a/iotjava/iotrmi/C++/basics/TestClass_Skeleton.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include -#include -#include "TestClassInterface_Skeleton.hpp" -#include "TestClass.hpp" - -using namespace std; - -int main(int argc, char *argv[]) -{ - TestClassInterface *tc; - TestClassInterface_Skeleton *tcSkel; - - int port = 5010; - //tc = new TestClass(3, 5.0, "7911"); - tc = new TestClassProfiling(); - string callbackAddress = "128.195.204.132"; - tcSkel = new TestClassInterface_Skeleton(tc, callbackAddress, port); - - delete tc; - delete tcSkel; - return 0; -} diff --git a/iotjava/iotrmi/C++/basics/TestClass_Stub.cpp b/iotjava/iotrmi/C++/basics/TestClass_Stub.cpp deleted file mode 100644 index a12c360..0000000 --- a/iotjava/iotrmi/C++/basics/TestClass_Stub.cpp +++ /dev/null @@ -1,167 +0,0 @@ -#include -#include -#include "TestClassComplete_Stub.hpp" -#include "CallBack.hpp" - -using namespace std; - -int main(int argc, char *argv[]) -{ - - int port = 5010; - const char* address = "localhost"; - //const char* address = "128.195.136.170"; // dc-9.calit2.uci.edu - int rev = 0; - bool bResult = false; - vector ports; - ports.push_back(12345); - - TestClassComplete *tcStub = new TestClassComplete_Stub(port, address, rev, &bResult, ports); - cout << "==== SINGLE ====" << endl; - cout << "Return value: " << tcStub->getByte(68) << endl; - cout << "Return value: " << tcStub->getShort(1234) << endl; - cout << "Return value: " << tcStub->getLong(12345678) << endl; - cout << "Return value: " << tcStub->getFloat(12.345) << endl; - cout << "Return value: " << tcStub->getDouble(12345.678) << endl; - cout << "Return value: " << tcStub->getBoolean(true) << endl; - cout << "Return value: " << tcStub->getChar('c') << endl; - cout << "==== ARRAY ====" << endl; - vector in1; - in1.push_back(68); - in1.push_back(69); - cout << "Return value: " << tcStub->getByteArray(in1)[0] << ", " << tcStub->getByteArray(in1)[1] << endl; - vector in2; - in2.push_back(1234); - in2.push_back(1235); - cout << "Return value: " << tcStub->getShortArray(in2)[0] << ", " << tcStub->getShortArray(in2)[1] << endl; - vector in3; - in3.push_back(12345678); - in3.push_back(12356782); - cout << "Return value: " << tcStub->getLongArray(in3)[0] << ", " << tcStub->getLongArray(in3)[1] << endl; - vector in4; - in4.push_back(12.345); - in4.push_back(12.346); - cout << "Return value: " << tcStub->getFloatArray(in4)[0] << ", " << tcStub->getFloatArray(in4)[1] << endl; - vector in5; - in5.push_back(12345.678); - in5.push_back(12345.543); - cout << "Return value: " << tcStub->getDoubleArray(in5)[0] << ", " << tcStub->getDoubleArray(in5)[1] << endl; - vector in6; - in6.push_back(true); - in6.push_back(false); - cout << "Return value: " << tcStub->getBooleanArray(in6)[0] << ", " << tcStub->getBooleanArray(in6)[1] << endl; - vector in7; - in7.push_back('c'); - in7.push_back('e'); - cout << "Return value: " << tcStub->getCharArray(in7)[0] << ", " << tcStub->getCharArray(in7)[1] << endl; - cout << "==== VECTOR/LIST ====" << endl; - vector inl1; - inl1.push_back(68); - inl1.push_back(69); - cout << "Return value: " << tcStub->getByteList(inl1)[0] << ", " << tcStub->getByteList(inl1)[1] << endl; - vector inl2; - inl2.push_back(1234); - inl2.push_back(1235); - cout << "Return value: " << tcStub->getShortList(inl2)[0] << ", " << tcStub->getShortList(inl2)[1] << endl; - vector inl3; - inl3.push_back(12345678); - inl3.push_back(12356782); - cout << "Return value: " << tcStub->getLongList(inl3)[0] << ", " << tcStub->getLongList(inl3)[1] << endl; - vector inl4; - inl4.push_back(12.345); - inl4.push_back(12.346); - cout << "Return value: " << tcStub->getFloatList(inl4)[0] << ", " << tcStub->getFloatList(inl4)[1] << endl; - vector inl5; - inl5.push_back(12345.678); - inl5.push_back(12345.543); - cout << "Return value: " << tcStub->getDoubleList(inl5)[0] << ", " << tcStub->getDoubleList(inl5)[1] << endl; - vector inl6; - inl6.push_back(true); - inl6.push_back(false); - cout << "Return value: " << tcStub->getBooleanList(inl6)[0] << ", " << tcStub->getBooleanList(inl6)[1] << endl; - vector inl7; - inl7.push_back('c'); - inl7.push_back('e'); - cout << "Return value: " << tcStub->getCharList(inl7)[0] << ", " << tcStub->getCharList(inl7)[1] << endl; - cout << "==== ENUM ====" << endl; - Enum en; - en = APPLE; - Enum res = tcStub->handleEnum(en); - cout << "Return value: " << res << endl; - vector vecEn; - vecEn.push_back(APPLE); - vecEn.push_back(ORANGE); - vecEn.push_back(APPLE); - vecEn.push_back(GRAPE); - vector vecRes = tcStub->handleEnumArray(vecEn); - for (Enum en : vecRes) { - cout << "Enum value: " << en << endl; - } - vector vecRes2 = tcStub->handleEnumList(vecEn); - for (Enum en : vecRes2) { - cout << "Enum value: " << en << endl; - } - cout << "==== STRUCT ====" << endl; - Struct str; - str.name = "Rahmadi"; - str.value = 0.123; - str.year = 2016; - Struct resStr = tcStub->handleStruct(str); - cout << "Name: " << resStr.name << endl; - cout << "Value:" << resStr.value << endl; - cout << "Year" << resStr.year << endl; - Struct str2; - str2.name = "Trimananda"; - str2.value = 0.124; - str2.year = 2017; - vector vecStr; - vecStr.push_back(str); - vecStr.push_back(str2); - vector vecRetStr = tcStub->handleStructArray(vecStr); - for (Struct st : vecRetStr) { - cout << "Name: " << st.name << endl; - cout << "Value:" << st.value << endl; - cout << "Year" << st.year << endl; - } - vector vecRetStr2 = tcStub->handleStructList(vecStr); - for (Struct st : vecRetStr2) { - cout << "Name: " << st.name << endl; - cout << "Value:" << st.value << endl; - cout << "Year" << st.year << endl; - } - cout << "==== CALLBACK ====" << endl; - CallBackInterface *cbSingle = new CallBack(2354); - tcStub->registerCallback(cbSingle); - cout << "Return value from callback: " << tcStub->callBack() << endl; - CallBackInterface *cb1 = new CallBack(23); - CallBackInterface *cb2 = new CallBack(33); - CallBackInterface *cb3 = new CallBack(43); - vector cb; - cb.push_back(cb1); - cb.push_back(cb2); - cb.push_back(cb3); - tcStub->registerCallbackArray(cb); - cout << "Return value from callback: " << tcStub->callBack() << endl; - CallBackInterface *cb4 = new CallBack(53); - CallBackInterface *cb5 = new CallBack(63); - CallBackInterface *cb6 = new CallBack(73); - vector cblist; - cblist.push_back(cb4); - cblist.push_back(cb5); - cblist.push_back(cb6); - tcStub->registerCallbackList(cblist); - cout << "Return value from callback: " << tcStub->callBack() << endl; - - cout << "==== OTHERS ====" << endl; - cout << "Return value: " << tcStub->getA() << endl; - cout << "Return value: " << tcStub->setAndGetA(123) << endl; - cout << "Return value: " << tcStub->setACAndGetA("string", 123) << endl; - vector input; - input.push_back("123"); - input.push_back("456"); - input.push_back("987"); - - cout << "Return value: " << tcStub->sumArray(input) << endl; - - return 0; -} diff --git a/iotjava/iotrmi/C++/sample/CallBack.hpp b/iotjava/iotrmi/C++/sample/CallBack.hpp deleted file mode 100644 index 7774d76..0000000 --- a/iotjava/iotrmi/C++/sample/CallBack.hpp +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef _CALLBACK_HPP__ -#define _CALLBACK_HPP__ - -#include -#include "CallBackInterface.hpp" - -using namespace std; - -class CallBack : public CallBackInterface { - public: - //CallBack(); - CallBack(int _i); - //~CallBack(); - - int printInt(); - void setInt(int _i); - - private: - int intA; -}; - - -// Constructor -CallBack::CallBack(int _i) { - - intA = _i; -} - - -int CallBack::printInt() { - - cout << "Integer: " << intA << endl; - return intA; -} - - -void CallBack::setInt(int _i) { - - intA = _i; -} - -#endif - diff --git a/iotjava/iotrmi/C++/sample/CallBackInterface.hpp b/iotjava/iotrmi/C++/sample/CallBackInterface.hpp deleted file mode 100644 index 7364f8d..0000000 --- a/iotjava/iotrmi/C++/sample/CallBackInterface.hpp +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef _CALLBACKINTERFACE_HPP__ -#define _CALLBACKINTERFACE_HPP__ - -#include - -using namespace std; - -class CallBackInterface { - public: - virtual int printInt() = 0; - virtual void setInt(int _i) = 0; -}; - -#endif - diff --git a/iotjava/iotrmi/C++/sample/CallBack_CBSkeleton.hpp b/iotjava/iotrmi/C++/sample/CallBack_CBSkeleton.hpp deleted file mode 100644 index bc67c92..0000000 --- a/iotjava/iotrmi/C++/sample/CallBack_CBSkeleton.hpp +++ /dev/null @@ -1,92 +0,0 @@ -#ifndef _CALLBACK_CBSKELETON_HPP__ -#define _CALLBACK_CBSKELETON_HPP__ - -#include -#include "CallBackInterface.hpp" -#include "../IoTRMIObject.hpp" - - -using namespace std; - -class CallBack_CBSkeleton : public CallBackInterface { - public: - CallBack_CBSkeleton(CallBackInterface* _cb, int _objectId); - ~CallBack_CBSkeleton(); - - void invokeMethod(IoTRMIObject* rmiObj); - int printInt(); - void setInt(int _i); - - void ___printInt(IoTRMIObject* rmiObj); - void ___setInt(IoTRMIObject* rmiObj); - - private: - CallBackInterface *cb; - int objectId = 0; -}; - - -// Constructor -CallBack_CBSkeleton::CallBack_CBSkeleton(CallBackInterface* _cb, int _objectId) { - - cb = _cb; - objectId = _objectId; -} - - -CallBack_CBSkeleton::~CallBack_CBSkeleton() { - -} - - -int CallBack_CBSkeleton::printInt() { - - return cb->printInt(); -} - - -void CallBack_CBSkeleton::___printInt(IoTRMIObject* rmiObj) { - - string paramCls[] = { }; - int numParam = 0; - void* paramObj[] = { }; - rmiObj->getMethodParams(paramCls, numParam, paramObj); - int retVal = printInt(); - void* retObj = &retVal; - rmiObj->sendReturnObj(retObj, "int"); -} - - -void CallBack_CBSkeleton::setInt(int _i) { - - cb->setInt(_i); -} - - -void CallBack_CBSkeleton::___setInt(IoTRMIObject* rmiObj) { - - string paramCls[] = { "int" }; - int numParam = 1; - int param1 = 1; - void* paramObj[] = { ¶m1 }; - rmiObj->getMethodParams(paramCls, numParam, paramObj); - setInt(param1); -} - - -void CallBack_CBSkeleton::invokeMethod(IoTRMIObject* rmiObj) { - - int methodId = rmiObj->getMethodId(); - - switch (methodId) { - case 0 : ___printInt(rmiObj); break; - case 1 : ___setInt(rmiObj); break; - default: - string error = "Method Id not recognized!"; - throw error; - } -} - - -#endif - diff --git a/iotjava/iotrmi/C++/sample/CallBack_CBStub.hpp b/iotjava/iotrmi/C++/sample/CallBack_CBStub.hpp deleted file mode 100644 index b674efa..0000000 --- a/iotjava/iotrmi/C++/sample/CallBack_CBStub.hpp +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef _CALLBACK_CBSTUB_HPP__ -#define _CALLBACK_CBSTUB_HPP__ - -#include -#include "CallBackInterface.hpp" -#include "../IoTRMICall.hpp" - -using namespace std; - -class CallBack_CBStub : public CallBackInterface { - public: - CallBack_CBStub(); - CallBack_CBStub(IoTRMICall* _rmiCall, int _objectId); - ~CallBack_CBStub(); - - int printInt(); - void setInt(int _i); - - private: - - IoTRMICall *rmiCall; - int objectId = 0; // Default value is 0 -}; - - -// Constructor -CallBack_CBStub::CallBack_CBStub() { - - rmiCall = NULL; -} - - -CallBack_CBStub::CallBack_CBStub(IoTRMICall* _rmiCall, int _objectId) { - - objectId = _objectId; - rmiCall = _rmiCall; -} - - -CallBack_CBStub::~CallBack_CBStub() { - - if (rmiCall != NULL) { - delete rmiCall; - rmiCall = NULL; - } -} - - -int CallBack_CBStub::printInt() { - - cout << "Got here in printInt()" << endl; - int numParam = 0; - int methodId = 0; - string retType = "int"; - string paramCls[] = { }; - void* paramObj[] = { }; - int retVal = 0; - void* retObj = &retVal; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); - return retVal; -} - - -void CallBack_CBStub::setInt(int _i) { - - int numParam = 1; - int methodId = 1; - string retType = "void"; - string paramCls[] = { "int" }; - void* paramObj[] = { &_i }; - void* retObj = NULL; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); -} - -#endif - diff --git a/iotjava/iotrmi/C++/sample/CallBack_Skeleton.cpp b/iotjava/iotrmi/C++/sample/CallBack_Skeleton.cpp deleted file mode 100644 index 0d8ea86..0000000 --- a/iotjava/iotrmi/C++/sample/CallBack_Skeleton.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include -#include "CallBack_Skeleton.hpp" - -using namespace std; - -int main(int argc, char *argv[]) -{ - - int port = 5010; - CallBackInterface *cb = new CallBack(23); - CallBack_Skeleton *cbSkel = new CallBack_Skeleton(cb, port); - //cbSkel->waitRequestInvokeMethod(); - - delete cb; - delete cbSkel; - return 0; -} diff --git a/iotjava/iotrmi/C++/sample/CallBack_Skeleton.hpp b/iotjava/iotrmi/C++/sample/CallBack_Skeleton.hpp deleted file mode 100644 index bde7e42..0000000 --- a/iotjava/iotrmi/C++/sample/CallBack_Skeleton.hpp +++ /dev/null @@ -1,102 +0,0 @@ -#ifndef _CALLBACK_SKELETON_HPP__ -#define _CALLBACK_SKELETON_HPP__ - -#include -#include "../IoTRMIObject.hpp" -#include "CallBack.hpp" - -using namespace std; - -class CallBack_Skeleton : public CallBackInterface { - public: - CallBack_Skeleton(CallBackInterface* _cb, int _port); - ~CallBack_Skeleton(); - - void ___waitRequestInvokeMethod(); - int printInt(); - void setInt(int _i); - - void ___printInt(); - void ___setInt(); - - private: - CallBackInterface *cb; - IoTRMIObject *rmiObj; -}; - - -// Constructor -CallBack_Skeleton::CallBack_Skeleton(CallBackInterface* _cb, int _port) { - - bool _bResult = false; - cb = _cb; - rmiObj = new IoTRMIObject(_port, &_bResult); - ___waitRequestInvokeMethod(); -} - - -CallBack_Skeleton::~CallBack_Skeleton() { - - if (rmiObj != NULL) { - delete rmiObj; - rmiObj = NULL; - } -} - - -int CallBack_Skeleton::printInt() { - - return cb->printInt(); -} - - -void CallBack_Skeleton::___printInt() { - - string paramCls[] = { }; - int numParam = 0; - void* paramObj[] = { }; - rmiObj->getMethodParams(paramCls, numParam, paramObj); - int retVal = printInt(); - void* retObj = &retVal; - rmiObj->sendReturnObj(retObj, "int"); -} - - -void CallBack_Skeleton::setInt(int _i) { - - cb->setInt(_i); -} - - -void CallBack_Skeleton::___setInt() { - - string paramCls[] = { "int" }; - int numParam = 1; - int param1 = 1; - void* paramObj[] = { ¶m1 }; - rmiObj->getMethodParams(paramCls, numParam, paramObj); - setInt(param1); -} - - -void CallBack_Skeleton::___waitRequestInvokeMethod() { - - // Loop continuously waiting for incoming bytes - while (true) { - - rmiObj->getMethodBytes(); - int methodId = rmiObj->getMethodId(); - - switch (methodId) { - case 0 : ___printInt(); break; - case 1 : ___setInt(); break; - default: - string error = "Method Id not recognized!"; - throw error; - } - } -} - - -#endif - diff --git a/iotjava/iotrmi/C++/sample/CallBack_Stub.cpp b/iotjava/iotrmi/C++/sample/CallBack_Stub.cpp deleted file mode 100644 index 04fd684..0000000 --- a/iotjava/iotrmi/C++/sample/CallBack_Stub.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include -#include -#include "CallBack_Stub.hpp" - -using namespace std; - -int main(int argc, char *argv[]) -{ - - int port = 5010; - const char* address = "localhost"; - int rev = 0; - bool bResult = false; - - CallBackInterface *cbStub = new CallBack_Stub(port, address, rev, &bResult); - cout << "Return value: " << cbStub->printInt() << endl; - cbStub->setInt(123); - cout << "Return value: " << cbStub->printInt() << endl; - - delete cbStub; - - return 0; -} diff --git a/iotjava/iotrmi/C++/sample/CallBack_Stub.hpp b/iotjava/iotrmi/C++/sample/CallBack_Stub.hpp deleted file mode 100644 index e7db446..0000000 --- a/iotjava/iotrmi/C++/sample/CallBack_Stub.hpp +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef _CALLBACK_STUB_HPP__ -#define _CALLBACK_STUB_HPP__ - -#include -#include "CallBackInterface.hpp" -#include "../IoTRMICall.hpp" - -using namespace std; - -class CallBack_Stub : public CallBackInterface { - public: - CallBack_Stub(); - CallBack_Stub(int _port, const char* _address, int _rev, bool* _bResult); - ~CallBack_Stub(); - - int printInt(); - void setInt(int _i); - - private: - - IoTRMICall *rmiCall; - string address; - int objectId = 0; // Default value is 0 -}; - - -// Constructor -CallBack_Stub::CallBack_Stub() { - - address = ""; - rmiCall = NULL; -} - - -CallBack_Stub::CallBack_Stub(int _port, const char* _address, int _rev, bool* _bResult) { - - address = _address; - rmiCall = new IoTRMICall(_port, _address, _rev, _bResult); -} - - -CallBack_Stub::~CallBack_Stub() { - - if (rmiCall != NULL) { - delete rmiCall; - rmiCall = NULL; - } -} - - -int CallBack_Stub::printInt() { - - int numParam = 0; - int methodId = 0; - string retType = "int"; - string paramCls[] = { }; - void* paramObj[] = { }; - int retVal = 0; - void* retObj = &retVal; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); - return retVal; -} - - -void CallBack_Stub::setInt(int _i) { - - int numParam = 1; - int methodId = 1; - string retType = "void"; - string paramCls[] = { "int" }; - void* paramObj[] = { &_i }; - void* retObj = NULL; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); -} - -#endif diff --git a/iotjava/iotrmi/C++/sample/EnumC.cpp b/iotjava/iotrmi/C++/sample/EnumC.cpp deleted file mode 100644 index 089a145..0000000 --- a/iotjava/iotrmi/C++/sample/EnumC.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include -#include "EnumC.hpp" - -int main(int argc, char *argv[]) { - - // Enum to integer - EnumC en = APPLE; - int enum1 = (int) en; - cout << "Enum 1: " << enum1 << endl; - EnumC en2 = ORANGE; - int enum2 = (int) en2; - cout << "Enum 2: " << enum2 << endl; - EnumC en3 = GRAPE; - int enum3 = (int) en3; - cout << "Enum 3: " << enum3 << endl; - - // Integer to enum - cout << "Enum 1: " << (EnumC) enum1 << endl; - cout << "Enum 2: " << (EnumC) enum2 << endl; - cout << "Enum 3: " << (EnumC) enum3 << endl; - - return 0; -} diff --git a/iotjava/iotrmi/C++/sample/EnumC.hpp b/iotjava/iotrmi/C++/sample/EnumC.hpp deleted file mode 100644 index 055f28b..0000000 --- a/iotjava/iotrmi/C++/sample/EnumC.hpp +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef _ENUMC_HPP__ -#define _ENUMC_HPP__ - -using namespace std; - -enum EnumC { - APPLE, - ORANGE, - GRAPE -} enumC; - -/*enum EnumD { - APPLE, - ORANGE, - GRAPE -};*/ - -#endif - diff --git a/iotjava/iotrmi/C++/sample/StructC.cpp b/iotjava/iotrmi/C++/sample/StructC.cpp deleted file mode 100644 index 060d255..0000000 --- a/iotjava/iotrmi/C++/sample/StructC.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include -#include "StructC.hpp" - -int main(int argc, char *argv[]) { - - data testdata; - testdata.name = "Rahmadi"; - testdata.value = 0.123; - testdata.year = 2016; - - /*cout << "Name: " << testdata.name << endl; - cout << "Value: " << testdata.value << endl; - cout << "Year: " << testdata.year << endl;*/ - - vector dataset; - data testdata2; - testdata2.name = "Trimananda"; - testdata2.value = 0.223; - testdata2.year = 2017; - - dataset.push_back(testdata); - dataset.push_back(testdata2); - - for (data dat : dataset) { - - cout << "Name: " << dat.name << endl; - cout << "Value: " << dat.value << endl; - cout << "Year: " << dat.year << endl; - } - - return 0; -} diff --git a/iotjava/iotrmi/C++/sample/StructC.hpp b/iotjava/iotrmi/C++/sample/StructC.hpp deleted file mode 100644 index b762f5e..0000000 --- a/iotjava/iotrmi/C++/sample/StructC.hpp +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef _STRUCTC_HPP__ -#define _STRUCTC_HPP__ - -using namespace std; - -struct data { - string name; - float value; - int year; -}; - -#endif - diff --git a/iotjava/iotrmi/C++/sample/Test.cpp b/iotjava/iotrmi/C++/sample/Test.cpp deleted file mode 100644 index 8d1771e..0000000 --- a/iotjava/iotrmi/C++/sample/Test.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include -#include -#include -#include -#include - -std::map g_pages; -std::mutex g_pages_mutex; - -void save_page(const std::string &url) -{ - // simulate a long page fetch - std::this_thread::sleep_for(std::chrono::seconds(2)); - std::string result = "fake content"; - - std::lock_guard guard(g_pages_mutex); - g_pages[url] = result; -} - -int main() -{ - std::thread t1(save_page, "http://foo"); - std::thread t2(save_page, "http://bar"); - t1.join(); - t2.join(); - - // safe to access g_pages without lock now, as the threads are joined - for (const auto &pair : g_pages) { - std::cout << pair.first << " => " << pair.second << '\n'; - } -} \ No newline at end of file diff --git a/iotjava/iotrmi/C++/sample/Test2.cpp b/iotjava/iotrmi/C++/sample/Test2.cpp deleted file mode 100644 index 3996381..0000000 --- a/iotjava/iotrmi/C++/sample/Test2.cpp +++ /dev/null @@ -1,25 +0,0 @@ -// mutex example -#include // std::cout -#include // std::thread -#include // std::mutex - -std::mutex mtx; // mutex for critical section - -void print_block (int n, char c) { - // critical section (exclusive access to std::cout signaled by locking mtx): - mtx.lock(); - for (int i=0; i -#include -#include "TestClass.hpp" -#include "CallBack.hpp" - -using namespace std; - -int main(int argc, char *argv[]) -{ - - TestClassInterface *tc = new TestClass(); - cout << "Return value: " << tc->setAndGetA(123) << endl; - cout << "Return value: " << tc->setACAndGetA("string", 123) << endl; - vector input; - input.push_back("123"); - input.push_back("456"); - input.push_back("987"); - /*vector input; - input.push_back(123); - input.push_back(456); - input.push_back(987);*/ - - cout << "Return value: " << tc->sumArray(input) << endl; - delete tc; - - vector test; - CallBackInterface *cb1 = new CallBack(12); - CallBackInterface *cb2 = new CallBack(22); - CallBackInterface *cb3 = new CallBack(32); - test.push_back(cb1); - test.push_back(cb2); - test.push_back(cb3); - for (CallBackInterface *cb : test) { - cout << "Test print: " << cb->printInt() << endl; - } - - delete cb1; - delete cb2; - delete cb3; - - return 0; -} diff --git a/iotjava/iotrmi/C++/sample/TestClass.hpp b/iotjava/iotrmi/C++/sample/TestClass.hpp deleted file mode 100644 index fe13e6e..0000000 --- a/iotjava/iotrmi/C++/sample/TestClass.hpp +++ /dev/null @@ -1,202 +0,0 @@ -#ifndef _TESTCLASS_HPP__ -#define _TESTCLASS_HPP__ - -#include -#include -#include -#include "TestClassInterface.hpp" -#include "StructC.hpp" - -using namespace std; - -class TestClass : public TestClassInterface { - public: - TestClass(); - TestClass(int _int, float _float, string _string); - //~TestClass(); - - void setA(int _int); - void setB(float _float); - void setC(string _string); - string sumArray(vector newA); - //int64_t sumArray(vector newA); - int setAndGetA(int newA); - int setACAndGetA(string newC, int newA); - void registerCallback(CallBackInterface* _cb); - void registerCallback(vector _cb); - int callBack(); - vector handleStruct(vector vecData); - vector handleEnum(vector vecEn); - - void thread1(); - void thread2(); - - private: - int intA; - float floatB; - string stringC; - CallBackInterface *cb; - vector cbvec; - -}; - - -TestClass::TestClass() { - - intA = 1; - floatB = 2; - stringC = "345"; - cb = NULL; - // cbvec doesn't need to be initialized again -} - - -TestClass::TestClass(int _int, float _float, string _string) { - - intA = _int; - floatB = _float; - stringC = _string; - cb = NULL; - // cbvec doesn't need to be initialized again -} - - -void TestClass::setA(int _int) { - - intA = _int; -} - - -void TestClass::setB(float _float) { - - floatB = _float; -} - - -void TestClass::setC(string _string) { - - stringC = _string; -} - - -string TestClass::sumArray(vector newA) { - - string sum = ""; - int len = newA.size(); - for(int c = 0; c < len; c++) { - sum = sum + newA[c]; - } - return sum; -} - - -/*int64_t TestClass::sumArray(vector newA) { - - int64_t sum = 0; - int len = newA.size(); - for(int c = 0; c < len; c++) { - sum = sum + newA[c]; - } - return sum; -}*/ - - -int TestClass::setAndGetA(int newA) { - - intA = newA; - return intA; -} - - -int TestClass::setACAndGetA(string newC, int newA) { - - stringC = newC; - intA = newA; - return intA; -} - - -void TestClass::registerCallback(CallBackInterface* _cb) { - - cb = _cb; -} - - -void TestClass::registerCallback(vector _cb) { - - for (CallBackInterface* cb : _cb) { - cbvec.push_back(cb); - cout << "Registering callback object!" << endl; - } -} - - -vector TestClass::handleStruct(vector vecData) { - - for (data dat : vecData) { - - cout << "Name: " << dat.name << endl; - cout << "Value: " << dat.value << endl; - cout << "Year: " << dat.year << endl; - } - data newData; - newData.name = "Anonymous"; - newData.value = 1.33; - newData.year = 2016; - vecData.push_back(newData); - - return vecData; -} - - -vector TestClass::handleEnum(vector vecEn) { - - for (EnumC en : vecEn) { - cout << "Enum: " << en << endl; - } - - return vecEn; -} - - -//int TestClass::callBack() { -// return cb.printInt(); -//} - -void TestClass::thread1() { - - CallBackInterface* cb = cbvec[0]; - for(int i = 0; i < 10; i++) { - cb->printInt(); - this_thread::sleep_for(chrono::seconds(1)); - } -} - -void TestClass::thread2() { - - CallBackInterface* cb = cbvec[1]; - for(int i = 0; i < 10; i++) { - cb->printInt(); - this_thread::sleep_for(chrono::seconds(1)); - } -} - -int TestClass::callBack() { - - int sum = 0; - for (CallBackInterface* cb : cbvec) { - sum = sum + cb->printInt(); - } - - return sum; -/* thread th1 (&TestClass::thread1, this); - thread th2 (&TestClass::thread2, this); - - th1.join(); - th2.join(); - - return 1;*/ -} - -#endif - diff --git a/iotjava/iotrmi/C++/sample/TestClassInterface.hpp b/iotjava/iotrmi/C++/sample/TestClassInterface.hpp deleted file mode 100644 index 0208bf3..0000000 --- a/iotjava/iotrmi/C++/sample/TestClassInterface.hpp +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef _TESTCLASSINTERFACE_HPP__ -#define _TESTCLASSINTERFACE_HPP__ - -#include -#include -#include "CallBackInterface.hpp" -#include "StructC.hpp" -#include "EnumC.hpp" - -using namespace std; - -class TestClassInterface { - public: - virtual void setA(int _int) = 0; - virtual void setB(float _float) = 0; - virtual void setC(string _string) = 0; - virtual string sumArray(vector newA) = 0; - //virtual int64_t sumArray(vector newA) = 0; - virtual int setAndGetA(int newA) = 0; - virtual int setACAndGetA(string newC, int newA) = 0; - virtual void registerCallback(CallBackInterface* _cb) = 0; - virtual void registerCallback(vector _cb) = 0; - virtual int callBack() = 0; - virtual vector handleStruct(vector vecData) = 0; - virtual vector handleEnum(vector vecEn) = 0; -}; - -#endif - diff --git a/iotjava/iotrmi/C++/sample/TestClass_Skeleton.cpp b/iotjava/iotrmi/C++/sample/TestClass_Skeleton.cpp deleted file mode 100644 index e16c727..0000000 --- a/iotjava/iotrmi/C++/sample/TestClass_Skeleton.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include -#include "TestClass_Skeleton.hpp" -#include "TestClass.hpp" - -using namespace std; - -int main(int argc, char *argv[]) -{ - TestClassInterface *tc; - TestClass_Skeleton *tcSkel; - try { - int port = 5010; - tc = new TestClass(3, 5.0, "7911"); - tcSkel = new TestClass_Skeleton(tc, port); - } catch(const exception&) { - return EXIT_FAILURE; - } - //tcSkel->waitRequestInvokeMethod(); - - delete tc; - delete tcSkel; - return 0; -} diff --git a/iotjava/iotrmi/C++/sample/TestClass_Skeleton.hpp b/iotjava/iotrmi/C++/sample/TestClass_Skeleton.hpp deleted file mode 100644 index 96b37b4..0000000 --- a/iotjava/iotrmi/C++/sample/TestClass_Skeleton.hpp +++ /dev/null @@ -1,452 +0,0 @@ -#ifndef _TESTCLASS_SKELETON_HPP__ -#define _TESTCLASS_SKELETON_HPP__ - -#include -#include -#include -#include "../IoTRMIObject.hpp" -#include "../IoTRMICall.hpp" -#include "CallBack_CBStub.hpp" -#include "TestClassInterface.hpp" - -using namespace std; - -class TestClass_Skeleton : public TestClassInterface { - public: - TestClass_Skeleton(TestClassInterface* _tc, int _port); - ~TestClass_Skeleton(); - - void ___waitRequestInvokeMethod(); - void setA(int _int); - void setB(float _float); - void setC(string _string); - string sumArray(vector newA); - //int64_t sumArray(vector newA); - int setAndGetA(int newA); - int setACAndGetA(string newC, int newA); - void registerCallback(CallBackInterface* _cb); - void registerCallback(vector _cb); - int callBack(); - vector handleStruct(vector vecData); - vector handleEnum(vector vecEn); - - void ___setA(); - void ___setB(); - void ___setC(); - void ___sumArray(); - //int64_t ____sumArray(); - void ___setAndGetA(); - void ___setACAndGetA(); - void ___registerCallback(); - void ____registerCallback(); - // For array of callbacks - void ___regCB(); - void ___callBack(); - // For array of structs - int ___structSize(); - void ___handleStruct(int structsize1); - int ___enumSize(); - void ___handleEnum(int enumsize1); - - private: - TestClassInterface *tc; - IoTRMIObject *rmiObj; - // Permission setup - const static int object0Id = 0; - //const static int object0Permission[]; - const static set set0Allowed; - - IoTRMICall *rmiCall; - static int objIdCnt; - vector vecCBObj; - //CallBackInterface cbstub; -}; - - -// Permission setup -//const int TestClass_Skeleton::object0Id = 0; -//const int TestClass_Skeleton::object0Permission[] = {0, 1, 2, 3, 4, 5}; -const set TestClass_Skeleton::set0Allowed {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; - -int TestClass_Skeleton::objIdCnt = 0; - - -TestClass_Skeleton::TestClass_Skeleton(TestClassInterface* _tc, int _port) { - - bool _bResult = false; - tc = _tc; - rmiObj = new IoTRMIObject(_port, &_bResult); - ___waitRequestInvokeMethod(); -} - - -TestClass_Skeleton::~TestClass_Skeleton() { - - if (rmiObj != NULL) { - delete rmiObj; - rmiObj = NULL; - } - if (rmiCall != NULL) { - delete rmiCall; - rmiCall = NULL; - } - for(CallBackInterface* cb : vecCBObj) { - delete cb; - cb = NULL; - } -} - - -void TestClass_Skeleton::setA(int _int) { - - tc->setA(_int); -} - - -void TestClass_Skeleton::___setA() { - - string paramCls[] = { "int" }; - int numParam = 1; - int param1 = 0; - void* paramObj[] = { ¶m1 }; - rmiObj->getMethodParams(paramCls, numParam, paramObj); - setA(param1); -} - - -void TestClass_Skeleton::setB(float _float) { - - tc->setB(_float); -} - - -void TestClass_Skeleton::___setB() { - - string paramCls[] = { "float" }; - int numParam = 1; - float param1 = 0.0; - void* paramObj[] = { ¶m1 }; - rmiObj->getMethodParams(paramCls, numParam, paramObj); - setB(param1); -} - - -void TestClass_Skeleton::setC(string _string) { - - tc->setC(_string); -} - - -void TestClass_Skeleton::___setC() { - - string paramCls[] = { "string" }; - int numParam = 1; - string param1 = ""; - void* paramObj[] = { ¶m1 }; - rmiObj->getMethodParams(paramCls, numParam, paramObj); - setC(param1); -} - - -string TestClass_Skeleton::sumArray(vector newA) { - - return tc->sumArray(newA); -} - - -void TestClass_Skeleton::___sumArray() { - - string paramCls[] = { "string[]" }; - int numParam = 1; - vector param1; - void* paramObj[] = { ¶m1 }; - rmiObj->getMethodParams(paramCls, numParam, paramObj); - string retVal = sumArray(param1); - void* retObj = &retVal; - rmiObj->sendReturnObj(retObj, "string"); -} - - -/*int64_t TestClass_Skeleton::sumArray(vector newA) { - - return tc->sumArray(newA); -}*/ - - -/*int64_t TestClass_Skeleton::____sumArray() { - -}*/ - - -int TestClass_Skeleton::setAndGetA(int newA) { - - return tc->setAndGetA(newA); -} - - -void TestClass_Skeleton::___setAndGetA() { - - string paramCls[] = { "int" }; - int numParam = 1; - int param1 = 0; - void* paramObj[] = { ¶m1 }; - rmiObj->getMethodParams(paramCls, numParam, paramObj); - int retVal = setAndGetA(param1); - void* retObj = &retVal; - rmiObj->sendReturnObj(retObj, "int"); -} - - -int TestClass_Skeleton::setACAndGetA(string newC, int newA) { - - return tc->setACAndGetA(newC, newA); -} - - -void TestClass_Skeleton::___setACAndGetA() { - - string paramCls[] = { "string", "int" }; - int numParam = 2; - string param1 = ""; - int param2 = 0; - void* paramObj[] = { ¶m1, ¶m2 }; - rmiObj->getMethodParams(paramCls, numParam, paramObj); - int retVal = setACAndGetA(param1, param2); - void* retObj = &retVal; - rmiObj->sendReturnObj(retObj, "int"); -} - - -void TestClass_Skeleton::registerCallback(CallBackInterface* _cb) { - - tc->registerCallback(_cb); -} - - -void TestClass_Skeleton::___registerCallback() { - -} - - -void TestClass_Skeleton::registerCallback(vector _cb) { - - tc->registerCallback(_cb); -} - - -void TestClass_Skeleton::___regCB() { - - string paramCls[] = { "int", "string", "int" }; - int numParam = 3; - int param1 = 0; - string param2 = ""; - int param3 = 0; - void* paramObj[] = { ¶m1, ¶m2, ¶m3 }; - rmiObj->getMethodParams(paramCls, numParam, paramObj); - // Instantiate IoTRMICall object - bool bResult = false; - cout << "Port: " << param1 << endl; - cout << "Address: " << param2 << endl; - - rmiCall = new IoTRMICall(param1, param2.c_str(), param3, &bResult); -} - - -void TestClass_Skeleton::____registerCallback() { - - string paramCls[] = { "int" }; - int numParam = 1; - int numStubs = 0; - void* paramObj[] = { &numStubs }; - rmiObj->getMethodParams(paramCls, numParam, paramObj); - vector stub; - for (int objId = 0; objId < numStubs; objId++) { - CallBackInterface* cb = new CallBack_CBStub(rmiCall, objIdCnt); - stub.push_back(cb); - vecCBObj.push_back(cb); - objIdCnt++; - } - registerCallback(stub); -} - - -int TestClass_Skeleton::callBack() { - - tc->callBack(); -} - - -void TestClass_Skeleton::___callBack() { - - int retVal = callBack(); - void* retObj = &retVal; - rmiObj->sendReturnObj(retObj, "int"); -} - - -vector TestClass_Skeleton::handleStruct(vector vecData) { - - return tc->handleStruct(vecData); -} - - -int TestClass_Skeleton::___structSize() { - - string paramCls[] = { "int" }; - int numParam = 1; - int param1 = 0; - void* paramObj[] = { ¶m1 }; - rmiObj->getMethodParams(paramCls, numParam, paramObj); - return param1; -} - - -void TestClass_Skeleton::___handleStruct(int structsize1) { - - string paramCls[3*structsize1]; - void* paramObj[3*structsize1]; - int numParam = 3*structsize1; - // define array of everything - string param1[structsize1]; - float param2[structsize1]; - int param3[structsize1]; - int pos = 0; - for(int i=0; i < structsize1; i++) { - paramCls[pos] = "string"; - paramObj[pos++] = ¶m1[i]; - paramCls[pos] = "float"; - paramObj[pos++] = ¶m2[i]; - paramCls[pos] = "int"; - paramObj[pos++] = ¶m3[i]; - } - rmiObj->getMethodParams(paramCls, numParam, paramObj); - vector dat(structsize1); - pos = 0; - for (int i=0; i < structsize1; i++) { - dat[i].name = param1[i]; - dat[i].value = param2[i]; - dat[i].year = param3[i]; - } - // This is a return value of type vector of struct - // If no return value, then just "handleStruct(dat)" - vector retData = handleStruct(dat); - // Send the length first! - int retLength = retData.size(); - void* retObj = &retLength; - rmiObj->sendReturnObj(retObj, "int"); - // Send the actual bytes - struct of 3 members - int numRetObj = 3*retLength; - string retCls[numRetObj]; - void* retObj2[numRetObj]; - pos = 0; - for(int i = 0; i < retLength; i++) { - retCls[pos] = "string"; - retObj2[pos] = &retData[i].name; pos++; - retCls[pos] = "float"; - retObj2[pos] = &retData[i].value; pos++; - retCls[pos] = "int"; - retObj2[pos] = &retData[i].year; pos++; - } - rmiObj->sendReturnObj(retObj2, retCls, numRetObj); -} - - -vector TestClass_Skeleton::handleEnum(vector vecEn) { - - return tc->handleEnum(vecEn); -} - - -int TestClass_Skeleton::___enumSize() { - - string paramCls[] = { "int" }; - int numParam = 1; - int param1 = 0; - void* paramObj[] = { ¶m1 }; - rmiObj->getMethodParams(paramCls, numParam, paramObj); - return param1; -} - - -void TestClass_Skeleton::___handleEnum() { - - int numParam = 1; - string paramCls[] = { "int[]" }; - vector paramInt; - void* paramObj[] = { ¶mInt }; - // Receive the array of integers - rmiObj->getMethodParams(paramCls, numParam, paramObj); - int enumSize1 = paramInt.size(); - vector en(enumSize1); - for (int i=0; i < enumSize1; i++) { - en[i] = (EnumC) paramInt[i]; - } - //handleEnum(en); - // if void, just "handleEnum(en)" - // this is when we have return value vector - vector retEnum = handleEnum(en); - // Get length first - int enumSize2 = retEnum.size(); - // Now send the array of integers - vector retEnumInt(enumSize2); - for (int i=0; i < enumSize2; i++) { - retEnumInt[i] = (int) retEnum[i]; - } - void* retObj = &retEnumInt; - rmiObj->sendReturnObj(retObj, "int[]"); -} - - -void TestClass_Skeleton::___waitRequestInvokeMethod() { - - int structsize1 = 0; - - // Loop continuously waiting for incoming bytes - while (true) { - - rmiObj->getMethodBytes(); - int _objectId = rmiObj->getObjectId(); - int methodId = rmiObj->getMethodId(); - if (_objectId == object0Id) { - // Multiplex based on object Id - // Complain if the method is not allowed - if (set0Allowed.find(methodId) == set0Allowed.end()) { - cerr << "TestClass_Skeleton: This object is not allowed to access method " << methodId << endl; - //exit(1); - throw exception(); - } - // If we have more than 1 object Id... - //else if (_objectId == object1Id) { - - } else { - cerr << "TestClass_Skeleton: Unrecognizable object Id: " << _objectId << endl; - throw exception(); - //exit(1); - } - - switch (methodId) { - case 0: ___setA(); break; - case 1: ___setB(); break; - case 2: ___setC(); break; - case 3: ___sumArray(); break; - /* case 3: ____sumArray(); break;*/ - case 4: ___setAndGetA(); break; - case 5: ___setACAndGetA(); break; - case 6: ___callBack(); break; - case 7: ___registerCallback(); break; - case 8: ____registerCallback(); break; - case 9: ___regCB(); break; - // Handle struct - case 10: ___handleStruct(structsize1); break; - case 11: structsize1 = ___structSize(); break; - case 12: ___handleEnum(); break; - default: - string error = "Method Id not recognized!"; - throw error; - } - } -} - - -#endif - diff --git a/iotjava/iotrmi/C++/sample/TestClass_Stub.cpp b/iotjava/iotrmi/C++/sample/TestClass_Stub.cpp deleted file mode 100644 index a4127d8..0000000 --- a/iotjava/iotrmi/C++/sample/TestClass_Stub.cpp +++ /dev/null @@ -1,91 +0,0 @@ -#include -#include -#include "TestClass_Stub.hpp" -#include "CallBack.hpp" - -using namespace std; - -static exception_ptr teptr = nullptr; - -int main(int argc, char *argv[]) -{ - - int port = 5010; - const char* address = "localhost"; - int rev = 0; - bool bResult = false; - vector ports; - ports.push_back(12345); - //ports.push_back(13234); - - TestClassInterface *tcStub = new TestClass_Stub(port, address, rev, &bResult, ports); - cout << "Return value: " << tcStub->setAndGetA(123) << endl; - cout << "Return value: " << tcStub->setACAndGetA("string", 123) << endl; - vector input; - input.push_back("123"); - input.push_back("456"); - input.push_back("987"); - /*vector input; - input.push_back(123); - input.push_back(456); - input.push_back(987);*/ - - cout << "Return value: " << tcStub->sumArray(input) << endl; - - CallBackInterface *cb1 = new CallBack(23); - CallBackInterface *cb2 = new CallBack(33); - CallBackInterface *cb3 = new CallBack(43); - vector cb; - cb.push_back(cb1); - cb.push_back(cb2); - cb.push_back(cb3); - tcStub->registerCallback(cb); - CallBackInterface *cb4 = new CallBack(53); - CallBackInterface *cb5 = new CallBack(63); - CallBackInterface *cb6 = new CallBack(73); - vector cbsec; - cbsec.push_back(cb4); - cbsec.push_back(cb5); - cbsec.push_back(cb6); - tcStub->registerCallback(cbsec); - cout << "Return value from callback: " << tcStub->callBack() << endl; - - vector dataset; - - data testdata; - testdata.name = "Rahmadi"; - testdata.value = 0.123; - testdata.year = 2016; - - data testdata2; - testdata2.name = "Trimananda"; - testdata2.value = 0.223; - testdata2.year = 2017; - - dataset.push_back(testdata); - dataset.push_back(testdata2); - - vector result = tcStub->handleStruct(dataset); - for (data dt : result) { - cout << dt.name << " "; - cout << dt.value << " "; - cout << dt.year << endl; - } - -/* vector vecEn; - vecEn.push_back(APPLE); - vecEn.push_back(ORANGE); - vecEn.push_back(APPLE); - vecEn.push_back(GRAPE); - vector vecRes = tcStub->handleEnum(vecEn); - for (EnumC en : vecRes) { - cout << "EnumC: " << en << endl; - } - - delete tcStub; - delete cb1; - delete cb2; - delete cb3;*/ - - return 0; -} diff --git a/iotjava/iotrmi/C++/sample/TestClass_Stub.hpp b/iotjava/iotrmi/C++/sample/TestClass_Stub.hpp deleted file mode 100644 index 78791a3..0000000 --- a/iotjava/iotrmi/C++/sample/TestClass_Stub.hpp +++ /dev/null @@ -1,376 +0,0 @@ -#ifndef _TESTCLASS_STUB_HPP__ -#define _TESTCLASS_STUB_HPP__ - -#include -#include -#include -#include "../IoTRMICall.hpp" -#include "../IoTRMIObject.hpp" -#include "TestClassInterface.hpp" -#include "CallBack_CBSkeleton.hpp" -#include "StructC.hpp" - -using namespace std; - -class TestClass_Stub : public TestClassInterface { - public: - TestClass_Stub(); - TestClass_Stub(int _port, const char* _address, int _rev, bool* _bResult, vector _ports); - ~TestClass_Stub(); - - void setA(int _int); - void setB(float _float); - void setC(string _string); - string sumArray(vector newA); - //int64_t sumArray(vector newA); - int setAndGetA(int newA); - int setACAndGetA(string newC, int newA); - void registerCallback(CallBackInterface* _cb); - void registerCallback(vector_cb); - int callBack(); - vector handleStruct(vector vecData); - vector handleEnum(vector vecEn); - void ____init_CallBack(); // thread - void ____registerCallBack(); // tell the other side that we are ready - - //exception_ptr teptr = nullptr; - - private: - int intA; - float floatB; - string stringC; - //CallBackInterface cb; - IoTRMICall *rmiCall; - string address; - vector ports; - const static int objectId = 0; // Default value is 0 - - // Specific for callbacks - IoTRMIObject *rmiObj; - vector vecCBObj; - static int objIdCnt; - // Callback permission - const static set set0Allowed; -}; - - -int TestClass_Stub::objIdCnt = 0; - - -const set TestClass_Stub::set0Allowed { 0, 1 }; - - -TestClass_Stub::TestClass_Stub() { - - address = ""; - rmiCall = NULL; -} - - -TestClass_Stub::TestClass_Stub(int _port, const char* _address, int _rev, bool* _bResult, vector _ports) { - - address = _address; - rmiCall = new IoTRMICall(_port, _address, _rev, _bResult); - ports = _ports; - // Start thread - /*if (teptr) { - try { - thread th1 (&TestClass_Stub::____init_CallBack, this); - th1.detach(); - } catch(const exception&) { - cout << "Got here!" << endl; - throw exception(); - } - }*/ - thread th1 (&TestClass_Stub::____init_CallBack, this); - th1.detach(); - //th1.join(); - ____registerCallBack(); -} - - -TestClass_Stub::~TestClass_Stub() { - - if (rmiCall != NULL) { - delete rmiCall; - rmiCall = NULL; - } - if (rmiObj != NULL) { - delete rmiObj; - rmiObj = NULL; - } - // Special for callbacks!!! - for(CallBackInterface* cb : vecCBObj) { - delete cb; - cb = NULL; - } -} - - -// Callback handler thread -void TestClass_Stub::____init_CallBack() { - - bool bResult = false; - rmiObj = new IoTRMIObject(ports[0], &bResult); - while (true) { - char* method = rmiObj->getMethodBytes(); - int methodId = IoTRMIObject::getMethodId(method); - // Permission check - // Complain if the method is not allowed - if (set0Allowed.find(methodId) == set0Allowed.end()) { - cerr << "TestClass_Skeleton: This object is not allowed to access method " << methodId << endl; - exit(-1); - //throw exception(); - //teptr = current_exception(); - } - int objId = IoTRMIObject::getObjectId(method); - if (objId < vecCBObj.size()) { // Check if still within range - CallBack_CBSkeleton* skel = - dynamic_cast (vecCBObj.at(objId)); - skel->invokeMethod(rmiObj); - } else { - string error = "TestClass_Stub: Illegal object Id: " + to_string(objId); - throw error; - } - } -} - - -// Notify that callback thread is ready -void TestClass_Stub::____registerCallBack() { - - int numParam = 3; - int methodId = 9; - string retType = "void"; - string paramCls[] = { "int", "string", "int" }; - int rev = 0; - void* paramObj[] = { &ports[0], &address, &rev }; - void* retObj = NULL; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); -} - - -void TestClass_Stub::setA(int _int) { - - int numParam = 1; - int methodId = 0; - string retType = "void"; - string paramCls[] = { "int" }; - void* paramObj[] = { &_int }; - void* retObj = NULL; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); -} - - -void TestClass_Stub::setB(float _float) { - - int numParam = 1; - int methodId = 1; - string retType = "void"; - string paramCls[] = { "float" }; - void* paramObj[] = { &_float }; - void* retObj = NULL; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); -} - - -void TestClass_Stub::setC(string _string) { - - int numParam = 1; - int methodId = 2; - string retType = "void"; - string paramCls[] = { "string" }; - void* paramObj[] = { &_string }; - void* retObj = NULL; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); -} - - -string TestClass_Stub::sumArray(vector newA) { - - int numParam = 1; - int methodId = 3; - string retType = "string"; - string paramCls[] = { "string[]" }; - void* paramObj[] = { &newA }; - string retVal = ""; - void* retObj = &retVal; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); - return retVal; -} - - -/*int64_t TestClass_Stub::sumArray(vector newA) { - - int numParam = 1; - string sign = "sumArray(int[])"; - string retType = "long"; - string paramCls[] = { "int[]" }; - void* paramObj[] = { &newA }; - int64_t retVal = 0; - void* retObj = &retVal; - rmiCall->remoteCall(objectId, sign, retType, paramCls, paramObj, numParam, retObj); - return retVal; -}*/ - - - -int TestClass_Stub::setAndGetA(int newA) { - - int numParam = 1; - int methodId = 4; - string retType = "int"; - string paramCls[] = { "int" }; - void* paramObj[] = { &newA }; - int retVal = 0; - void* retObj = &retVal; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); - return retVal; -} - - -int TestClass_Stub::setACAndGetA(string newC, int newA) { - - int numParam = 2; - int methodId = 5; - string retType = "int"; - string paramCls[] = { "string", "int" }; - void* paramObj[] = { &newC, &newA }; - int retVal = 0; - void* retObj = &retVal; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); - return retVal; -} - - -void TestClass_Stub::registerCallback(CallBackInterface* _cb) { - - //Should implement the callback here -} - - -void TestClass_Stub::registerCallback(vector _cb) { - - for (CallBackInterface* cb: _cb) { - CallBack_CBSkeleton* skel = new CallBack_CBSkeleton(cb, objIdCnt++); - vecCBObj.push_back(skel); - } - - int numParam = 1; - int methodId = 8; - string retType = "void"; - string paramCls[] = { "int" }; - int param1 = _cb.size(); - void* paramObj[] = { ¶m1 }; - void* retObj = NULL; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); -} - - -int TestClass_Stub::callBack() { - - int numParam = 0; - int methodId = 6; - string retType = "int"; - string paramCls[] = { }; - void* paramObj[] = { }; - int retVal = 0; - void* retObj = &retVal; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); - return retVal; -} - - -vector TestClass_Stub::handleStruct(vector vecData) { - - int numParam = 1; - int methodId = 11; - string retType = "void"; - string paramCls[] = { "int" }; - int structsize = vecData.size(); - void* paramObj[] = { &structsize }; - void* retObj = NULL; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); - - int numParam2 = 3*vecData.size(); - int methodId2 = 10; - string retType2 = "int"; - string paramCls2[numParam2]; - void* paramObj2[numParam2]; - int pos = 0; - for(int i = 0; i < vecData.size(); i++) { - paramCls2[pos] = "string"; - paramObj2[pos] = &vecData[i].name; pos++; - paramCls2[pos] = "float"; - paramObj2[pos] = &vecData[i].value; pos++; - paramCls2[pos] = "int"; - paramObj2[pos] = &vecData[i].year; pos++; - } - // RETURN STRUCT OBJECT - // Get length of struct array - int structsize1 = 0; - void* retObj2 = { &structsize1 }; - // IF we don't have returned struct objects, then it's just "void* retObj2 = NULL;" - rmiCall->remoteCall(objectId, methodId2, retType2, paramCls2, paramObj2, numParam2, retObj2); - cout << "Struct length: " << structsize1 << endl; - - // Get the returned objects - string retCls[3*structsize1]; - void* retObj3[3*structsize1]; - int numRet = 3*structsize1; - // define array of everything - string param1[structsize1]; - float param2[structsize1]; - int param3[structsize1]; - pos = 0; - for(int i=0; i < structsize1; i++) { - retCls[pos] = "string"; - retObj3[pos++] = ¶m1[i]; - retCls[pos] = "float"; - retObj3[pos++] = ¶m2[i]; - retCls[pos] = "int"; - retObj3[pos++] = ¶m3[i]; - } - rmiCall->getStructObjects(retCls, numRet, retObj3); - vector dat(structsize1); - pos = 0; - for (int i=0; i < structsize1; i++) { - dat[i].name = param1[i]; - dat[i].value = param2[i]; - dat[i].year = param3[i]; - } - - return dat; -} - - -vector TestClass_Stub::handleEnum(vector vecEn) { - - int numParam = 1; - int numEl = vecEn.size(); - int methodId = 12; - string retType = "int[]"; - string paramCls[] = { "int[]" }; - // Need to define this container for integer version of enum - vector paramInt(numEl); - for(int i = 0; i < numEl; i++) { - paramInt[i] = (int) vecEn[i]; // cast enum to integer - } - void* paramObj[] = { ¶mInt }; - // if no return value just - // void* retObj2 = NULL; - // This is with return value: - vector retEnumInt; - void* retObj = &retEnumInt; - rmiCall->remoteCall(objectId, methodId, retType, paramCls, paramObj, numParam, retObj); - int enumsize1 = retEnumInt.size(); - vector retVal(enumsize1); - for (int i=0; i < enumsize1; i++) { - retVal[i] = (EnumC) retEnumInt[i]; - } - return retVal; -} - - - -#endif -- 2.34.1