00001 #ifndef DEVICE_H 00002 #define DEVICE_H 00003 00004 #include "MessageList.h" 00005 #include <iostream> 00006 #include <queue> 00007 #include "Utility.h" 00008 namespace rwil { 00009 namespace ExecuteReturns{ 00011 enum Returns { PleaseRetry = 0, DontRetry }; 00012 } 00013 00015 00019 class Device 00020 { 00021 public: 00023 00027 Device(const std::string &name, MessageList& output); 00028 00029 virtual ~Device(); 00030 00032 00035 virtual std::string GetStatus() const = 0; 00036 00038 00041 const std::string &GetName() const; 00042 00044 00047 void AddToQueue(const Message &msg); 00048 00049 00051 00054 virtual bool Tick(); 00055 00056 protected: 00058 MessageList &m_output; 00059 00061 00068 virtual ExecuteReturns::Returns ExecuteMessage(const Message & msg) = 0; 00069 00070 private: 00072 const std::string m_name; 00074 std::queue<Message> m_queue; 00076 unsigned m_retries; 00078 unsigned m_currentRetry; 00079 }; 00080 } 00081 #endif