#ifndef ASYNCSTAGE_H_ #define ASYNCSTAGE_H_ #include "FdSet.h" #include #include #include #include #include "GenericStage.h" #include "EventInfo.h" namespace p2p { //class TimerRequestEvent; //class NetworkRequestEvent; class AsyncStage: public p2p::GenericStage { public: AsyncStage(); virtual ~AsyncStage(); int enqueueEvent(std::auto_ptr ); int handleEvent(std::auto_ptr ); void run(); private: class TimerHandlerInfo { public: TimerHandlerInfo(); TimerHandlerInfo(timeval, TimerRequestEvent *); ~TimerHandlerInfo(); TimerRequestEvent * mEventInfo; timeval mRequestedTime; TimerHandlerInfo &operator= (const TimerHandlerInfo &); bool operator== (const TimerHandlerInfo &) const; bool operator< (const TimerHandlerInfo &) const; }; class NetworkHandlerInfo { public: NetworkHandlerInfo(); ~NetworkHandlerInfo(); NetworkRequestEvent * mEventInfo; }; class FdHandlerInfo { public: FdHandlerInfo(); ~FdHandlerInfo(); FdRequestEvent * mEventInfo; }; struct NetworkHandlers{ std::vector readHandlers; std::vector writeHandlers; }; void handleFdRequest(FdRequestEvent *); void handleTimerRequest(TimerRequestEvent *); void handleNetworkRequest(NetworkRequestEvent *); int fireNetworkHandlers(std::vector &); void clearNetworkHandlers(std::vector &, std::vector &); int processTimerHandlers(); int processFdHandlers(int); int processNetworkHandlers(Socket); FdSet * mFdSet; std::priority_queue timerHandlers; std::map networkHandlerInfoMap; std::map fdHandlerInfoMap; }; } #endif /*ASYNCSTAGE_H_*/