Skip to content

Commit e4643e6

Browse files
committed
Renamed session classes in server. Implemented client base.
1 parent ea4ba19 commit e4643e6

File tree

14 files changed

+171
-108
lines changed

14 files changed

+171
-108
lines changed

.gitignore

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,2 @@
1-
# Temporary ignored while not complited
2-
client/
3-
CMakeList.txt
4-
makefile
5-
simple_lib/include/simple_lib/message.cpp
6-
7-
# C++ build files and directories
1+
## C++ build files and directories
82
build/
9-
*.o

CMakeLists.txt

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

88
# Common static lib
9-
project(simple_lib)
10-
add_library(${PROJECT_NAME} STATIC simple_lib/src/common.cpp)
9+
add_library(simple_lib STATIC simple_lib/src/common.cpp)
1110

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

15-
target_sources(${PROJECT_NAME} PRIVATE server/ClientSession.cpp server/ClientSession.hpp)
15+
target_sources(${PROJECT_NAME} PRIVATE server/Session.cpp server/Session.hpp)
1616
target_sources(${PROJECT_NAME} PRIVATE server/Server.cpp server/Server.hpp)
17-
target_sources(${PROJECT_NAME} PRIVATE server/TcpSession.cpp server/TcpSession.hpp)
18-
target_sources(${PROJECT_NAME} PRIVATE server/UdpSession.cpp server/UdpSession.hpp)
17+
target_sources(${PROJECT_NAME} PRIVATE server/SessionTcp.cpp server/SessionTcp.hpp)
18+
target_sources(${PROJECT_NAME} PRIVATE server/SessionUdp.cpp server/SessionUdp.hpp)
1919

2020
target_sources(${PROJECT_NAME} PRIVATE server/message.cpp server/message.h)
2121
target_sources(${PROJECT_NAME} PRIVATE server/session_result.h)
2222

2323
target_include_directories(${PROJECT_NAME} PUBLIC ${INCLUDE_PATH})
2424
target_link_libraries(${PROJECT_NAME} simple_lib)
2525

26-
include(CTest)
27-
enable_testing()
26+
# client
27+
project(simple_client)
28+
add_executable(${PROJECT_NAME} client/main.cpp)
2829

29-
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
30-
include(CPack)
30+
target_sources(${PROJECT_NAME} PRIVATE client/MainConsole.cpp client/MainConsole.hpp)
31+
32+
target_include_directories(${PROJECT_NAME} PUBLIC ${INCLUDE_PATH})
33+
target_link_libraries(${PROJECT_NAME} simple_lib)

client/MainConsole.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#include "MainConsole.hpp"
2+
3+
#include <sys/eventfd.h>
4+
5+
#include <errno.h>
6+
#include <unistd.h>
7+
8+
namespace simpleApp
9+
{
10+
MainConsole::MainConsole()
11+
{
12+
13+
}
14+
15+
MainConsole::~MainConsole()
16+
{
17+
if (this->breakEventFd != -1)
18+
close(this->breakEventFd);
19+
}
20+
21+
int MainConsole::initBreak()
22+
{
23+
if (this->breakEventFd != -1)
24+
close(this->breakEventFd);
25+
26+
this->breakEventFd = eventfd(0, EFD_NONBLOCK);
27+
28+
return this->breakEventFd == -1 ? errno : 0;
29+
}
30+
31+
int MainConsole::raiseBreak()
32+
{
33+
if (this->breakEventFd != -1)
34+
{
35+
if (eventfd_write(this->breakEventFd, static_cast<eventfd_t>(1)) == -1)
36+
return errno;
37+
}
38+
39+
return 0;
40+
}
41+
42+
int MainConsole::consoleLoop()
43+
{
44+
return 0;
45+
}
46+
}

client/MainConsole.hpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#pragma once
2+
3+
namespace simpleApp
4+
{
5+
class MainConsole
6+
{
7+
public:
8+
MainConsole();
9+
~MainConsole();
10+
11+
int initBreak();
12+
int raiseBreak();
13+
int consoleLoop();
14+
private:
15+
int breakEventFd = -1;
16+
};
17+
}

