summaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
authorBjørn Lindeijer <bjorn@lindeijer.nl>2008-10-26 20:32:38 +0000
committerBjørn Lindeijer <bjorn@lindeijer.nl>2008-10-26 20:32:38 +0000
commitff9438ab94d19f0957a264ff79def01f9855b707 (patch)
tree81f9a6e2fd54b33548b7b60c7e3906b270f60c39 /src/net
parentcfabe4237b9298e63912972666a2ab25948ce2e9 (diff)
downloadmanaserv-ff9438ab94d19f0957a264ff79def01f9855b707.tar.gz
manaserv-ff9438ab94d19f0957a264ff79def01f9855b707.tar.bz2
manaserv-ff9438ab94d19f0957a264ff79def01f9855b707.tar.xz
manaserv-ff9438ab94d19f0957a264ff79def01f9855b707.zip
Some cleanup and an unsuccesful attempt at fixing a crash on map server exit
when there is no connection the account server (a different one surfaced).
Diffstat (limited to 'src/net')
-rw-r--r--src/net/connection.cpp39
-rw-r--r--src/net/connection.hpp5
2 files changed, 29 insertions, 15 deletions
diff --git a/src/net/connection.cpp b/src/net/connection.cpp
index faff533c..38ecd1bf 100644
--- a/src/net/connection.cpp
+++ b/src/net/connection.cpp
@@ -26,16 +26,22 @@
#include "net/messageout.hpp"
#include "utils/logger.h"
+Connection::Connection():
+ mRemote(0),
+ mLocal(0)
+{
+}
+
bool Connection::start(std::string const &address, int port)
{
ENetAddress enetAddress;
enet_address_set_host(&enetAddress, address.c_str());
enetAddress.port = port;
- mLocal = enet_host_create(NULL /* create a client host */,
- 1 /* allow one outgoing connection */,
- 0 /* assume any amount of incoming bandwidth */,
- 0 /* assume any amount of outgoing bandwidth */);
+ mLocal = enet_host_create(NULL /* create a client host */,
+ 1 /* allow one outgoing connection */,
+ 0 /* assume any amount of incoming bandwidth */,
+ 0 /* assume any amount of outgoing bandwidth */);
if (!mLocal) return false;
@@ -54,11 +60,17 @@ bool Connection::start(std::string const &address, int port)
void Connection::stop()
{
- enet_peer_disconnect(mRemote, 0);
- enet_host_flush(mLocal);
- enet_peer_reset(mRemote);
- enet_host_destroy(mLocal);
- mRemote = NULL;
+ if (mRemote)
+ enet_peer_disconnect(mRemote, 0);
+ if (mLocal)
+ enet_host_flush(mLocal);
+ if (mRemote)
+ enet_peer_reset(mRemote);
+ if (mLocal)
+ enet_host_destroy(mLocal);
+
+ mRemote = 0;
+ mLocal = 0;
}
bool Connection::isConnected() const
@@ -68,19 +80,20 @@ bool Connection::isConnected() const
void Connection::send(MessageOut const &msg, bool reliable, unsigned channel)
{
+ if (!mRemote) {
+ LOG_WARN("Can't send message to unconnected host! (" << msg << ")");
+ return;
+ }
+
ENetPacket *packet;
packet = enet_packet_create(msg.getData(),
msg.getLength(),
reliable ? ENET_PACKET_FLAG_RELIABLE : 0);
if (packet)
- {
enet_peer_send(mRemote, channel, packet);
- }
else
- {
LOG_ERROR("Failure to create packet!");
- }
}
void Connection::process()
diff --git a/src/net/connection.hpp b/src/net/connection.hpp
index 0cdb1fc0..ba36b2d3 100644
--- a/src/net/connection.hpp
+++ b/src/net/connection.hpp
@@ -37,7 +37,7 @@ class MessageOut;
class Connection
{
public:
- Connection(): mRemote(NULL) {}
+ Connection();
virtual ~Connection() {}
/**
@@ -59,7 +59,8 @@ class Connection
/**
* Sends a message to the remote host.
*/
- void send(MessageOut const &msg, bool reliable = true, unsigned channel = 0);
+ void send(MessageOut const &msg, bool reliable = true,
+ unsigned channel = 0);
/**
* Dispatches received messages to processMessage.