10 #include "SFML/Window/Keyboard.hpp"
20 _serverSocket = std::make_shared<ServerSocket>();
21 _gameLoader = std::make_unique<DLLoader>(
"../lib_r_type.so");
22 _serverSocket->init_server(port);
23 _game = std::unique_ptr<IGame>(_gameLoader->getInstance(
"create", _serverSocket));
24 _packetHeartBeat = std::make_unique<Packet>();
32 std::ostream &operator<<(std::ostream &os, CODE
const &packetCode)
62 std::ostream &operator<<(std::ostream &os, Element
const &packetElement)
64 os <<
"Element: " << packetElement
.id <<
" " << packetElement
.x <<
" " << packetElement
.y <<
" "
65 << packetElement
.type;
74 std::ostream &operator<<(std::ostream &os, std::unique_ptr<Packet> &packet)
76 os <<
"Packet: " << packet->code <<
" " << packet->data_size;
77 if (packet->code == CODE::ELEMENT) {
78 os <<
static_cast<Element *>(packet->data);
80 if (packet->code == CODE::MESSAGE) {
82 <<
"Message: " + std::string(
static_cast<
char *>(packet->data));
94 bool send_broadcast =
false;
96 _serverSocket->init_fd_set();
97 _packetClientId = _serverSocket->receive();
98 _packet = std::move(std::get<0>(_packetClientId));
99 std::shared_ptr<Event> event = std::make_shared<Event>();
100 event->id = std::get<1>(_packetClientId);
101 event->eventType = 0;
102 event->key = sf::Keyboard::Key::Unknown;
105 if (_packet->code == HEARTBEAT) {
106 gettimeofday(&_currentTime,
nullptr);
107 _receveidTime = *
static_cast<timeval *>(_packet->data);
108 _packetHeartBeat->code = HEARTBEAT;
109 _packetHeartBeat->data_size =
sizeof(timeval);
110 _packetHeartBeat->data = malloc(_packetHeartBeat->data_size);
111 timersub(&_currentTime, &_receveidTime, &_packetHeartBeatData);
114 memcpy(_packetHeartBeat->data, &_currentTime, _packetHeartBeat->data_size);
115 _serverSocket->send(_packetHeartBeat.get(),
116 _serverSocket->getClientAddress(std::get<1>(_packetClientId)));
117 free(_packetHeartBeat->data);
119 if (_packet->code == MESSAGE) {
120 if (std::string(
static_cast<
char *>(_packet->data)) ==
"connection") {
123 auto *packetConnectionAccepted =
new Packet();
127 memcpy(packetConnectionAccepted
->data,
"connection accepted", packetConnectionAccepted
->data_size);
128 _serverSocket->send(packetConnectionAccepted,
129 _serverSocket->getClientAddress(std::get<1>(_packetClientId)));
130 free(packetConnectionAccepted
->data);
131 delete packetConnectionAccepted;
134 if (_packet->code == EVENT) {
136 memset(&event1, 0,
sizeof(Event));
137 memcpy(&event1, _packet->data,
sizeof(Event));
138 event = std::make_shared<Event>(event1);
139 event->id = std::get<1>(_packetClientId);
142 _game->update(event, _packet);
146 _packetClientId = std::tuple<std::unique_ptr<Packet>,
int>(
nullptr, 0);