Skip to content

Commit 977ad27

Browse files
committed
Created common and client Session classes
1 parent e4643e6 commit 977ad27

File tree

15 files changed

+135
-59
lines changed

15 files changed

+135
-59
lines changed

CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall")
66
set(INCLUDE_PATH simple_lib/include)
77

88
# Common static lib
9-
add_library(simple_lib STATIC simple_lib/src/common.cpp)
9+
add_library(simple_lib STATIC simple_lib/src/common.cpp simple_lib/src/Session.cpp)
1010

1111
# Server
1212
project(simple_server)
1313
add_executable(${PROJECT_NAME} server/main.cpp)
1414

15-
target_sources(${PROJECT_NAME} PRIVATE server/Session.cpp server/Session.hpp)
1615
target_sources(${PROJECT_NAME} PRIVATE server/Server.cpp server/Server.hpp)
16+
target_sources(${PROJECT_NAME} PRIVATE server/SessionServer.cpp server/SessionServer.hpp)
1717
target_sources(${PROJECT_NAME} PRIVATE server/SessionTcp.cpp server/SessionTcp.hpp)
1818
target_sources(${PROJECT_NAME} PRIVATE server/SessionUdp.cpp server/SessionUdp.hpp)
1919

@@ -28,6 +28,7 @@ project(simple_client)
2828
add_executable(${PROJECT_NAME} client/main.cpp)
2929

3030
target_sources(${PROJECT_NAME} PRIVATE client/MainConsole.cpp client/MainConsole.hpp)
31+
target_sources(${PROJECT_NAME} PRIVATE client/SessionClient.cpp client/SessionClient.hpp)
3132

3233
target_include_directories(${PROJECT_NAME} PUBLIC ${INCLUDE_PATH})
3334
target_link_libraries(${PROJECT_NAME} simple_lib)

client/SessionClient.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#include "SessionClient.hpp"
2+
3+
#include <sys/socket.h>
4+
#include <sys/epoll.h>
5+
6+
#include <unistd.h>
7+
8+
namespace simpleApp
9+
{
10+
SessionClient::SessionClient(int epollfd) : Session(epollfd)
11+
{
12+
13+
}
14+
15+
SessionClient::~SessionClient()
16+
{
17+
18+
}
19+
}

client/SessionClient.hpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#pragma once
2+
3+
#include <simple_lib/common.h>
4+
#include <simple_lib/Session.hpp>
5+
6+
namespace simpleApp
7+
{
8+
class SessionClient : public Session
9+
{
10+
public:
11+
virtual ~SessionClient();
12+
13+
virtual int init() = 0;
14+
virtual int proceed(int fd) = 0;
15+
16+
protected:
17+
SessionClient(int epollfd);
18+
};
19+
}

server/Server.cpp

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#include "Server.hpp"
2+
13
#include <iostream>
24
#include <set>
35
#include <vector>
@@ -13,8 +15,7 @@
1315

1416
#include <simple_lib/common.h>
1517

16-
#include "Server.hpp"
17-
#include "Session.hpp"
18+
#include "SessionServer.hpp"
1819
#include "SessionUdp.hpp"
1920
#include "SessionTcp.hpp"
2021

@@ -46,7 +47,7 @@ namespace simpleApp
4647
return modeEpoll(epollfd, EPOLL_CTL_DEL, fd, 0, 0);
4748
}
4849

49-
inline socket_t createTcpSocket(uint16_t port, int& err)
50+
inline socket_t createTcpSocket(int& err)
5051
{
5152
socket_t newSocket = socket(AF_INET, SOCK_STREAM, 0);
5253
if (newSocket == -1)
@@ -72,7 +73,7 @@ namespace simpleApp
7273
sockaddr_in serverTcpAddress;
7374
bzero(&serverTcpAddress, sizeof(serverTcpAddress));
7475
serverTcpAddress.sin_addr.s_addr = htonl(INADDR_ANY);
75-
serverTcpAddress.sin_port = htons(port);
76+
serverTcpAddress.sin_port = htons(PUBLIC_PORT);
7677
serverTcpAddress.sin_family = AF_INET;
7778

7879
if (bind(newSocket, (sockaddr *)&serverTcpAddress, sizeof(serverTcpAddress)) == -1)
@@ -94,7 +95,7 @@ namespace simpleApp
9495
return newSocket;
9596
}
9697

