Advertisement
kanciastopantalones

der ju goł

Mar 18th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.30 KB | None | 0 0
  1. server
  2. ---------------------------------------------
  3.  
  4. #include <omnetpp.h>
  5.  
  6. class Server : public cSimpleModule
  7. {
  8. private:
  9. cQueue queue; //the queue; first job in the queue is being serviced
  10. cMessage *departure; //message-reminder of the end of service (job departure)
  11. simtime_t departure_time; //time of the next departure
  12. int N;
  13. int acc;
  14. int lost;
  15. cStdDev lr; // loss ratio
  16. simtime_t bufferOverflowPeriod;
  17. cDoubleHistogram ofPeriod;
  18. bool ofPeriodToggled;
  19. int consecutiveLosses;
  20. cLongHistogram consLosses;
  21. simtime_t timeToBufferOverflow;
  22. cDoubleHistogram timToBufOf;
  23.  
  24. protected:
  25. virtual void initialize();
  26. virtual void handleMessage(cMessage *msgin);
  27.  
  28. };
  29.  
  30. Define_Module(Server);
  31.  
  32. void Server::initialize()
  33. {
  34. departure = new cMessage("Departure");
  35. N = 10;
  36. lost = 0;
  37. acc = 0;
  38. ofPeriodToggled = false;
  39. consecutiveLosses = 0;
  40. ofPeriod.setName("OverflowPeriod");
  41. consLosses.setName("ConsecutiveLosses");
  42. timToBufOf.setName("TimeToBufferOverflow");
  43. lr.setName("LossRatio");
  44. }
  45.  
  46.  
  47. void Server::handleMessage(cMessage *msgin)
  48. {
  49. if (msgin==departure) //job departure
  50. {
  51. cMessage *msg = (cMessage *)queue.pop(); //remove job from the head of the queue
  52. if(queue.empty())
  53. {
  54. timeToBufferOverflow = simTime();
  55. }
  56.  
  57. if((queue.length() == N-1) && ofPeriodToggled)
  58. {
  59. bufferOverflowPeriod = simTime() - bufferOverflowPeriod;
  60. ofPeriodToggled = false;
  61. ofPeriod.collect(bufferOverflowPeriod);
  62. }
  63.  
  64. if(queue.length() == N-1)
  65. {
  66. consLosses.collect(consecutiveLosses);
  67. consecutiveLosses = 0;
  68. }
  69.  
  70. send(msg,"out");
  71. if (!queue.empty()) //schedule next departure event
  72. {
  73. departure_time=simTime()+par("service_time");
  74. scheduleAt(departure_time,departure);
  75. }
  76. }
  77. else if (queue.length() < N) //job arrival
  78. {
  79. if (queue.empty())
  80. {
  81. departure_time=simTime()+par("service_time");
  82. scheduleAt(departure_time,departure);
  83. }
  84. queue.insert(msgin); //put job at the end of the queue
  85.  
  86. if(queue.length()==N)
  87. {
  88. timeToBufferOverflow = simTime() - timeToBufferOverflow;
  89. timToBufOf.collect(timeToBufferOverflow);
  90. bufferOverflowPeriod = simTime();
  91. ofPeriodToggled = true;
  92. }
  93.  
  94. acc++;
  95. }
  96. else
  97. {
  98. consecutiveLosses++;
  99. delete msgin;
  100. lost++;
  101. }
  102. lr.collect((double)lost/(lost+acc));
  103. }
  104.  
  105. ----------------------------------------------------------------------------
  106. source
  107. ----------------------------------------------------------------------------
  108. #include <omnetpp.h>
  109.  
  110. class Source : public cSimpleModule
  111. {
  112. cMessage *send_event; //message-reminder: send next job
  113.  
  114. protected:
  115. virtual void initialize();
  116. virtual void handleMessage(cMessage *msgin);
  117. };
  118.  
  119. Define_Module(Source);
  120.  
  121. void Source::initialize()
  122. {
  123. for(int i=0;i<(int)par("initial_queue");i++) //this loop builds the initial queue
  124. {
  125. cMessage *job = new cMessage(" Job");
  126. send(job, "out" );
  127. }
  128.  
  129. send_event = new cMessage("Send!");
  130. scheduleAt(par("interarrival_time"), send_event);
  131. }
  132.  
  133. void Source::handleMessage(cMessage *msgin) //send next job
  134. {
  135. cMessage *job = new cMessage(" Job");
  136. send(job, "out" );
  137. scheduleAt(simTime()+par("interarrival_time"), send_event); //schedule next send event
  138. }
  139.  
  140. ------------------------------------------------------------------------------
  141. sink
  142. -----------------------------------------------------------------------------
  143. #include <omnetpp.h>
  144.  
  145. class Sink : public cSimpleModule
  146. {
  147. protected:
  148. virtual void handleMessage(cMessage *msgin);
  149. };
  150.  
  151.  
  152. Define_Module(Sink);
  153.  
  154.  
  155. void Sink::handleMessage(cMessage *msgin)
  156. {
  157. delete msgin;
  158. }
  159. --------------------------------------------------------------------------------
  160. omnetpp.ini
  161. ------------------------------------------------------------------------------
  162. [General]
  163. network = gg1
  164.  
  165. cpu-time-limit = 60s
  166.  
  167.  
  168. gg1.source.interarrival_time = exponential(0.5)
  169. gg1.server.service_time = uniform(0,1)
  170. gg1.source.initial_queue = 5
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement