#include "Server.h" void Server::start(){ server.setup(port); is_active = true; previous_embedding = embedding; last_change_time = std::chrono::steady_clock::now(); } void Server::update(){ for ( int i = 0; i < server.getLastID(); i++){ if (server.isClientConnected(i)) { const int buffer_size = 8; char buffer[buffer_size]; int bytes_recieved = server.receiveRawBytes(i, buffer, buffer_size); if (bytes_recieved == buffer_size){ float value; int id; memcpy(&value, buffer, sizeof(float)); memcpy(&id, buffer + sizeof(float), sizeof(int)); std::string ip_address = server.getClientIP(i); addOrUpdateClient(id, value, ip_address); } } } updateEmbedding(); checkActivity(); if(debug){ printClients(); } } void Server::addOrUpdateClient(int client_id, float value, const std::string& ip_address){ ClientInfo client; client.ip_address = ip_address; client.value = value; clients[client_id] = client; } void Server::updateEmbedding(){ for(const auto& c : clients){ const ClientInfo& info = c.second; float val = std::round(info.value * 1000.0f) / 1000.0f; switch(c.first){ case 0: embedding.angry = val; break; case 1: embedding.disgust = val; break; case 2: embedding.fear = val; break; case 3: embedding.happy = val; break; case 4: embedding.sad = val; break; case 5: embedding.surprise = val; break; case 6: embedding.neutral = val; break; } } } void Server::printClients(){ for( const auto& c : clients){ int id = c.first; const ClientInfo& info = c.second; std::cout << "id: " << id << ", value: " << info.value << ", IP: " << info.ip_address << std::endl; } std::cout << is_active << std::endl; } /* check if the controllers are in use */ void Server::checkActivity(){ if (previous_embedding != embedding) { // Check if embedding has changed last_change_time = std::chrono::steady_clock::now(); // Reset the timer if there is a change previous_embedding = embedding; // Update the previous embedding to the current one is_active = true; } else { // Calculate the time since the last change auto now = std::chrono::steady_clock::now(); auto duration = std::chrono::duration_cast(now - last_change_time).count(); if (duration >= 2) { is_active = false; } } std::cout << is_active << std::endl; }