mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-25 14:07:46 +00:00
82 lines
2.3 KiB
C++
82 lines
2.3 KiB
C++
#ifndef ACCEPTOR_H_
|
|
#define ACCEPTOR_H_
|
|
|
|
#include <boost/asio.hpp>
|
|
#include <boost/date_time/posix_time/posix_time.hpp>
|
|
#include <boost/enable_shared_from_this.hpp>
|
|
#include <boost/shared_ptr.hpp>
|
|
#include "Forwards.h"
|
|
|
|
namespace Core {
|
|
namespace Network {
|
|
|
|
class Connection;
|
|
|
|
class Acceptor :
|
|
public boost::enable_shared_from_this< Acceptor >
|
|
{
|
|
friend class Hive;
|
|
|
|
private:
|
|
HivePtr m_hive;
|
|
boost::asio::ip::tcp::acceptor m_acceptor;
|
|
boost::asio::strand m_io_strand;
|
|
volatile uint32_t m_error_state;
|
|
|
|
private:
|
|
Acceptor( const Acceptor& rhs );
|
|
|
|
Acceptor& operator=( const Acceptor& rhs );
|
|
|
|
void StartError( const boost::system::error_code& error );
|
|
|
|
void DispatchAccept( ConnectionPtr connection );
|
|
|
|
void HandleAccept( const boost::system::error_code& error, ConnectionPtr connection );
|
|
|
|
private:
|
|
// Called when a connection has connected to the server. This function
|
|
// should return true to invoke the connection's OnAccept function if the
|
|
// connection will be kept. If the connection will not be kept, the
|
|
// connection's Disconnect function should be called and the function
|
|
// should return false.
|
|
virtual bool OnAccept( ConnectionPtr connection, const std::string& host, uint16_t port );
|
|
|
|
// Called when an error is encountered. Most typically, this is when the
|
|
// acceptor is being closed via the Stop function or if the Listen is
|
|
// called on an address that is not available.
|
|
virtual void OnError( const boost::system::error_code& error );
|
|
|
|
public:
|
|
Acceptor( HivePtr hive );
|
|
|
|
virtual ~Acceptor();
|
|
|
|
// Returns the Hive object.
|
|
HivePtr GetHive();
|
|
|
|
// Returns the acceptor object.
|
|
boost::asio::ip::tcp::acceptor& GetAcceptor();
|
|
|
|
// Returns the strand object.
|
|
boost::asio::strand& GetStrand();
|
|
|
|
// Returns true if this object has an error associated with it.
|
|
bool HasError();
|
|
|
|
public:
|
|
// Begin listening on the specific network interface.
|
|
void Listen( const std::string& host, const uint16_t& port );
|
|
|
|
// Posts the connection to the listening interface. The next client that
|
|
// connections will be given this connection. If multiple calls to Accept
|
|
// are called at a time, then they are accepted in a FIFO order.
|
|
void Accept( ConnectionPtr connection );
|
|
|
|
// Stop the Acceptor from listening.
|
|
void Stop();
|
|
};
|
|
|
|
}
|
|
}
|
|
#endif
|