Modified and tested IoTMaster for IoTSet in C++; completed IoTMaster and IoTSlave...
[iot2.git] / iotjava / iotruntime / cpp / iotslave / IoTSlave.hpp
index 343a2c2ef7e9fcb3535bc693099b5e329e649018..e5ecdfc7e4bf225f94247faa15bf202cdf53a07c 100644 (file)
@@ -5,14 +5,12 @@
 #include <fstream>
 #include <vector>
 #include <thread>
+#include <cstdlib>
 
 #include <dlfcn.h>             // For dlopen, dlsym, etc.
 
-//#include "ObjectFactory.hpp"
-//#include "ISet.hpp"
 #include "IoTSet.hpp"
 #include "IoTDeviceAddress.hpp"
-//#include "IRelation.hpp"
 #include "IoTRelation.hpp"
 #include "Socket.cpp"
 
@@ -71,6 +69,7 @@ class IoTSlave {
                const static string DESTROYFUNCTION;            // The destroy function in class
                const static string INITFUNCTION;                       // The init function in class
                const static string LOCALHOST;                          // String "localhost"
+               const static string SHELL;                                      // String ".sh"
 
                // Class properties
                string serverAddress;
@@ -85,10 +84,16 @@ class IoTSlave {
                int objectRegPort;
                int objectStubPort;
                vector<int> ports;                      // Now used to contain callback ports
-               string objectFieldName;                         // Field name that is going to be initialized with IoTSet or IoTRelation
-               unordered_set<void*>* isetObject;       // Set of object
-               IoTSet<void*>* iotsetObject;            // IoTSet of object
-               vector<IoTSet<void*>*> vecIoTSet;       // IoTSet of object
+               string objectFieldName;                                         // Field name that is going to be initialized with IoTSet or IoTRelation
+               unordered_set<void*>* isetObject;                       // Set of object
+               IoTSet<void*>* iotsetObject;                            // IoTSet of object
+               vector<IoTSet<void*>*> vecIoTSet;                       // IoTSet of object
+               void* irelFirstObject;                                                  // First object of IoTRelation
+               void* irelSecondObject;                                                 // Second object of IoTRelation
+               unordered_multimap<void*,void*>* irelObject;    // Relation of object
+               IoTRelation<void*,void*>* iotrelObject;                 // IoTRelation of objects
+               vector<IoTRelation<void*,void*>*> vecIoTRel;    // IoTRelation of object
+
                TCPSocket* socket;
                ofstream log;                                           // Log the messages
                vector<string> args;                            // Hold the arguments for constructor (in string format)
@@ -115,6 +120,8 @@ class IoTSlave {
                int recvInteger();
                void sendString(string strSend);
                string recvString();
+               string recvFile();
+               void unzipFile(string fileName);
                // Main loop
                void sendAck();
                bool recvEndTransfer();
@@ -122,16 +129,22 @@ class IoTSlave {
                void createObject();            // Create driver object
                void createMainObject();        // Create main object
                void createNewIoTSet();
+               void createNewIoTRelation();
                void getDeviceIoTSetObject();
+               void getIoTRelationFirstObject();
+               void getIoTRelationSecondObject();
                void reinitializeIoTSetField();
+               void reinitializeIoTRelationField();
                void getIoTSetObject();
                void invokeInitMethod();
+               void transferFile();
 
        private:
                // Private helper functions
                int* byteToInt(int* result, char* bytes);
                char* intToByteArray(int i, char* bytes);
                char* recvIter(char* recvBuffer, int recvLen);
+               char* recvFileIter(char* recvBuffer, int recvLen);
                void* getObjectConverted(void* retObj, string object, string objectClass);
                void openFile(string fileName);
                void writeToFile(string logMsg);
@@ -142,6 +155,8 @@ class IoTSlave {
                void instantiateSkelObject();
                void instantiateStubObject();
                void runInitObject(IoTSlave* iotslave);
+               void getIoTSetRelationObject();
+               void createStub();
 };
 
 // Constant initialization
@@ -154,5 +169,6 @@ const string IoTSlave::CREATEFUNCTION = "create";
 const string IoTSlave::DESTROYFUNCTION = "destroy";
 const string IoTSlave::INITFUNCTION = "init";
 const string IoTSlave::LOCALHOST = "localhost";
+const string IoTSlave::SHELL = ".sh";
 
 #endif