client/main.cpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#include <iostream>
2+
3+
#include <signal.h>
4+
5+
#include "MainConsole.hpp"
6+
7+
simpleApp::MainConsole console = simpleApp::MainConsole();
8+
9+
void onBreak(int s)
10+
{
11+
int err = console.raiseBreak();
12+
13+
if(err != 0)
14+
std::cout << "Break event trigger failed with code " << err << std::endl;
15+
}
16+
17+
int main(int argc, char** argv)
18+
{
19+
std::cout << "Welcome to the Simple Client! For exit press Ctrl+C" << std::endl;
20+
21+
int err = console.initBreak();
22+
if (err != 0)
23+
{
24+
std::cout << "Break event initialization failed with code " << err << std::endl;
25+
return -1;
26+
}
27+
28+
struct sigaction sigIntHandler;
29+
30+
sigIntHandler.sa_handler = onBreak;
31+
sigemptyset(&sigIntHandler.sa_mask);
32+
sigIntHandler.sa_flags = 0;
33+
34+
if(sigaction(SIGINT, &sigIntHandler, NULL) == -1)
35+
{
36+
std::cout << "Break event configuration failed with code " << errno << std::endl;
37+
return -1;
38+
}
39+
40+
return console.consoleLoop();
41+
}

server/Server.cpp

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,21 @@
22
#include <set>
33
#include <vector>
44

5-
#if defined(__linux__)
65
#include <sys/socket.h>
76
#include <sys/types.h>
87
#include <netinet/in.h>
98
#include <sys/epoll.h>
109
#include <sys/eventfd.h>
1110
#include <strings.h>
1211

13-
#else
14-
#error System is not supported
15-
16-
#endif
17-
1812
#include <unistd.h>
1913

2014
#include <simple_lib/common.h>
2115

2216
#include "Server.hpp"
23-
#include "ClientSession.hpp"
24-
#include "UdpSession.hpp"
25-
#include "TcpSession.hpp"
17+
#include "Session.hpp"
18+
#include "SessionUdp.hpp"
19+
#include "SessionTcp.hpp"
2620

