-
+#ifndef REJECTEDMESSAGE_H
+#define REJECTEDMESSAGE_H
/**
* Entry for tracking messages that the server rejected. We have to
* make sure that all clients know that this message was rejected to
* @author Brian Demsky
* @version 1.0
*/
+#include "common.h"
+#include "Entry.h"
-
-class RejectedMessage extends Entry {
+class RejectedMessage : public Entry {
+ private:
/* Sequence number */
- private int64_t sequencenum;
-
-
+ int64_t sequencenum;
/* Machine identifier */
- private int64_t machineid;
+ int64_t machineid;
/* Oldest sequence number in range */
- private int64_t oldseqnum;
+ int64_t oldseqnum;
/* Newest sequence number in range */
- private int64_t newseqnum;
+ int64_t newseqnum;
/* Is the machine identifier of the relevant slots equal to (or not
* equal to) the specified machine identifier. */
- private bool equalto;
+ bool equalto;
/* Set of machines that have not received notification. */
- private HashSet<Long> watchset;
-
- RejectedMessage(Slot slot, int64_t _sequencenum, int64_t _machineid, int64_t _oldseqnum, int64_t _newseqnum, bool _equalto) {
- super(slot);
- sequencenum = _sequencenum;
- machineid=_machineid;
- oldseqnum=_oldseqnum;
- newseqnum=_newseqnum;
- equalto=_equalto;
- }
-
- int64_t getOldSeqNum() {
- return oldseqnum;
- }
-
- int64_t getNewSeqNum() {
- return newseqnum;
- }
-
- bool getEqual() {
- return equalto;
- }
-
- int64_t getMachineID() {
- return machineid;
- }
-
-
- int64_t getSequenceNumber() {
- return sequencenum;
- }
-
- static Entry decode(Slot slot, ByteBuffer bb) {
- int64_t sequencenum=bb.getLong();
- int64_t machineid=bb.getLong();
- int64_t oldseqnum=bb.getLong();
- int64_t newseqnum=bb.getLong();
- char equalto=bb.get();
- return new RejectedMessage(slot,sequencenum, machineid, oldseqnum, newseqnum, equalto==1);
- }
-
- void setWatchSet(HashSet<Long> _watchset) {
- watchset=_watchset;
- }
-
- void removeWatcher(int64_t machineid) {
- if (watchset.remove(machineid))
- if (watchset.isEmpty())
- setDead();
- }
-
- void encode(ByteBuffer bb) {
- bb.put(Entry.TypeRejectedMessage);
- bb.putLong(sequencenum);
- bb.putLong(machineid);
- bb.putLong(oldseqnum);
- bb.putLong(newseqnum);
- bb.put(equalto?(char)1:(char)0);
- }
-
- int getSize() {
- return 4*sizeof(int64_t) + 2*sizeof(char);
- }
-
- char getType() {
- return Entry.TypeRejectedMessage;
- }
+ Hashset<int64_t> * watchset;
- Entry getCopy(Slot s) {
+ RejectedMessage(Slot * slot, int64_t _sequencenum, int64_t _machineid, int64_t _oldseqnum, int64_t _newseqnum, bool _equalto) : Entry(slot),
+ sequencenum(_sequencenum),
+ machineid(_machineid),
+ oldseqnum(_oldseqnum),
+ newseqnum(_newseqnum),
+ equalto(_equalto) {
+ }
+
+ int64_t getOldSeqNum() { return oldseqnum; }
+ int64_t getNewSeqNum() { return newseqnum; }
+ bool getEqual() { return equalto; }
+ int64_t getMachineID() { return machineid; }
+ int64_t getSequenceNumber() { return sequencenum; }
+ void setWatchSet(HashSet<int64_t> * _watchset) { watchset=_watchset; }
+ void removeWatcher(int64_t machineid);
+ void encode(ByteBuffer * bb);
+ int getSize() { return 4*sizeof(int64_t) + 2*sizeof(char); }
+ char getType() { return TypeRejectedMessage; }
+ Entry * getCopy(Slot * s) {
return new RejectedMessage(s,sequencenum, machineid, oldseqnum, newseqnum, equalto);
}
-}
+};
+
+Entry * RejectedMessage_decode(Slot * slot, ByteBuffer * bb);
+#ifndef