Aggie Student Toolkit — Load Balancer
CSCE 412 Project 4
Arnav Fotedar · Fall 2026 · C++ load balancer simulation
Toggle main menu visibility
Loading...
Searching...
No Matches
WebServer.cpp
Go to the documentation of this file.
1
6
7
#include "
WebServer.h
"
8
9
#include <stdexcept>
10
11
WebServer::WebServer
(
unsigned
int
id
,
unsigned
long
createdCycle
)
12
: id_(
id
), createdCycle_(
createdCycle
) {}
13
14
unsigned
int
WebServer::id
()
const
{
15
return
id_;
16
}
17
18
bool
WebServer::isIdle
()
const
{
19
return
!current_.has_value();
20
}
21
22
bool
WebServer::isRetiring
()
const
{
23
return
retiring_;
24
}
25
26
void
WebServer::setRetiring
(
bool
retiring) {
27
retiring_ = retiring;
28
}
29
30
void
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
44
bool
WebServer::tick
() {
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
59
const
std::optional<Request>&
WebServer::current
()
const
{
60
return
current_;
61
}
62
63
const
Request
&
WebServer::lastCompleted
()
const
{
64
return
lastCompleted_;
65
}
66
67
unsigned
int
WebServer::remainingCycles
()
const
{
68
return
remainingCycles_;
69
}
70
71
unsigned
long
WebServer::completedCount
()
const
{
72
return
completedCount_;
73
}
74
75
unsigned
long
WebServer::busyCycles
()
const
{
76
return
busyCycles_;
77
}
78
79
unsigned
long
WebServer::createdCycle
()
const
{
80
return
createdCycle_;
81
}
WebServer.h
Declares the WebServer class, a worker that processes one Request at a time.
WebServer::assign
void assign(const Request &request, unsigned long cycle)
Starts processing a request.
Definition
WebServer.cpp:30
WebServer::remainingCycles
unsigned int remainingCycles() const
Definition
WebServer.cpp:67
WebServer::isIdle
bool isIdle() const
Definition
WebServer.cpp:18
WebServer::WebServer
WebServer(unsigned int id, unsigned long createdCycle=0)
Creates an idle server.
Definition
WebServer.cpp:11
WebServer::busyCycles
unsigned long busyCycles() const
Definition
WebServer.cpp:75
WebServer::lastCompleted
const Request & lastCompleted() const
Definition
WebServer.cpp:63
WebServer::setRetiring
void setRetiring(bool retiring)
Marks or unmarks the server for retirement.
Definition
WebServer.cpp:26
WebServer::isRetiring
bool isRetiring() const
Definition
WebServer.cpp:22
WebServer::current
const std::optional< Request > & current() const
Definition
WebServer.cpp:59
WebServer::completedCount
unsigned long completedCount() const
Definition
WebServer.cpp:71
WebServer::createdCycle
unsigned long createdCycle() const
Definition
WebServer.cpp:79
WebServer::tick
bool tick()
Advances the server by one clock cycle.
Definition
WebServer.cpp:44
WebServer::id
unsigned int id() const
Definition
WebServer.cpp:14
Request
A single web request waiting for, or receiving, service.
Definition
Request.h:41
Request::taskCycles
unsigned int taskCycles
Clock cycles of processing required (always at least 1).
Definition
Request.h:45
WebServer.cpp
Generated by
1.18.0