TcpConnection.h revision 2a18e699
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_TCPCONNECTION_H 9#define MUDUO_NET_TCPCONNECTION_H 10 11#include "Buffer.h" 12#include "Callbacks.h" 13#include "InetAddress.h" 14 15#include <boost/any.hpp> 16#include <boost/enable_shared_from_this.hpp> 17#include <boost/noncopyable.hpp> 18#include <boost/scoped_ptr.hpp> 19#include <boost/shared_ptr.hpp> 20 21namespace muduo 22{ 23 24class Channel; 25class EventLoop; 26class Socket; 27 28/// 29/// TCP connection, for both client and server usage. 30/// 31class TcpConnection : boost::noncopyable, 32 public boost::enable_shared_from_this<TcpConnection> 33{ 34 public: 35 /// Constructs a TcpConnection with a connected sockfd 36 /// 37 /// User should not create this object. 38 TcpConnection(EventLoop* loop, 39 const std::string& name, 40 int sockfd, 41 const InetAddress& localAddr, 42 const InetAddress& peerAddr); 43 ~TcpConnection(); 44 45 EventLoop* getLoop() const { return loop_; } 46 const std::string& name() const { return name_; } 47 const InetAddress& localAddress() { return localAddr_; } 48 const InetAddress& peerAddress() { return peerAddr_; } 49 bool connected() const { return state_ == kConnected; } 50 51 void setConnectionCallback(const ConnectionCallback& cb) 52 { connectionCallback_ = cb; } 53 54 void setMessageCallback(const MessageCallback& cb) 55 { messageCallback_ = cb; } 56 57 /// Internal use only. 58 void setCloseCallback(const CloseCallback& cb) 59 { closeCallback_ = cb; } 60 61 // called when TcpServer accepts a new connection 62 void connectEstablished(); // should be called only once 63 // called when TcpServer has removed me from its map 64 void connectDestroyed(); // should be called only once 65 66 private: 67 enum StateE { kConnecting, kConnected, kDisconnected, }; 68 69 void setState(StateE s) { state_ = s; } 70 void handleRead(Timestamp receiveTime); 71 void handleWrite(); 72 void handleClose(); 73 void handleError(); 74 75 EventLoop* loop_; 76 std::string name_; 77 StateE state_; // FIXME: use atomic variable 78 // we don't expose those classes to client. 79 boost::scoped_ptr<Socket> socket_; 80 boost::scoped_ptr<Channel> channel_; 81 InetAddress localAddr_; 82 InetAddress peerAddr_; 83 ConnectionCallback connectionCallback_; 84 MessageCallback messageCallback_; 85 CloseCallback closeCallback_; 86 Buffer inputBuffer_; 87}; 88 89typedef boost::shared_ptr<TcpConnection> TcpConnectionPtr; 90 91} 92 93#endif // MUDUO_NET_TCPCONNECTION_H 94