1 #include "server.h"
2
3 Define_Module( Server );
4
5 void Server::activity()
6 {
7 // init counting
8 messageCount = 0;
9 jobsInSystem = 0;
10
11 // get parameters
12 cPar &service_time = par("service_time");
13
14 // setup finish-message
15 cMessage finishMessage("finish");
16
17 // the currently processed message
18 cMessage *currentMessage = 0;
19
20 // process messages
21 for (;;) {
22 // fetch next message
23 cMessage *msg = receive();
24 if (msg==&finishMessage) {
25 // finished processing, so send away current message
26 messageCount++;
27 send(currentMessage, "out");
28 // handle next message if available
29 if (!queue.empty()) {
30 currentMessage = (cMessage*) queue.pop();
31 scheduleAt(simTime() + (simtime_t) service_time, &finishMessage);
32 } else currentMessage = 0;
33 } else {
34 // new message arrival
35 if (currentMessage==0) {
36 // server is idle => process message immediately
37 currentMessage = msg;
38 scheduleAt(simTime() + (simtime_t) service_time, &finishMessage);
39 } else {
40 // server is busy => enqueue message
41 queue.insert(msg);
42 }
43 }
44 // update job count
45 jobsInSystem = queue.length() + (currentMessage!=0) ? 1 : 0;
46 }
47 }
48
49 void Server::initialize()
50 {
51
52 }
53
54 void Server::finish()
55 {
56 int index = par("address");
57 ev << "Server " << index << ": Total messages processed: " << messageCount << endl;
58 }
59