2721
namespace simpleApp
2822
{
@@ -148,13 +142,13 @@ namespace simpleApp
148142

149143
Server::~Server()
150144
{
151-
if (this->stopObject != -1)
152-
close(this->stopObject);
145+
if (this->stopEventFd != -1)
146+
close(this->stopEventFd);
153147
}
154148

155149
int Server::serverLoop(uint16_t port)
156150
{
157-
if(this->stopObject == -1)
151+
if(this->stopEventFd == -1)
158152
{
159153
std::cout << "Stop event object is not initialized" << std::endl << std::flush;
160154
return -1;
@@ -187,7 +181,7 @@ namespace simpleApp
187181
std::cout << "EPoll creation failed with code " << errno << std::endl << std::flush;
188182
isFailed = true;
189183
}
190-
else if(addToEPoll(epollfd, this->stopObject, &this->stopObject, EPOLLIN) == -1)
184+
else if(addToEPoll(epollfd, this->stopEventFd, &this->stopEventFd, EPOLLIN) == -1)
191185
{
192186
std::cout << "EPOLL_CTL_ADD of stop event object failed with code " << errno << std::endl << std::flush;
193187
isFailed = true;
@@ -230,23 +224,23 @@ namespace simpleApp
230224
const size_t MAX_EVENTS_BUFFER = 10000;
231225
epoll_event * events = static_cast<epoll_event *>(calloc(MAX_EVENTS_BUFFER, sizeof(epoll_event)));
232226

233-
std::set<ClientSession*> slaveSocketsMap = std::set<ClientSession *>();
227+
std::set<Session*> slaveSocketsMap = std::set<Session *>();
234228

235229
bool stopEventHappened = false;
236230

237231
auto initSession = [&slaveSocketsMap, &masterTcpSocket, &masterUdpSocket, &epollfd, port](epoll_event& event)
238232
{
239-
ClientSession* clientSession;
233+
Session* clientSession;
240234
session_result result;
241235

242236
if (event.data.ptr == &masterTcpSocket)
243237
{
244-
clientSession = new TcpSession(epollfd);
238+
clientSession = new SessionTcp(epollfd);
245239
result = clientSession->init(masterTcpSocket, port);
246240
}
247241
else if (event.data.ptr == &masterUdpSocket)
248242
{
249-
clientSession = new UdpSession(epollfd);
243+
clientSession = new SessionUdp(epollfd);
250244
result = clientSession->init(masterUdpSocket, port);
251245
}
252246
else
@@ -316,17 +310,17 @@ namespace simpleApp
316310
};
317311
while (!stopEventHappened)
318312
{
319-
std::set<ClientSession*> slavesForRemove = std::set<ClientSession*>();
313+
std::set<Session*> slavesForRemove = std::set<Session*>();
320314
int N = epoll_wait(epollfd, events, MAX_EVENTS_BUFFER, -1);
321315
for (size_t i = 0; static_cast<int>(i) < N; i++)
322316
{
323-
if (events[i].data.ptr == &this->stopObject)
317+
if (events[i].data.ptr == &this->stopEventFd)
324318
{
325319
eventfd_t decrement = 1;
326320

327321
std::string msg = "Stop event happened";
328322

329-
if (eventfd_read(this->stopObject, static_cast<eventfd_t *>(&decrement)) == -1)
323+
if (eventfd_read(this->stopEventFd, static_cast<eventfd_t *>(&decrement)) == -1)
330324
{
331325
msg += std::string("\nStop event decrementation failed with code ") +
332326
std::to_string(errno) + ". Server will stop anyway";
@@ -350,7 +344,7 @@ namespace simpleApp
350344
}
351345
else
352346
{
353-
auto clientSession = reinterpret_cast<ClientSession*>(events[i].data.ptr);
347+
auto clientSession = reinterpret_cast<Session*>(events[i].data.ptr);
354348
if(slaveSocketsMap.find(clientSession) == slaveSocketsMap.end())
355349
{
356350
std::cout << "Unknown event happened" << std::endl;
@@ -464,7 +458,7 @@ namespace simpleApp
464458
delete val;
465459
}
466460

467-
removeFromEPoll(epollfd, this->stopObject);
461+
removeFromEPoll(epollfd, this->stopEventFd);
468462
}
469463

470464
if(epollfd != -1)
@@ -485,19 +479,19 @@ namespace simpleApp
485479

486480
int Server::initStop()
487481
{
488-
if (this->stopObject != -1)
489-
close(this->stopObject);
482+
if (this->stopEventFd != -1)
483+
close(this->stopEventFd);
490484

491-
this->stopObject = eventfd(0, EFD_NONBLOCK);
485+
this->stopEventFd = eventfd(0, EFD_NONBLOCK);
492486

493-
return this->stopObject == -1 ? errno : 0;
487+
return this->stopEventFd == -1 ? errno : 0;
494488
}
495489

496-
int Server::stop()
490+
int Server::raiseStop()
497491
{
498-
if (this->stopObject != -1)
492+
if (this->stopEventFd != -1)
499493
{
500-
if (eventfd_write(this->stopObject, static_cast<eventfd_t>(1)) == -1)
494+
if (eventfd_write(this->stopEventFd, static_cast<eventfd_t>(1)) == -1)
501495
return errno;
502496
}
503497

server/Server.hpp

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

33
#include <stdint.h>
4-
#include <stdlib.h>
54

65
namespace simpleApp
76
{
@@ -15,9 +14,9 @@ namespace simpleApp
1514

1615
int initStop();
1716

18-
int stop();
17+
int raiseStop();
1918

2019
private:
21-
int stopObject = -1;
20+
int stopEventFd = -1;
2221
};
2322
} // namespace simpleApp
Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,28 @@
1-
#include "ClientSession.hpp"
1+
#include "Session.hpp"
22

3-
#if defined(__linux__)
43
#include <sys/socket.h>
54
#include <sys/epoll.h>
65

7-
#else
8-
#error System is not supported
9-
10-
#endif
11-
126
#include <unistd.h>
137

148
namespace simpleApp
159
{
16-
ClientSession::ClientSession(int epollfd, std::string name) : epollfd(epollfd), _name(name)
10+
Session::Session(int epollfd, std::string name) : epollfd(epollfd), _name(name)
1711
{
1812

1913
}
2014

21-
ClientSession::~ClientSession()
15+
Session::~Session()
2216
{
2317
this->sessionClose();
2418
}
2519

26-
std::string ClientSession::getName()
20+
std::string Session::getName()
2721
{
2822
return this->_name;
2923
}
3024

31-
void ClientSession::sessionClose()
25+
void Session::sessionClose()
3226
{
3327
if (this->_socket != -1)
3428
{

0 commit comments

Comments
 (0)