GreenCloud Simulator
tskcomsink.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */
2 /*
3  */
4 
5 #ifndef lint
6 static const char rcsid[] =
7  "@(#) $Header: /cvsroot/nsnam/ns-2/tools/tskcomsink.cc,v 1.18 2000/09/01 03:04:06 haoboy Exp $ (LBL)";
8 #endif
9 
10 #include <tclcl.h>
11 
12 #include "agent.h"
13 #include "config.h"
14 #include "packet.h"
15 #include "ip.h"
16 #include "rtp.h"
17 #include "bytecounter.h"
18 #include "tskcomsink.h"
19 
20 static class TskComSinkClass : public TclClass {
21 public:
22  TskComSinkClass() : TclClass("Agent/TskComSink") {}
23  TclObject* create(int, const char*const*) {
24  return (new TskComSink());
25  }
27 
28 TskComSink::TskComSink() : Agent(PT_NTYPE)
29 {
30  bytes_ = 0;
31  bytes_since_ = 0;
32  nlost_ = 0;
33  npkts_ = 0;
34  expected_ = -1;
35  last_packet_time_ = 0.;
36  last_bytes_since_ = 0.;
37  seqno_ = 0;
38  bind("nlost_", &nlost_);
39  bind("npkts_", &npkts_);
40  bind("bytes_", &bytes_);
41  bind("lastPktTime_", &last_packet_time_);
42  bind("expected_", &expected_);
43 }
44 
46 {
47  res_provider_ = NULL;
48 }
49 
50 void TskComSink::recv(Packet* pkt, Handler*)
51 {
52  /* Get TskObject and start its execution */
53  ResourceConsumer *recvTskObj = (ResourceConsumer*)hdr_cmn::access(pkt)->pt_obj_addr();
54 // std::cerr << "Pointer recieved:" << recvTskObj << "\n";
55 
56  if (recvTskObj) { /* Valid pointer and can be executed */
57 // std::cerr << "Task id:" << ((CloudTask*)recvTskObj)->id_ << "\n";
58  if (res_provider_) res_provider_->recv(recvTskObj);
59  else printf("Error: task is received but no ResourceProvider is attached\n");
60  }
61 
62  bytes_ += hdr_cmn::access(pkt)->size();
63  bytes_since_ += hdr_cmn::access(pkt)->size();
64  ++npkts_;
65 
66  last_packet_time_ = Scheduler::instance().clock();
67  Packet::free(pkt);
68 }
69 
71 {
72  res_provider_ = newrp;
74 }
75 
76 /*
77  * $proc interval $interval
78  * $proc size $size
79  */
80 int TskComSink::command(int argc, const char*const* argv)
81 {
82  if (argc == 2) {
83  if (strcmp(argv[1], "clear") == 0) {
84  expected_ = -1;
85  return (TCL_OK);
86  }
87  }
88  if (argc == 3) {
89  if (strcmp(argv[1], "connect-resprovider") == 0) {
90  ResourceProvider *hst = dynamic_cast<ResourceProvider*> (TclObject::lookup(argv[2]));
91  if(hst){
93  return (TCL_OK);
94  }
95  return (TCL_ERROR);
96  }
97  }
98 
99  return (Agent::command(argc, argv));
100 }
101 
102 
void setTskComSink(TskComSink *tcs)
TclObject * create(int, const char *const *)
Definition: tskcomsink.cc:23
int bytes_
Definition: tskcomsink.h:31
double last_packet_time_
Definition: tskcomsink.h:33
static const char rcsid[]
Definition: tskcomsink.cc:6
double last_bytes_since_
Definition: bytecounter.h:27
int nlost_
Definition: tskcomsink.h:28
int seqno_
Definition: tskcomsink.h:32
int npkts_
Definition: tskcomsink.h:29
int expected_
Definition: tskcomsink.h:30
ResourceProvider * res_provider_
Definition: tskcomsink.h:36
void recv(ResourceConsumer *rcobj)
virtual int command(int argc, const char *const *argv)
Definition: tskcomsink.cc:80
TskComSinkClass class_tsk_comsink
virtual ~TskComSink()
Definition: tskcomsink.cc:45
virtual void recv(Packet *pkt, Handler *)
Definition: tskcomsink.cc:50
void addResourceProvider(ResourceProvider *newrp)
Definition: tskcomsink.cc:70
int bytes_since_
Definition: bytecounter.h:26