Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
RealmAcceptor.cpp
Go to the documentation of this file.
1
/*
2
* This file is part of Project SkyFire https://www.projectskyfire.org.
3
* See LICENSE.md file for Copyright information
4
*/
5
6
#include "
AuthSocket.h
"
7
#include "
Log.h
"
8
#include "
Network/BoostAsioUtils.h
"
9
#include "
RealmAcceptor.h
"
10
#include <boost/system/error_code.hpp>
11
#include <memory>
12
13
RealmAcceptor::RealmAcceptor
() :
14
_threadGroup
(),
15
_acceptor
(
_threadGroup
.GetIoContext()),
16
_closed
(true)
17
{
18
}
19
20
RealmAcceptor::~RealmAcceptor
()
21
{
22
Close
();
23
}
24
25
bool
RealmAcceptor::Open
(
uint16
port, std::string
const
& bindIp)
26
{
27
if
(!
Skyfire::Net::OpenTcpAcceptor
(
_threadGroup
.GetIoContext(),
_acceptor
, port, bindIp,
"server.authserver"
,
"auth"
))
28
return
false
;
29
30
_closed
=
false
;
31
AsyncAccept
();
32
33
if
(
_threadGroup
.Start(1) == -1)
34
{
35
Close
();
36
return
false
;
37
}
38
39
return
true
;
40
}
41
42
void
RealmAcceptor::Close
()
43
{
44
bool
expected =
false
;
45
if
(!
_closed
.compare_exchange_strong(expected,
true
))
46
return
;
47
48
Skyfire::Net::CloseTcpAcceptor
(
_acceptor
);
49
_threadGroup
.StopAndJoin();
50
}
51
52
void
RealmAcceptor::Update
()
53
{
54
}
55
56
void
RealmAcceptor::AsyncAccept
()
57
{
58
if
(!
_acceptor
.is_open())
59
return
;
60
61
std::shared_ptr<RealmSocketHandle> clientSocket(
new
RealmSocketHandle
(
_threadGroup
.GetIoContext()));
62
_acceptor
.async_accept(*clientSocket,
63
[
this
, clientSocket](boost::system::error_code
const
& error)
64
{
65
HandleAccept
(clientSocket, error);
66
});
67
}
68
69
void
RealmAcceptor::HandleAccept
(std::shared_ptr<RealmSocketHandle> clientSocket, boost::system::error_code
const
& error)
70
{
71
if
(
_closed
)
72
return
;
73
74
if
(error)
75
{
76
if
(error != boost::asio::error::operation_aborted)
77
SF_LOG_ERROR
(
"server.authserver"
,
"Failed to accept auth socket, error %d"
, error.value());
78
}
79
else
80
{
81
boost::system::error_code endpointError;
82
boost::asio::ip::tcp::endpoint remoteEndpoint = clientSocket->remote_endpoint(endpointError);
83
std::string remoteAddress = endpointError ? std::string(
"<unknown>"
) : remoteEndpoint.address().to_string();
84
uint16
remotePort = endpointError ? 0 : remoteEndpoint.port();
85
86
std::unique_ptr<RealmSocketHandle> socketHandle(
new
RealmSocketHandle
(std::move(*clientSocket)));
87
std::shared_ptr<RealmSocket> socket(
new
RealmSocket
(std::move(socketHandle), remoteAddress, remotePort));
88
socket->set_session(std::unique_ptr<RealmSocket::Session>(
new
AuthSocket
(*socket)));
89
socket->Start();
90
}
91
92
AsyncAccept
();
93
}
AuthSocket.h
BoostAsioUtils.h
uint16
std::uint16_t uint16
Definition
Define.h:78
Log.h
SF_LOG_ERROR
#define SF_LOG_ERROR(filterType__,...)
Definition
Log.h:143
RealmAcceptor.h
RealmSocketHandle
boost::asio::ip::tcp::socket RealmSocketHandle
Definition
RealmSocket.h:20
AuthSocket
Definition
AuthSocket.h:19
RealmAcceptor::HandleAccept
void HandleAccept(std::shared_ptr< RealmSocketHandle > clientSocket, boost::system::error_code const &error)
Definition
RealmAcceptor.cpp:69
RealmAcceptor::Close
void Close()
Definition
RealmAcceptor.cpp:42
RealmAcceptor::_threadGroup
Skyfire::Asio::IoContextThreadGroup _threadGroup
Definition
RealmAcceptor.h:30
RealmAcceptor::RealmAcceptor
RealmAcceptor()
Definition
RealmAcceptor.cpp:13
RealmAcceptor::~RealmAcceptor
~RealmAcceptor()
Definition
RealmAcceptor.cpp:20
RealmAcceptor::Open
bool Open(uint16 port, std::string const &bindIp)
Definition
RealmAcceptor.cpp:25
RealmAcceptor::AsyncAccept
void AsyncAccept()
Definition
RealmAcceptor.cpp:56
RealmAcceptor::_acceptor
boost::asio::ip::tcp::acceptor _acceptor
Definition
RealmAcceptor.h:31
RealmAcceptor::Update
void Update()
Definition
RealmAcceptor.cpp:52
RealmAcceptor::_closed
std::atomic< bool > _closed
Definition
RealmAcceptor.h:32
RealmSocket
Definition
RealmSocket.h:23
Skyfire::Net::CloseTcpAcceptor
void CloseTcpAcceptor(boost::asio::ip::tcp::acceptor &acceptor)
Definition
BoostAsioUtils.h:38
Skyfire::Net::OpenTcpAcceptor
bool OpenTcpAcceptor(boost::asio::io_context &ioContext, boost::asio::ip::tcp::acceptor &acceptor, uint16 port, std::string const &bindAddress, char const *logFilter, char const *logName)
Definition
BoostAsioUtils.cpp:21
src
server
authserver
Server
RealmAcceptor.cpp
Generated on
for Project SkyFire Core by
1.17.0