00001 #ifndef ns_pushback_message_h
00002 #define ns_pushback_message_h
00003
00004 #define PUSHBACK_REQUEST_MSG 1
00005 #define PUSHBACK_REFRESH_MSG 2
00006 #define PUSHBACK_STATUS_MSG 3
00007 #define PUSHBACK_CANCEL_MSG 4
00008
00009 class AggSpec;
00010
00011 class PushbackMessage {
00012 public:
00013 int msgID_;
00014 int senderID_;
00015 int targetID_;
00016
00017
00018 int qid_;
00019 int rlsID_;
00020
00021 void set(int msg, int sender, int dest, int qid, int rlsID) {
00022 msgID_ = msg;
00023 senderID_ = sender;
00024 targetID_ = dest;
00025 qid_ = qid;
00026 rlsID_=rlsID;
00027 }
00028
00029 static char * type(PushbackMessage * msg) {
00030 switch (msg->msgID_) {
00031 case PUSHBACK_REQUEST_MSG: return "REQUEST";
00032 case PUSHBACK_REFRESH_MSG: return "REFRESH";
00033 case PUSHBACK_STATUS_MSG: return "STATUS";
00034 case PUSHBACK_CANCEL_MSG: return "CANCEL";
00035 default: return "UNKNOWN";
00036 }
00037 }
00038 };
00039
00040
00041 class PushbackRequestMessage : public PushbackMessage {
00042 public:
00043 AggSpec * aggSpec_;
00044 double limit_;
00045 int depth_;
00046
00047 PushbackRequestMessage(int sender, int dest, int qid, int rlsID,
00048 AggSpec * aggSpec, double limit, int depth) {
00049 set(PUSHBACK_REQUEST_MSG, sender, dest, qid, rlsID);
00050 aggSpec_ = aggSpec;
00051 limit_=limit;
00052 depth_ = depth;
00053 }
00054 };
00055
00056 class PushbackStatusMessage : public PushbackMessage {
00057 public:
00058 double arrivalRate_;
00059 int height_;
00060
00061 PushbackStatusMessage(int sender, int dest, int qid, int rlsID,
00062 double arrivalRate, int height) {
00063 set(PUSHBACK_STATUS_MSG, sender, dest, qid, rlsID);
00064 arrivalRate_ = arrivalRate;
00065 height_=height;
00066 }
00067 };
00068
00069 class PushbackRefreshMessage : public PushbackMessage {
00070 public:
00071 AggSpec * aggSpec_;
00072 double limit_;
00073
00074 PushbackRefreshMessage(int sender, int dest, int qid, int rlsID,
00075 AggSpec * aggSpec, double newLimit) {
00076 set(PUSHBACK_REFRESH_MSG, sender, dest, qid, rlsID);
00077 aggSpec_= aggSpec;
00078 limit_=newLimit;
00079 }
00080 };
00081
00082 class PushbackCancelMessage : public PushbackMessage {
00083 public:
00084
00085 PushbackCancelMessage(int sender, int dest, int qid, int rlsID) {
00086 set(PUSHBACK_CANCEL_MSG, sender, dest, qid, rlsID);
00087 }
00088 };
00089
00090 #endif
00091