-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathgalapagos_net_tcp_accept_server.hpp
More file actions
123 lines (103 loc) · 3.82 KB
/
galapagos_net_tcp_accept_server.hpp
File metadata and controls
123 lines (103 loc) · 3.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
//===============================
// AUTHOR : Naif Tarafdar
// CREATE DATE : April 20, 2019
//===============================
#ifndef __GALAPAGOS_NET_TCP_ACCEPT_SERVER_HPP__ // if x.h hasn't been included yet...
#define __GALAPAGOS_NET_TCP_ACCEPT_SERVER_HPP
#include <cstdlib>
#include <iostream>
#include <thread>
#include <memory>
#include <utility>
#include <boost/asio.hpp>
#include "galapagos_n_to_one_router.hpp"
#include "galapagos_net_tcp_session.hpp"
#if LOG_LEVEL > 0
#include "galapagos_packet.h"
#include "spdlog/spdlog.h"
#include "spdlog/sinks/basic_file_sink.h"
#endif
namespace galapagos{
namespace net{
template<class T>
class tcp_accept_server{
public:
#if LOG_LEVEL > 0
tcp_accept_server(boost::asio::io_context * io_context,
std::string my_address,
short port,
tcp_session_container <T> * _sessions,
std::shared_ptr <spdlog::logger> _logger
);
#endif
tcp_accept_server(boost::asio::io_context * io_context,
std::string my_address,
short port,
tcp_session_container <T> * _sessions
);
void prepare(boost::asio::io_context * io_context,
std::string my_address,
short port,
tcp_session_container <T> * _sessions
);
~tcp_accept_server(){
}
private:
#if LOG_LEVEL > 0
std::shared_ptr <spdlog::logger> logger;
#endif
void accept();
boost::asio::ip::tcp::acceptor acceptor_;
tcp_session_container <T> * sessions;
boost::asio::io_context * _io_context;
};
}//net namespace
}//galapagos namespace
using namespace galapagos::net;
template<class T>
void tcp_accept_server<T>::prepare(boost::asio::io_context *io_context,
std::string my_address,
short port,
tcp_session_container<T> * _sessions
)
{
_io_context = io_context;
sessions = _sessions;
std::thread t_accept(&tcp_accept_server<T>::accept,this);
t_accept.detach();
}
template<class T>
tcp_accept_server<T>::tcp_accept_server(boost::asio::io_context *io_context,
std::string my_address,
short port,
tcp_session_container<T> * _sessions
// std::shared_ptr <spdlog::logger> _logger
)
: acceptor_(*io_context, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port))
{
prepare(io_context, my_address, port, _sessions);
}
#if LOG_LEVEL > 0
template<class T>
tcp_accept_server<T>::tcp_accept_server(boost::asio::io_context *io_context,
std::string my_address,
short port,
tcp_session_container<T> * _sessions,
std::shared_ptr <spdlog::logger> _logger
)
: acceptor_(*io_context, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port))
{
logger = _logger;
prepare(io_context, my_address, port, _sessions);
}
#endif
template<class T>
void tcp_accept_server<T>::accept(){
for(;;)
{
boost::asio::ip::tcp::socket socket(*_io_context);
acceptor_.accept(socket);
sessions->add_session(std::move(socket), _io_context);
}
}
#endif