Display message boxes when client is disconnected.

This commit is contained in:
David Cernat 2016-08-25 02:58:03 +03:00
parent 4d2ca20445
commit 7bb6020e51

View file

@ -45,6 +45,8 @@ Networking::~Networking()
void Networking::Update() void Networking::Update()
{ {
RakNet::Packet *packet; RakNet::Packet *packet;
std::string errmsg = "";
for (packet=peer->Receive(); packet; peer->DeallocatePacket(packet), packet=peer->Receive()) for (packet=peer->Receive(); packet; peer->DeallocatePacket(packet), packet=peer->Receive())
{ {
switch (packet->data[0]) switch (packet->data[0])
@ -65,16 +67,13 @@ void Networking::Update()
LOG_MESSAGE_SIMPLE(Log::LOG_INFO, "%s", "A connection is incoming."); LOG_MESSAGE_SIMPLE(Log::LOG_INFO, "%s", "A connection is incoming.");
break; break;
case ID_NO_FREE_INCOMING_CONNECTIONS: case ID_NO_FREE_INCOMING_CONNECTIONS:
LOG_MESSAGE_SIMPLE(Log::LOG_WARN, "%s", "The server is full."); errmsg = "The server is full.";
MWBase::Environment::get().getStateManager()->requestQuit();
break; break;
case ID_DISCONNECTION_NOTIFICATION: case ID_DISCONNECTION_NOTIFICATION:
LOG_MESSAGE_SIMPLE(Log::LOG_WARN, "%s", "We have been disconnected."); errmsg = "We have been disconnected.";
MWBase::Environment::get().getStateManager()->requestQuit();
break; break;
case ID_CONNECTION_LOST: case ID_CONNECTION_LOST:
LOG_MESSAGE_SIMPLE(Log::LOG_WARN, "%s", "Connection lost."); errmsg = "Connection lost.";
MWBase::Environment::get().getStateManager()->requestQuit();
break; break;
default: default:
ReceiveMessage(packet); ReceiveMessage(packet);
@ -82,6 +81,13 @@ void Networking::Update()
break; break;
} }
} }
if (!errmsg.empty()) {
LOG_MESSAGE_SIMPLE(Log::LOG_ERROR, "%s", errmsg);
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "tes3mp", errmsg.c_str(), 0);
MWBase::Environment::get().getStateManager()->requestQuit();
}
} }
void Networking::SendData(RakNet::BitStream *bs) void Networking::SendData(RakNet::BitStream *bs)
@ -111,7 +117,7 @@ void Networking::Connect(const std::string &ip, unsigned short port)
case ID_CONNECTION_ATTEMPT_FAILED: case ID_CONNECTION_ATTEMPT_FAILED:
{ {
errmsg = "Connection failed.\n" errmsg = "Connection failed.\n"
"Maybe the IP address is wrong or a firewall on either system is blocking\n" "Either the IP address is wrong or a firewall on either system is blocking\n"
"UDP packets on the port you have chosen."; "UDP packets on the port you have chosen.";
queue = false; queue = false;
break; break;
@ -153,8 +159,8 @@ void Networking::Connect(const std::string &ip, unsigned short port)
if (!errmsg.empty()) if (!errmsg.empty())
{ {
cerr << errmsg << endl; LOG_MESSAGE_SIMPLE(Log::LOG_ERROR, "%s", errmsg);
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "TES3MP", errmsg.c_str(), 0); SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "tes3mp", errmsg.c_str(), 0);
MWBase::Environment::get().getStateManager()->requestQuit(); MWBase::Environment::get().getStateManager()->requestQuit();
} }
} }