1 // excerpts from http://code.google.com/p/muduo/ 2 // 3 // Use of this source code is governed by a BSD-style license 4 // that can be found in the License file. 5 // 6 // Author: Shuo Chen (chenshuo at chenshuo dot com) 7 8 #ifndef MUDUO_NET_CHANNEL_H 9 #define MUDUO_NET_CHANNEL_H 10 11 #include <boost/function.hpp> 12 #include <boost/noncopyable.hpp> 13 14+#include <datetime/Timestamp.h> 15+ 16 namespace muduo 17 { 18 19 class EventLoop; 20 21 /// 22 /// A selectable I/O channel. 23 /// 24 /// This class doesn't own the file descriptor. 25 /// The file descriptor could be a socket, 26 /// an eventfd, a timerfd, or a signalfd 27 class Channel : boost::noncopyable 28 { 29 public: 30 typedef boost::function<void()> EventCallback; 31+ typedef boost::function<void(Timestamp)> ReadEventCallback; 32 33 Channel(EventLoop* loop, int fd); 34 ~Channel(); 35 36! void handleEvent(Timestamp receiveTime); 37! void setReadCallback(const ReadEventCallback& cb) 38 { readCallback_ = cb; } 39 void setWriteCallback(const EventCallback& cb) 40 { writeCallback_ = cb; } 41 void setErrorCallback(const EventCallback& cb) 42 { errorCallback_ = cb; } 43 void setCloseCallback(const EventCallback& cb) 44 { closeCallback_ = cb; } 45 46 int fd() const { return fd_; } 47 int events() const { return events_; } 48 void set_revents(int revt) { revents_ = revt; } 49 bool isNoneEvent() const { return events_ == kNoneEvent; } 50 51 void enableReading() { events_ |= kReadEvent; update(); } 52 // void enableWriting() { events_ |= kWriteEvent; update(); } 53 // void disableWriting() { events_ &= ~kWriteEvent; update(); } 54 void disableAll() { events_ = kNoneEvent; update(); } 55 56 // for Poller 57 int index() { return index_; } 58 void set_index(int idx) { index_ = idx; } 59 60 EventLoop* ownerLoop() { return loop_; } 61 62 private: 63 void update(); 64 65 static const int kNoneEvent; 66 static const int kReadEvent; 67 static const int kWriteEvent; 68 69 EventLoop* loop_; 70 const int fd_; 71 int events_; 72 int revents_; 73 int index_; // used by Poller. 74 75 bool eventHandling_; 76 77! ReadEventCallback readCallback_; 78 EventCallback writeCallback_; 79 EventCallback errorCallback_; 80 EventCallback closeCallback_; 81 }; 82 83 } 84 #endif // MUDUO_NET_CHANNEL_H 85