Aggie Student Toolkit — Load Balancer CSCE 412 Project 4
Arnav Fotedar · Fall 2026 · C++ load balancer simulation
Loading...
Searching...
No Matches
WebServer.cpp
Go to the documentation of this file.
1
6
7#include "WebServer.h"
8
9#include <stdexcept>
10
11WebServer::WebServer(unsigned int id, unsigned long createdCycle)
12 : id_(id), createdCycle_(createdCycle) {}
13
14unsigned int WebServer::id() const {
15 return id_;
16}
17
18bool WebServer::isIdle() const {
19 return !current_.has_value();
20}
21
23 return retiring_;
24}
25
26void WebServer::setRetiring(bool retiring) {
27 retiring_ = retiring;
28}
29
30void WebServer::assign(const Request& request, unsigned long /*cycle*/) {
31 if (!isIdle()) {
32 throw std::logic_error("WebServer::assign called on a busy server");
33 }
34 if (retiring_) {
35 throw std::logic_error("WebServer::assign called on a retiring server");
36 }
37 if (request.taskCycles == 0) {
38 throw std::logic_error("WebServer::assign requires at least one task cycle");
39 }
40 current_ = request;
41 remainingCycles_ = request.taskCycles;
42}
43
45 if (isIdle()) {
46 return false;
47 }
48 ++busyCycles_;
49 --remainingCycles_;
50 if (remainingCycles_ > 0) {
51 return false;
52 }
53 lastCompleted_ = *current_;
54 current_.reset();
55 ++completedCount_;
56 return true;
57}
58
59const std::optional<Request>& WebServer::current() const {
60 return current_;
61}
62
64 return lastCompleted_;
65}
66
67unsigned int WebServer::remainingCycles() const {
68 return remainingCycles_;
69}
70
71unsigned long WebServer::completedCount() const {
72 return completedCount_;
73}
74
75unsigned long WebServer::busyCycles() const {
76 return busyCycles_;
77}
78
79unsigned long WebServer::createdCycle() const {
80 return createdCycle_;
81}
Declares the WebServer class, a worker that processes one Request at a time.
void assign(const Request &request, unsigned long cycle)
Starts processing a request.
Definition WebServer.cpp:30
unsigned int remainingCycles() const
Definition WebServer.cpp:67
bool isIdle() const
Definition WebServer.cpp:18
WebServer(unsigned int id, unsigned long createdCycle=0)
Creates an idle server.
Definition WebServer.cpp:11
unsigned long busyCycles() const
Definition WebServer.cpp:75
const Request & lastCompleted() const
Definition WebServer.cpp:63
void setRetiring(bool retiring)
Marks or unmarks the server for retirement.
Definition WebServer.cpp:26
bool isRetiring() const
Definition WebServer.cpp:22
const std::optional< Request > & current() const
Definition WebServer.cpp:59
unsigned long completedCount() const
Definition WebServer.cpp:71
unsigned long createdCycle() const
Definition WebServer.cpp:79
bool tick()
Advances the server by one clock cycle.
Definition WebServer.cpp:44
unsigned int id() const
Definition WebServer.cpp:14
A single web request waiting for, or receiving, service.
Definition Request.h:41
unsigned int taskCycles
Clock cycles of processing required (always at least 1).
Definition Request.h:45