diff --git a/prak3/src/server.cpp b/prak3/src/server.cpp index e2198f50c8e10df646b700a5636124e1602bcb70..909612ef80ad6aad6c193832774f17654f30a1c9 100644 --- a/prak3/src/server.cpp +++ b/prak3/src/server.cpp @@ -26,7 +26,67 @@ void throughput_monitor() { } } -std::string processRequest(const std::string& request) { + + +#include <map> + +#define PORT 2525 +#define BUFFER_SIZE 1024 +#define STORE_OPERATION 's' +#define GET_OPERATION 'g' +#define DELETE_OPERATION 'd' + +//=========== SLOW PARSER ==================== +struct Request { + char operation; + std::string key; + std::string value; +}; + Request* parseRequest(const char* buffer) { + // Create a new Request struct + Request* req = new Request(); + + return req; +} + +// we assume that this function is slow +std::string processRequest_slow(const std::string& request) { + + std::string response; + Request* parsedRequest = parseRequest(request.c_str()); + + std::lock_guard<std::mutex> lock(mtx); + + switch (parsedRequest->operation) { + case STORE_OPERATION: + DB[parsedRequest->key] = parsedRequest->value; + response = "Stored [" + parsedRequest->key + "] = " + parsedRequest->value; + break; + case GET_OPERATION: + if (DB.find(parsedRequest->key) != DB.end()) { + response = "Value of [" + parsedRequest->key + "] is " + DB[parsedRequest->key]; + } else { + response = "Key [" + parsedRequest->key + "] not found"; + } + break; + case DELETE_OPERATION: + if (DB.erase(parsedRequest->key)) { + response = "Deleted key [" + parsedRequest->key + "]"; + } else { + response = "Key [" + parsedRequest->key + "] not found for deletion"; + } + break; + default: + response = "Invalid operation!"; + break; + } + + return response; +} +//============================================= + +// we assume that this function is fast +std::string processRequest_fast(const std::string& request) { std::string response; size_t first = request.find(","); @@ -87,7 +147,7 @@ void handle_client(int client_socket) { } buffer[bytes_received] = '\0'; - std::string response = processRequest(buffer); + std::string response = processRequest_slow(buffer); // Anfragezähler inkrementieren request_count.fetch_add(1, std::memory_order_relaxed);