X-Git-Url: http://plrg.eecs.uci.edu/git/?p=iotcloud.git;a=blobdiff_plain;f=version2%2Fsrc%2FC%2FRejectedMessage.h;h=f33e40f8a99d1e6b353a249adb5eb3492214ebba;hp=bf2c2c4115723051834f7b44ad3d7348270fe411;hb=6df0a17aec2ab1923dfb5c3e4dc05262c68f3f54;hpb=b47765b628c0c160dd13622f8e241c377b8ce3cb diff --git a/version2/src/C/RejectedMessage.h b/version2/src/C/RejectedMessage.h index bf2c2c4..f33e40f 100644 --- a/version2/src/C/RejectedMessage.h +++ b/version2/src/C/RejectedMessage.h @@ -1,4 +1,5 @@ - +#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 @@ -6,92 +7,47 @@ * @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 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 _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 * 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 * _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