#include "server.h" Define_Module( Server ); void Server::activity() { // init counting messageCount = 0; jobsInSystem = 0; // get parameters cPar &service_time = par("service_time"); // setup finish-message cMessage finishMessage("finish"); // the currently processed message cMessage *currentMessage = 0; // process messages for (;;) { // fetch next message cMessage *msg = receive(); if (msg==&finishMessage) { // finished processing, so send away current message messageCount++; send(currentMessage, "out"); // handle next message if available if (!queue.empty()) { currentMessage = (cMessage*) queue.pop(); scheduleAt(simTime() + (simtime_t) service_time, &finishMessage); } else currentMessage = 0; } else { // new message arrival if (currentMessage==0) { // server is idle => process message immediately currentMessage = msg; scheduleAt(simTime() + (simtime_t) service_time, &finishMessage); } else { // server is busy => enqueue message queue.insert(msg); } } // update job count jobsInSystem = queue.length() + (currentMessage!=0) ? 1 : 0; } } void Server::initialize() { } void Server::finish() { int index = par("address"); ev << "Server " << index << ": Total messages processed: " << messageCount << endl; }