#include "lbs_i.h" Define_Module( LBS_I ) void LBS_I::activity() { // get parameters simtime_t delta_t = par("delta_t"); // search servers and save reference to its workload parameter // as well as their rate cModule *compound = parentModule(); for (int i = 0; isubmodule("server", i); if ((svr==0) || (strcmp(svr->className(), "Server")!=0)) { throw cException("server[] contains non-Server"); } server[i] = (Server*) svr; rate[i] = svr->par("rate"); } // create update-message and issue it immediately cMessage *updateMsg = new cMessage("update-balancer"); scheduleAt(simTime() + delta_t, updateMsg); update(); // message loop for (;;) { // get message cMessage *msg = receive(); if (msg==updateMsg) { // update received, so do it and issue the message again delta_t secs later update(); scheduleAt(simTime() + delta_t, updateMsg); } else { // send the message to the current server to use send(msg, "out", serverToUse); } } } void LBS_I::update() { // search server with minimum workload (count the number of occurences) int i; int count = 0; double load = 100000000; for (i = 0; igetJobsInSystem(); if (l>0) --l; // calculate performance measure and save it double bl = (double) l/rate[i]; balancing[i] = bl; if (bl