#ifndef MKREQUEST_H #define MKREQUEST_H #define MKREQUEST_CACHE_SIZE 256 #define MKREQUEST_TIMEOUT 750000 #include #include "include/bson/bson.h" #include "MKNode.h" class MKRequest { public: friend class MKCommModelTests; enum { kLatency, kTraceRoute }; MKNode *from, *to; ~MKRequest(); int id() { return requestID; } void send(); int type() { return requestType; } /** * @pre nodes not null */ static MKRequest *latency(MKNode *from, MKNode *to); static MKRequest *route(MKNode *from, MKNode *to); static MKRequest *cache(int id); static void reset(); private: int requestID; mongo::BSONObj *bData; int requestType; timeval time; bool sent; static unsigned char lastID; static MKRequest *reqCache[MKREQUEST_CACHE_SIZE]; static MKRequest *lastLatency, *lastTraceRoute; MKRequest(int reqType, mongo::BSONObj *data, MKNode *from, MKNode *to); }; #endif