2 #include "Room_Skeleton.hpp"
6 Room_Skeleton::Room_Skeleton(Room *_mainObj, int _portSend, int _portRecv) {
9 string file = "Room_Skeleton_cpp" + to_string(i) + ".log";
10 while (ifstream(file.c_str())) {
12 file = "Room_Skeleton_cpp" + to_string(i) + ".log";
15 log << "Port send: " << _portSend << endl;
16 log << "Port receive: " << _portRecv << endl;
17 bool _bResult = false;
19 rmiComm = new IoTRMICommServer(_portSend, _portRecv, &_bResult);
20 log << "Established connection with slave! Wait request invoke now..." << endl;
21 IoTRMIUtil::mapSkel->insert(make_pair(_mainObj, this));
22 IoTRMIUtil::mapSkelId->insert(make_pair(_mainObj, objectId));
23 rmiComm->registerSkeleton(objectId, &methodReceived);
24 thread th1 (&Room_Skeleton::___waitRequestInvokeMethod, this, this);
28 Room_Skeleton::Room_Skeleton(Room *_mainObj, IoTRMIComm *_rmiComm, int _objectId) {
29 bool _bResult = false;
33 rmiComm->registerSkeleton(objectId, &methodReceived);
36 Room_Skeleton::~Room_Skeleton() {
37 if (rmiComm != NULL) {
43 bool Room_Skeleton::didInitWaitInvoke() {
44 return didAlreadyInitWaitInvoke;
47 int Room_Skeleton::getRoomID() {
48 return mainObj->getRoomID();
51 void Room_Skeleton::___getRoomID(Room_Skeleton* skel) {
52 char* localMethodBytes = new char[methodLen];
53 memcpy(localMethodBytes, skel->methodBytes, methodLen);
54 didGetMethodBytes.exchange(true);
55 string paramCls[] = { };
57 void* paramObj[] = { };
58 rmiComm->getMethodParams(paramCls, numParam, paramObj, localMethodBytes);
59 int retVal = getRoomID();
60 void* retObj = &retVal;
61 rmiComm->sendReturnObj(retObj, "int", localMethodBytes);
62 delete[] localMethodBytes;
65 void Room_Skeleton::___waitRequestInvokeMethod(Room_Skeleton* skel) {
66 skel->didAlreadyInitWaitInvoke = true;
68 if (!methodReceived) {
71 skel->methodBytes = skel->rmiComm->getMethodBytes();
72 skel->methodLen = skel->rmiComm->getMethodLength();
73 methodReceived = false;
74 int _objectId = skel->rmiComm->getObjectId(skel->methodBytes);
75 int methodId = skel->rmiComm->getMethodId(skel->methodBytes);
76 if (_objectId == objectId) {
77 if (set0Allowed.find(methodId) == set0Allowed.end()) {
78 cerr << "Object with object Id: " << _objectId << " is not allowed to access method: " << methodId << endl;
87 thread th0 (&Room_Skeleton::___getRoomID, skel, skel);
91 cerr << "Method Id " << methodId << " not recognized!" << endl;
97 extern "C" void* createRoom_Skeleton(void** params) {
98 // Args: *_mainObj, int _portSend, int _portRecv
99 return new Room_Skeleton((Room*) params[0], *((int*) params[1]), *((int*) params[2]));
102 extern "C" void destroyRoom_Skeleton(void* t) {
103 Room_Skeleton* obj = (Room_Skeleton*) t;
107 extern "C" void initRoom_Skeleton(void* t) {