diff --git a/program/Build/RaspberryCloud.sdf b/program/Build/RaspberryCloud.sdf index afc9ac1a73860b5b3cfcceaa5c0292f89122ba9a..b20cf7c7d5366d51979ea664a9367942cdfa0072 100644 Binary files a/program/Build/RaspberryCloud.sdf and b/program/Build/RaspberryCloud.sdf differ diff --git a/program/Build/RaspberryCloud.v12.suo b/program/Build/RaspberryCloud.v12.suo index 728a0587f480dde5fe1cd0f376e0f45aa5b18244..0e216ea257a0b66722d14df7ba57eba18b9c9069 100644 Binary files a/program/Build/RaspberryCloud.v12.suo and b/program/Build/RaspberryCloud.v12.suo differ diff --git a/program/Source/app/Application.cpp b/program/Source/app/Application.cpp index 28b1de11a5638803a511b4a498e2b5b865f9b576..d14c277b90112c241785f96f55c710e8d2489721 100644 --- a/program/Source/app/Application.cpp +++ b/program/Source/app/Application.cpp @@ -42,8 +42,8 @@ int main2(int argc, char **argv){ Application application; application.cm.addCloud(make_shared<LocalCloudAdapter>()); - application.cm.addCloud(make_shared<DropboxAdapter>()); - application.cm.addCloud(make_shared<FTPAdapter>()); + //application.cm.addCloud(make_shared<DropboxAdapter>()); + //application.cm.addCloud(make_shared<FTPAdapter>()); string dataFolder = "C:\\Users\\krisz\\raspberrycloud\\skeleton\\Program\\data\\"; string fragFolder = "C:\\Users\\krisz\\raspberrycloud\\skeleton\\Program\\temp\\"; @@ -68,6 +68,10 @@ int main2(int argc, char **argv){ application.cfs.getEncoder()->setFolders(dataFolder, fragFolder); application.cfs.getDecoder()->setFolders(dataFolder, fragFolder); + + application.cfs.getEncoder()->setSymbols(4, 128, 1.0); + application.cfs.getDecoder()->setSymbols(4, 128, 1.0); + application.cfs.setFolders(fragFolder); bool waitAnswer = true; @@ -414,6 +418,70 @@ int test1(){ return 0; } +int test2(){ + Application application; + + application.cm.addCloud(make_shared<LocalCloudAdapter>()); + //application.cm.addCloud(make_shared<DropboxAdapter>()); + //application.cm.addCloud(make_shared<FTPAdapter>()); + + string dataFolder = "C:\\Users\\krisz\\raspberrycloud\\skeleton\\Program\\data\\"; + string fragFolder = "C:\\Users\\krisz\\raspberrycloud\\skeleton\\Program\\temp\\"; + string cloudFolder = "C:\\Users\\krisz\\raspberrycloud\\skeleton\\Program\\cloud\\"; + string cacheFolder = "C:\\Users\\krisz\\raspberrycloud\\skeleton\\Program\\cache\\"; + + application.cfs.getEncoder()->setFolders(dataFolder, fragFolder); + application.cfs.getDecoder()->setFolders(dataFolder, fragFolder); + + application.cfs.setFolders(fragFolder); + + Cache *cacheToSetup; + + cacheToSetup = new NoCache(); + + application.cfs.setCache(cacheToSetup); + application.cfs.getCache()->setFolders(cacheFolder, dataFolder); + application.cfs.getCache()->readCache(); + + application.hnc.setDataFolder(dataFolder); + + for (auto ca : application.cm.getCloudList()){ + ca->setFolders(cloudFolder, fragFolder); + } + + application.ui.setComputeOnPi(false); + + int redundancy = 1.5; + for (int max_symbols = 1; max_symbols <= 64; max_symbols *= 2){ + for (int max_symbol_size = 128; max_symbol_size <= 4096; max_symbol_size *= 2) { + application.cfs.getEncoder()->setSymbols(max_symbols, max_symbol_size, redundancy); + application.cfs.getDecoder()->setSymbols(max_symbols, max_symbol_size, redundancy); + + for (int i = 0; i < 9; i++) { + + double elapsed_secs = 0; + clock_t begin = clock(); + + string file1 = boost::lexical_cast<string>(i + 1) + ".html"; + addFile(application, file1, file1); + deleteFile(application, file1); + + + clock_t end = clock(); + elapsed_secs += double(end - begin); + + cout.precision(15); + cout << "File size: " << pow(2, i) << "KB Spent time:" << elapsed_secs << "Max sym: " << max_symbols << " MSS: " << max_symbol_size << endl; + } + } + } + + int i; + cin >> i; + return 0; +} + int main(int argc, char **argv) { - return test1(); + cout << CLOCKS_PER_SEC << endl; + return main2(argc, argv); } \ No newline at end of file diff --git a/program/Source/dataAccess/Decoder.cpp b/program/Source/dataAccess/Decoder.cpp index 5fde2b48ce6b91ea742c5faf39b7043a6b5d67e3..22c902370094bbb6ce7017fdb60064522bba44b4 100644 --- a/program/Source/dataAccess/Decoder.cpp +++ b/program/Source/dataAccess/Decoder.cpp @@ -19,8 +19,17 @@ void Decoder::setFolders(string _dataFolder, string _fragFolder){ fragFolder = _fragFolder; } +void Decoder::setSymbols(int _max_symbols, int _max_symbol_size, double _redundancy){ + max_symbols = _max_symbols; + max_symbol_size = _max_symbol_size; + redundancy = _redundancy; +} + string Decoder::dataFolder = ""; string Decoder::fragFolder = ""; +int Decoder::max_symbols = 10; +int Decoder::max_symbol_size = 256; +double Decoder::redundancy = 1.0; ReturnableFile Decoder::decode(FileDescriptor* fileDescriptor) { @@ -35,8 +44,8 @@ ReturnableFile Decoder::decode(FileDescriptor* fileDescriptor) auto fragments = fileDescriptor->getFragments(); if (fragments.size() > 0) { - uint32_t max_symbols = 10; - uint32_t max_symbol_size = fileDescriptor->getSize() / 10 + 1; + //uint32_t max_symbols = 10; + //uint32_t max_symbol_size = 256; using file_decoder = kodo::object::file_decoder< kodo::shallow_full_rlnc_decoder<fifi::binary>>; diff --git a/program/Source/dataAccess/Decoder.h b/program/Source/dataAccess/Decoder.h index d4ec1107773f9847ddd3bddf8a09302f24bdbd3f..82673ffa0c584df6dd88df149223b560751ac241 100644 --- a/program/Source/dataAccess/Decoder.h +++ b/program/Source/dataAccess/Decoder.h @@ -12,8 +12,12 @@ class Decoder { static std::string dataFolder; static std::string fragFolder; + static int max_symbols; + static int max_symbol_size; + static double redundancy; public: void setFolders(std::string _dataFolder, std::string _fragFolder); + void setSymbols(int max_symbols, int max_symbol_size, double redundancy); /** * decodes the fragments to a file diff --git a/program/Source/dataAccess/Encoder.cpp b/program/Source/dataAccess/Encoder.cpp index f9186758f5c738be53ab2d8cae6aa9a14c2d7c7b..8533c232149afc7bb5b9ed581a2bdeaf586b32b2 100644 --- a/program/Source/dataAccess/Encoder.cpp +++ b/program/Source/dataAccess/Encoder.cpp @@ -22,8 +22,17 @@ void Encoder::setFolders(string _dataFolder, string _fragFolder){ fragFolder = _fragFolder; } +void Encoder::setSymbols(int _max_symbols, int _max_symbol_size, double _redundancy){ + max_symbols = _max_symbols; + max_symbol_size = _max_symbol_size; + redundancy = _redundancy; +} + string Encoder::dataFolder = ""; string Encoder::fragFolder = ""; +int Encoder::max_symbols = 10; +int Encoder::max_symbol_size = 256; +double Encoder::redundancy = 1.0; FileDescriptor* Encoder::encode(string localFileID, string destinationFileID) { LOG_ENTER_EXIT; @@ -45,8 +54,8 @@ FileDescriptor* Encoder::encode(string localFileID, string destinationFileID) { long file_size = filesystem::file_size(encode_filename); encoded->setSize(file_size); - uint32_t max_symbols = 10; - uint32_t max_symbol_size = file_size / 10 + 1; + //uint32_t max_symbols = 10; //db + //uint32_t max_symbol_size = 256; // file_size / 10 + 1; //byte <- mindig 1 k�dol� using file_encoder = kodo::object::file_encoder< kodo::shallow_full_rlnc_encoder<fifi::binary >> ; @@ -62,7 +71,7 @@ FileDescriptor* Encoder::encode(string localFileID, string destinationFileID) { vector<uint8_t> payload(e->payload_size()); - for (uint32_t j = 0; j < max_symbols; j++) + for (uint32_t j = 0; j < e->symbols(); j++) { e->encode(payload.data()); diff --git a/program/Source/dataAccess/Encoder.h b/program/Source/dataAccess/Encoder.h index d86253091300505cec6152c9964fd67f2a35aca5..f79c503b41b14907af795f08cd78f7c3f8ccee80 100644 --- a/program/Source/dataAccess/Encoder.h +++ b/program/Source/dataAccess/Encoder.h @@ -12,8 +12,12 @@ class Encoder { static std::string dataFolder; static std::string fragFolder; + static int max_symbols; + static int max_symbol_size; + static double redundancy; public: void setFolders(std::string _dataFolder, std::string _fragFolder); + void setSymbols(int max_symbols, int max_symbol_size, double redundancy); /** * encodes the file to fragments