1 // 2 // Copyright (C) 2001-2013 Graeme Walker <graeme_walker@users.sourceforge.net> 3 // 4 // This program is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // This program is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with this program. If not, see <http://www.gnu.org/licenses/>. 16 // === 17 /// 18 /// \file gbufferedserverpeer.h 19 /// 20 21 #ifndef G_BUFFERED_SERVER_PEER_H 22 #define G_BUFFERED_SERVER_PEER_H 23 24 #include "gdef.h" 25 #include "gnet.h" 26 #include "gserver.h" 27 #include "gsocketprotocol.h" 28 #include "glinebuffer.h" 29 #include "gexception.h" 30 #include <string> 31 32 /// \namespace GNet 33 namespace GNet 34 { 35 class BufferedServerPeer ; 36 } 37 38 /// \class GNet::BufferedServerPeer 39 /// A ServerPeer that does line-buffering on input. 40 /// 41 class GNet::BufferedServerPeer : public GNet::ServerPeer 42 { 43 public: 44 BufferedServerPeer( Server::PeerInfo , const std::string & eol ) ; 45 ///< Constructor. 46 47 virtual ~BufferedServerPeer() ; 48 ///< Destructor. 49 50 protected: 51 virtual bool onReceive( const std::string & ) = 0 ; 52 ///< Called when a complete line is received from the peer. 53 ///< Returns false if no more lines should be delivered. 54 55 virtual void onData( const char * , ServerPeer::size_type ) ; 56 ///< Final override from GNet::SocketProtocolSink. 57 58 private: 59 BufferedServerPeer( const BufferedServerPeer & ) ; 60 void operator=( const BufferedServerPeer & ) ; 61 62 private: 63 LineBuffer m_line_buffer ; 64 } ; 65 66 #endif 67