diff --git a/inc/App.hpp b/inc/App.hpp index 7a1d08a..81dece9 100644 --- a/inc/App.hpp +++ b/inc/App.hpp @@ -34,7 +34,7 @@ private: Rectangle likeBox; Rectangle disLikeBox; - std::array unit = {0}; + std::array unit = {0}; DnaManager manager; diff --git a/inc/values/DnaManager.hpp b/inc/values/DnaManager.hpp index 5639f35..ebb3c43 100644 --- a/inc/values/DnaManager.hpp +++ b/inc/values/DnaManager.hpp @@ -12,25 +12,35 @@ enum Liked no }; -struct Unit +struct UiUnit { Dna *dna; Liked liked; int index; }; +struct NetUnit +{ + uint128 hash; + uint32_t index; + Liked liked; +}; + +static_assert(24 == sizeof(NetUnit)); + class DnaManager { public: void init(); void deinit(); - Unit next(); - void like(Unit unit); + UiUnit next(); + void like(UiUnit unit); int generation; private: void saveData(); void saveVec(); + void saveGen(); uint128 randSeed; uint128 id; int queued; diff --git a/random/netw.cpp b/random/netw.cpp index 24915ba..e10d190 100644 --- a/random/netw.cpp +++ b/random/netw.cpp @@ -72,13 +72,7 @@ int sendFile() serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(PORT); - - // Convert IPv4 and IPv6 addresses from text to binary form - if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) - { - TraceLog(LOG_ERROR, "Invalid address/ Address not supported"); - return 1; - } + serv_addr.sin_addr = ipAddr; if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { @@ -119,13 +113,6 @@ int sendBuffer() serv_addr.sin_port = htons(PORT); serv_addr.sin_addr = ipAddr; - // Convert IPv4 and IPv6 addresses from text to binary form - // if (inet_pton(AF_INET, "192.168.0.31", &serv_addr.sin_addr) <= 0) - // { - // TraceLog(LOG_ERROR, "Invalid address/ Address not supported"); - // return 1; - // } - if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { TraceLog(LOG_ERROR, "Connection Failed"); diff --git a/src/App.cpp b/src/App.cpp index 78dd0e1..b461495 100644 --- a/src/App.cpp +++ b/src/App.cpp @@ -18,8 +18,6 @@ constexpr float textMargin = 0.02f; void App::init(int screenWidth, int screenHeight) { - SetTextLineSpacing(0); - this->screenWidth = screenWidth; this->screenHeight = screenHeight; this->canvas.init(screenWidth); diff --git a/src/values/DnaManager.cpp b/src/values/DnaManager.cpp index 1bd6d2a..af3cc48 100644 --- a/src/values/DnaManager.cpp +++ b/src/values/DnaManager.cpp @@ -41,6 +41,8 @@ void DnaManager::init() for (int i = 0; i < size; i++) { fread(&tmp, sizeof(tmp), 1, file); + if (tmp >= NUM_PER_GEN) // out of bounds error prevention if buffer was in the past biiger then its now + continue; liked.push_back(tmp); } @@ -48,6 +50,8 @@ void DnaManager::init() for (int i = 0; i < size; i++) { fread(&tmp, sizeof(tmp), 1, file); + if (tmp >= NUM_PER_GEN) // out of bounds error prevention if buffer was in the past biiger then its now + continue; disliked.push_back(tmp); } fclose(file); @@ -71,6 +75,7 @@ void DnaManager::init() { DNA::newDna(&vector[i], &randSeed); } + saveVec(); } } @@ -112,7 +117,7 @@ void DnaManager::saveVec() fclose(file); } -Unit DnaManager::next() +UiUnit DnaManager::next() { if (queued >= NUM_PER_GEN) { @@ -124,7 +129,7 @@ Unit DnaManager::next() return {ret, Liked::tbd, index}; } -void DnaManager::like(Unit unit) +void DnaManager::like(UiUnit unit) { int found = -1; if (unit.index == showed) @@ -155,6 +160,7 @@ void DnaManager::like(Unit unit) if (showed >= NUM_PER_GEN && queued >= NUM_PER_GEN) // if buffer was biger in the past showed could be more then NUM_PER_GEN so its changed to >= insted of == { + saveGen(); newGen(); queued = 0; showed = 0; @@ -164,6 +170,37 @@ void DnaManager::like(Unit unit) saveData(); } +void DnaManager::saveGen() +{ + std::vector gen; + gen.resize(NUM_PER_GEN); + for (std::size_t i = 0; i < NUM_PER_GEN; i++) + { + unsigned int *hash = ComputeMD5((unsigned char *)&vector[i], sizeof(Dna)); + gen[i].hash.a = hash[0]; + gen[i].hash.b = hash[1]; + gen[i].hash.c = hash[2]; + gen[i].hash.d = hash[3]; + + gen[i].liked = Liked::tbd; + gen[i].index = i; + } + + for (auto &&i : liked) + { + gen[i].liked = Liked::yes; + } + + for (auto &&i : disliked) + { + gen[i].liked = Liked::no; + } + + const char *fileName = TextFormat("gen%04d.bin", generation); + + sys::saveDataToFile(fileName, gen.data(), sizeof(NetUnit) * NUM_PER_GEN); +} + void DnaManager::newGen() { if (liked.size() == 0) @@ -193,8 +230,6 @@ void DnaManager::newGen() { for (auto &&i : disliked) { - if (i >= NUM_PER_GEN) // out of bounds error prevention if buffer was in the past biiger then its now - continue; size_t p1 = mrand::getValue(0, liked.size() - 1, &randSeed); size_t p2 = mrand::getValue(0, liked.size() - 1, &randSeed); @@ -203,9 +238,6 @@ void DnaManager::newGen() p2 = mrand::getValue(0, liked.size(), &randSeed); } - if (p1 >= NUM_PER_GEN || p2 >= NUM_PER_GEN) // out of bounds error prevention if buffer was in the past biiger then its now - continue; - p1 = liked[p1]; p2 = liked[p2]; Dna *p1p = &vector[p1];