topical media & game development
professional-program-21-RoundRobin-RoundRobinTest.c
? /
professional-program-21-RoundRobin-RoundRobinTest.c
include <RoundRobin.h>
include <stdexcept>
include <iostream>
using namespace std;
//
// Forward declaration for NetworkRequest
// Implementation details omitted
//
class NetworkRequest {};
//
// Simple Host class that serves as a proxy for a physical machine.
// Implementation details omitted.
//
class Host
{
public:
//
// Implementation of processRequest would forward
// the request to the network host represented by the
// object. Omitted here.
//
void processRequest(NetworkRequest& request) {}
};
//
// Simple load balancer that distributes incoming requests
// to its hosts using a round-robin scheme.
//
class LoadBalancer
{
public:
//
// Constructor takes a vector of hosts.
//
LoadBalancer(const vector<Host>& hosts);
~LoadBalancer() {}
//
// Ship the incoming request to the next host using
// a round-robin scheduling algorithm
//
void distributeRequest(NetworkRequest& request);
protected:
RoundRobin<Host> rr;
};
LoadBalancer::LoadBalancer(const vector<Host>& hosts)
{
// add the hosts
for (size_t i = 0; i < hosts.size(); ++i) {
rr.add(hosts[i]);
}
}
void LoadBalancer::distributeRequest(NetworkRequest& request)
{
try {
rr.getNext().processRequest(request);
} catch (out_of_range& e) {
cerr << "No more hosts.\n";
}
}
int main(int argc, char** argv)
{
vector<Host> hosts;
hosts.push_back(Host());
hosts.push_back(Host());
hosts.push_back(Host());
LoadBalancer lb(hosts);
NetworkRequest r;
lb.distributeRequest(r);
lb.distributeRequest(r);
lb.distributeRequest(r);
lb.distributeRequest(r);
lb.distributeRequest(r);
lb.distributeRequest(r);
}
(C) Æliens
20/2/2008
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.