97-
inline socket_t createUdpSocket(uint16_t& port, int& err)
98+
inline socket_t createUdpSocket(int& err)
9899
{
99100
socket_t newSocket = socket(AF_INET, SOCK_DGRAM, 0);
100101

@@ -121,7 +122,7 @@ namespace simpleApp
121122
sockaddr_in serverUdpAddress;
122123
bzero(&serverUdpAddress, sizeof(serverUdpAddress));
123124
serverUdpAddress.sin_addr.s_addr = htonl(INADDR_ANY);
124-
serverUdpAddress.sin_port = htons(port);
125+
serverUdpAddress.sin_port = htons(PUBLIC_PORT);
125126
serverUdpAddress.sin_family = AF_INET;
126127

127128
if (bind(newSocket, (sockaddr *)&serverUdpAddress, sizeof(serverUdpAddress)) == -1)
@@ -146,7 +147,7 @@ namespace simpleApp
146147
close(this->stopEventFd);
147148
}
148149

149-
int Server::serverLoop(uint16_t port)
150+
int Server::serverLoop()
150151
{
151152
if(this->stopEventFd == -1)
152153
{
@@ -157,12 +158,12 @@ namespace simpleApp
157158
std::cout << "Starting server" << std::endl << std::flush;
158159

159160
int err;
160-
socket_t masterTcpSocket = createTcpSocket(port, err);
161+
socket_t masterTcpSocket = createTcpSocket(err);
161162

162163
if (masterTcpSocket == -1)
163164
std::cout << "TCP master socket initialization failed with code " << err << std::endl << std::flush;
164165

165-
socket_t masterUdpSocket = createUdpSocket(port, err);
166+
socket_t masterUdpSocket = createUdpSocket(err);
166167

167168
if (masterUdpSocket == -1)
168169
std::cout << "UDP master socket initialization failed with code " << err << std::endl << std::flush;
@@ -224,24 +225,24 @@ namespace simpleApp
224225
const size_t MAX_EVENTS_BUFFER = 10000;
225226
epoll_event * events = static_cast<epoll_event *>(calloc(MAX_EVENTS_BUFFER, sizeof(epoll_event)));
226227

227-
std::set<Session*> slaveSocketsMap = std::set<Session *>();
228+
std::set<SessionServer*> slaveSocketsMap = std::set<SessionServer *>();
228229

229230
bool stopEventHappened = false;
230231

231-
auto initSession = [&slaveSocketsMap, &masterTcpSocket, &masterUdpSocket, &epollfd, port](epoll_event& event)
232+
auto initSession = [&slaveSocketsMap, &masterTcpSocket, &masterUdpSocket, &epollfd](epoll_event& event)
232233
{
233-
Session* clientSession;
234+
SessionServer* clientSession;
234235
session_result result;
235236

236237
if (event.data.ptr == &masterTcpSocket)
237238
{
238239
clientSession = new SessionTcp(epollfd);
239-
result = clientSession->init(masterTcpSocket, port);
240+
result = clientSession->init(masterTcpSocket);
240241
}
241242
else if (event.data.ptr == &masterUdpSocket)
242243
{
243244
clientSession = new SessionUdp(epollfd);
244-
result = clientSession->init(masterUdpSocket, port);
245+
result = clientSession->init(masterUdpSocket);
245246
}
246247
else
247248
return false;
@@ -310,7 +311,7 @@ namespace simpleApp
310311
};
311312
while (!stopEventHappened)
312313
{
313-
std::set<Session*> slavesForRemove = std::set<Session*>();
314+
std::set<SessionServer*> slavesForRemove = std::set<SessionServer*>();
314315
int N = epoll_wait(epollfd, events, MAX_EVENTS_BUFFER, -1);
315316
for (size_t i = 0; static_cast<int>(i) < N; i++)
316317
{
@@ -344,7 +345,7 @@ namespace simpleApp
344345
}
345346
else
346347
{
347-
auto clientSession = reinterpret_cast<Session*>(events[i].data.ptr);
348+
auto clientSession = reinterpret_cast<SessionServer*>(events[i].data.ptr);
348349
if(slaveSocketsMap.find(clientSession) == slaveSocketsMap.end())
349350
{
350351
std::cout << "Unknown event happened" << std::endl;

server/Server.hpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
#pragma once
22

3-
#include <stdint.h>
4-
53
namespace simpleApp
64
{
75
class Server
@@ -10,7 +8,7 @@ namespace simpleApp
108
Server();
119
~Server();
1210

13-
int serverLoop(uint16_t port);
11+
int serverLoop();
1412

1513
int initStop();
1614

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#include "Session.hpp"
1+
#include "SessionServer.hpp"
22

33
#include <sys/socket.h>
44
#include <sys/epoll.h>
@@ -7,32 +7,21 @@
77

88
namespace simpleApp
99
{
10-
Session::Session(int epollfd, std::string name) : epollfd(epollfd), _name(name)
10+
SessionServer::SessionServer(int epollfd, std::string name) : Session(epollfd), _name(name)
1111
{
1212

1313
}
1414

15-
Session::~Session()
15+
SessionServer::~SessionServer()
1616
{
17-
this->sessionClose();
17+
1818
}
1919

20-
std::string Session::getName()
20+
std::string SessionServer::getName()
2121
{
2222
return this->_name;
2323
}
2424

25-
void Session::sessionClose()
26-
{
27-
if (this->_socket != -1)
28-
{
29-
epoll_ctl(this->epollfd, EPOLL_CTL_DEL, this->_socket, 0);
30-
shutdown(this->_socket, SHUT_RDWR);
31-
close(this->_socket);
32-
this->_socket = -1;
33-
}
34-
}
35-
3625
std::string addressToString(sockaddr_in& address)
3726
{
3827
auto portConverted = ntohs(address.sin_port);
Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,26 @@
77

88

99
#include <simple_lib/common.h>
10+
#include <simple_lib/Session.hpp>
1011

1112
#include "session_result.h"
1213

1314
namespace simpleApp
1415
{
15-
class Session
16+
class SessionServer : public Session
1617
{
1718
public:
18-
virtual ~Session();
19+
virtual ~SessionServer();
1920

20-
virtual session_result init(socket_t masterSocket, uint16_t port) = 0;
21+
virtual session_result init(socket_t masterSocket) = 0;
2122
virtual session_result proceed() = 0;
2223

2324
std::string getName();
2425

2526
protected:
26-
socket_t _socket = -1;
27-
int epollfd;
2827
std::string _name;
2928

30-
Session(int epollfd, std::string name = "");
31-
32-
void sessionClose();
29+
SessionServer(int epollfd, std::string name = "");
3330
};
3431

3532
std::string addressToString(sockaddr_in& address);

server/SessionTcp.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
namespace simpleApp
1414
{
15-
SessionTcp::SessionTcp(int epollfd) : Session(epollfd, std::string("TCP"))
15+
SessionTcp::SessionTcp(int epollfd) : SessionServer(epollfd, std::string("TCP"))
1616
{
1717

1818
}
@@ -22,7 +22,7 @@ namespace simpleApp
2222

2323
}
2424

25-
session_result SessionTcp::init(socket_t masterSocket, uint16_t port)
25+
session_result SessionTcp::init(socket_t masterSocket)
2626
{
2727
sockaddr_in address;
2828
socklen_t len = static_cast<socklen_t>(sizeof(sockaddr_in));

server/SessionTcp.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@
22

33
#include <simple_lib/common.h>
44

5-
#include "Session.hpp"
5+
#include "SessionServer.hpp"
66
#include "session_result.h"
77

88
namespace simpleApp
99
{
10-
class SessionTcp : public Session
10+
class SessionTcp : public SessionServer
1111
{
1212
public:
1313
SessionTcp(int epollfd);
1414
~SessionTcp();
1515

16-
session_result init(socket_t masterSocket, uint16_t port) override;
16+
session_result init(socket_t masterSocket) override;
1717

1818
session_result proceed() override;
1919
};

server/SessionUdp.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
namespace simpleApp
1616
{
17-
SessionUdp::SessionUdp(int epollfd) : Session(epollfd, std::string("UDP"))
17+
SessionUdp::SessionUdp(int epollfd) : SessionServer(epollfd, std::string("UDP"))
1818
{
1919

2020
}
@@ -41,7 +41,7 @@ namespace simpleApp
4141
}
4242
}
4343

44-
session_result SessionUdp::init(socket_t masterSocket, uint16_t port)
44+
session_result SessionUdp::init(socket_t masterSocket)
4545
{
4646
const size_t buffCheckLength = sizeof(msg_headers) + 1;
4747
uint8_t msgBuff[buffCheckLength];
@@ -63,7 +63,7 @@ namespace simpleApp
6363
if (*(reinterpret_cast<msg_headers *>(msgBuff)) != msg_headers::client_connup)
6464
return session_result(session_status::init_udp_wrong_header);
6565

66-
auto initSocket = [this, port, &address]()
66+
auto initSocket = [this, &address]()
6767
{
6868
this->timerfd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK);
6969

@@ -125,7 +125,7 @@ namespace simpleApp
125125
sockaddr_in socketBindAddress;
126126
bzero(&socketBindAddress, sizeof(socketBindAddress));
127127
socketBindAddress.sin_addr.s_addr = htonl(INADDR_ANY);
128-
socketBindAddress.sin_port = htons(port);
128+
socketBindAddress.sin_port = htons(PUBLIC_PORT);
129129
socketBindAddress.sin_family = AF_INET;
130130

131131
if (bind(this->_socket, (sockaddr *)&socketBindAddress, sizeof(socketBindAddress)) == -1)

0 commit comments

Comments
 (0)