Skip to content

Commit 306333e

Browse files
committed
Merge branch 'dev' of https://github.com/Gallasko/PgEngine into dev
2 parents 2462f64 + e5881d7 commit 306333e

6 files changed

Lines changed: 71 additions & 4 deletions

File tree

.vscode/launch.json

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,33 @@
8282
// },
8383
// "preLaunchTask": "build"
8484
},
85+
{
86+
"name": "NetworkTestServer",
87+
"type": "cppdbg",
88+
"request": "launch",
89+
"args": ["--mode=server"],
90+
"stopAtEntry": false,
91+
"cwd": "${workspaceFolder}",
92+
"environment": [],
93+
"externalConsole": false,
94+
"linux": {
95+
"MIMode": "gdb",
96+
"miDebuggerPath": "gdb",
97+
"program": "${workspaceFolder}/build/SimpleClientServer"
98+
},
99+
"osx": {
100+
"MIMode": "lldb",
101+
"miDebuggerPath": "lldb-mi",
102+
"program": "${workspaceFolder}/debug/main"
103+
},
104+
"windows": {
105+
"MIMode": "gdb",
106+
"miDebuggerPath": "gdb.exe",
107+
"program": "${workspaceFolder}/debug/GameOff.exe"
108+
}
109+
// },
110+
// "preLaunchTask": "build"
111+
},
85112
{
86113
"name": "Test",
87114
"type": "cppdbg",

src/Engine/Networking/backend_sdl.cpp

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ namespace pg
6565

6666
auto newSock = SDLNet_TCP_Accept(_listener);
6767

68+
if (not newSock)
69+
return nullptr;
70+
6871
bool addedToSet = false;
6972

7073
for (size_t setId = 0; setId < sockSets.size(); setId++)
@@ -132,12 +135,38 @@ namespace pg
132135
return _isConnectedToServer;
133136
}
134137

138+
void SdlNetworkBackend::disconnectFromServer()
139+
{
140+
if (_tcpSock)
141+
{
142+
SDLNet_TCP_DelSocket(sockSet, _tcpSock);
143+
SDLNet_TCP_Close(_tcpSock);
144+
_tcpSock = nullptr;
145+
}
146+
147+
if (_udpSock)
148+
{
149+
SDLNet_UDP_Close(_udpSock);
150+
_udpSock = nullptr;
151+
}
152+
153+
_isConnectedToServer = false;
154+
}
155+
135156
void SdlNetworkBackend::closeTcp(SocketHandle sock)
136157
{
137158
if (sock)
138159
{
139-
SDLNet_TCP_DelSocket(sockSet, static_cast<TCPsocket>(sock));
140-
SDLNet_TCP_Close(static_cast<TCPsocket>(sock));
160+
auto tcpSock = static_cast<TCPsocket>(sock);
161+
162+
auto it = sockSetsMap.find(tcpSock);
163+
if (it != sockSetsMap.end())
164+
{
165+
SDLNet_TCP_DelSocket(it->second, tcpSock);
166+
sockSetsMap.erase(it);
167+
}
168+
169+
SDLNet_TCP_Close(tcpSock);
141170
}
142171
}
143172

@@ -231,7 +260,7 @@ namespace pg
231260
}
232261
else
233262
{
234-
_isConnectedToServer = false;
263+
disconnectFromServer();
235264
LOG_ERROR(DOM, "TCP receive failed, disconnected from server !");
236265
}
237266
}
@@ -318,7 +347,7 @@ namespace pg
318347
}
319348
else
320349
{
321-
_isConnectedToServer = false;
350+
disconnectFromServer();
322351
socketClosed = true;
323352

324353
LOG_ERROR(DOM, "TCP receive failed, disconnected from server !");

src/Engine/Networking/backend_sdl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ namespace pg
2020

2121
// Client‐side: connect to server using cfg.peerAddress/cfg.tcpPort
2222
bool connectToServer() override;
23+
virtual void disconnectFromServer() override;
2324

2425
virtual void closeTcp(SocketHandle sock) override;
2526

src/Engine/Networking/common.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ namespace pg
120120
if (hdr.fragmentIndex >= hdr.totalFragments)
121121
return false;
122122

123+
if (HEADER_SIZE + hdr.payloadLen > raw.size())
124+
return false;
125+
123126
slots[hdr.fragmentIndex] =
124127
NetPayload(
125128
raw.begin() + HEADER_SIZE,

src/Engine/Networking/ibackend.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ namespace pg
1919

2020
// Client-side: try to connect; return true on success
2121
virtual bool connectToServer() = 0;
22+
virtual void disconnectFromServer() = 0;
2223

2324
bool _isConnectedToServer = false;
2425
inline bool isConnectedToServer() const { return _isConnectedToServer; }

src/Engine/Networking/network_system.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,12 @@ namespace pg
299299
handleClientMessage(msg.header, msg.payload);
300300
}
301301
}
302+
303+
// If we were disconnected going back to trying to connect to server
304+
if (not backend->isConnectedToServer())
305+
{
306+
currentClientState = ClientState::Connecting;
307+
}
302308
}
303309

304310
void NetworkSystem::handleMessage(const PacketHeader&, const NetPayload&)

0 commit comments

Comments
 (0)