Client-side heartbeat is working
This commit is contained in:
@@ -140,6 +140,20 @@ void InWorld::Update() {
|
|||||||
//update the camera
|
//update the camera
|
||||||
camera.x = localCharacter->GetOrigin().x - camera.marginX;
|
camera.x = localCharacter->GetOrigin().x - camera.marginX;
|
||||||
camera.y = localCharacter->GetOrigin().y - camera.marginY;
|
camera.y = localCharacter->GetOrigin().y - camera.marginY;
|
||||||
|
|
||||||
|
//check the connection
|
||||||
|
if (Clock::now() - lastBeat > std::chrono::seconds(5)) {
|
||||||
|
if (attemptedBeats > 2) {
|
||||||
|
throw(std::runtime_error("Connection lost"));
|
||||||
|
}
|
||||||
|
|
||||||
|
ServerPacket newPacket;
|
||||||
|
newPacket.type = SerialPacketType::PING;
|
||||||
|
network.SendTo(Channels::SERVER, &newPacket);
|
||||||
|
|
||||||
|
attemptedBeats++;
|
||||||
|
lastBeat = Clock::now();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void InWorld::FrameEnd() {
|
void InWorld::FrameEnd() {
|
||||||
@@ -305,9 +319,13 @@ void InWorld::HandlePing(ServerPacket* const argPacket) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void InWorld::HandlePong(ServerPacket* const argPacket) {
|
void InWorld::HandlePong(ServerPacket* const argPacket) {
|
||||||
//TODO: InWorld::HandlePong()
|
if (network.GetIPAddress(Channels::SERVER)->host != argPacket->srcAddress.host) {
|
||||||
|
throw(std::runtime_error("Heartbeat message received from unknown source"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
attemptedBeats = 0;
|
||||||
|
lastBeat = Clock::now();
|
||||||
|
}
|
||||||
|
|
||||||
void InWorld::HandleDisconnect(ClientPacket* const argPacket) {
|
void InWorld::HandleDisconnect(ClientPacket* const argPacket) {
|
||||||
//TODO: More needed in the disconnection
|
//TODO: More needed in the disconnection
|
||||||
|
|||||||
@@ -46,6 +46,8 @@
|
|||||||
//STL
|
//STL
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
class InWorld : public BaseScene {
|
class InWorld : public BaseScene {
|
||||||
public:
|
public:
|
||||||
//Public access members
|
//Public access members
|
||||||
@@ -121,6 +123,11 @@ protected:
|
|||||||
|
|
||||||
//game
|
//game
|
||||||
Character* localCharacter = nullptr;
|
Character* localCharacter = nullptr;
|
||||||
|
|
||||||
|
//connections
|
||||||
|
typedef std::chrono::steady_clock Clock;
|
||||||
|
Clock::time_point lastBeat = Clock::now();
|
||||||
|
int attemptedBeats = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
TODO: Heartbeat systems
|
TODO: Heartbeat systems
|
||||||
TODO: Rejection messages
|
TODO: Rejection messages
|
||||||
|
TODO: The error handling is terrible
|
||||||
TODO: Move the statistics into their own SQL table, instead of duplicating the structure a dozen times
|
TODO: Move the statistics into their own SQL table, instead of duplicating the structure a dozen times
|
||||||
TODO: Get the rooms working, even if only via hotkeys
|
TODO: Get the rooms working, even if only via hotkeys
|
||||||
TODO: Fix shoddy movement
|
TODO: Fix shoddy movement
|
||||||
|
|||||||
Reference in New Issue
Block a user