summaryrefslogtreecommitdiff
path: root/src/connectionhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/connectionhandler.cpp')
-rw-r--r--src/connectionhandler.cpp176
1 files changed, 0 insertions, 176 deletions
diff --git a/src/connectionhandler.cpp b/src/connectionhandler.cpp
deleted file mode 100644
index 96affdc6..00000000
--- a/src/connectionhandler.cpp
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * The Mana World Server
- * Copyright 2004 The Mana World Development Team
- *
- * This file is part of The Mana World.
- *
- * The Mana World is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or any later version.
- *
- * The Mana World is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with The Mana World; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id$
- */
-
-#include "connectionhandler.h"
-
-#include "chatchannelmanager.h"
-#include "messagein.h"
-#include "messageout.h"
-#include "netcomputer.h"
-
-#include "utils/logger.h"
-
-#ifdef SCRIPT_SUPPORT
-#include "script.h"
-#endif
-
-
-std::string
-ip4ToString(unsigned int ip4addr)
-{
- std::stringstream ss;
- ss << (ip4addr & 0x000000ff) << "."
- << ((ip4addr & 0x0000ff00) >> 8) << "."
- << ((ip4addr & 0x00ff0000) >> 16) << "."
- << ((ip4addr & 0xff000000) >> 24);
- return ss.str();
-}
-
-////////////////
-
-ClientData::ClientData():
- inp(0)
-{
-}
-
-bool ConnectionHandler::startListen(enet_uint16 port)
-{
- // Bind the server to the default localhost.
- address.host = ENET_HOST_ANY;
- address.port = port;
-
- LOG_INFO("Listening on port " << port << "...", 0);
- host = enet_host_create(&address /* the address to bind the server host to */,
- MAX_CLIENTS /* allow up to MAX_CLIENTS clients and/or outgoing connections */,
- 0 /* assume any amount of incoming bandwidth */,
- 0 /* assume any amount of outgoing bandwidth */);
-
- return host;
-}
-
-void ConnectionHandler::stopListen()
-{
- // - Disconnect all clients (close sockets)
-
- // TODO: probably there's a better way.
- ENetPeer *currentPeer;
-
- for (currentPeer = host->peers;
- currentPeer < &host->peers[host->peerCount];
- ++currentPeer)
- {
- if (currentPeer->state == ENET_PEER_STATE_CONNECTED)
- {
- enet_peer_disconnect(currentPeer, 0);
- enet_host_flush(host);
- enet_peer_reset(currentPeer);
- }
- }
- enet_host_destroy(host);
- // FIXME: memory leak on NetComputers
-}
-
-void ConnectionHandler::flush()
-{
- enet_host_flush(host);
-}
-
-void ConnectionHandler::process()
-{
- ENetEvent event;
- // Process Enet events and do not block.
- while (enet_host_service(host, &event, 0) > 0) {
- switch (event.type) {
- case ENET_EVENT_TYPE_CONNECT:
- {
- LOG_INFO("A new client connected from " <<
- ip4ToString(event.peer->address.host) << ":" <<
- event.peer->address.port, 0);
- NetComputer *comp = computerConnected(event.peer);
- clients.push_back(comp);
- /*LOG_INFO(ltd->host->peerCount <<
- " client(s) connected", 0);*/
-
- // Store any relevant client information here.
- event.peer->data = (void *)comp;
- } break;
-
- case ENET_EVENT_TYPE_RECEIVE:
- {
- NetComputer *comp = (NetComputer*) event.peer->data;
-
-#ifdef SCRIPT_SUPPORT
- // This could be good if you wanted to extend the
- // server protocol using a scripting language. This
- // could be attained by using allowing scripts to
- // "hook" certain messages.
-
- //script->message(buffer);
-#endif
-
- // If the scripting subsystem didn't hook the message
- // it will be handled by the default message handler.
-
- // Make sure that the packet is big enough (> short)
- if (event.packet->dataLength >= 2) {
- MessageIn msg((char *)event.packet->data,
- event.packet->dataLength);
- LOG_INFO("Received message " << msg.getId() << " ("
- << event.packet->dataLength << " B) from "
- << *comp, 2);
-
- processMessage(comp, msg);
- } else {
- LOG_ERROR("Message too short from " << *comp, 0);
- }
-
- /* Clean up the packet now that we're done using it. */
- enet_packet_destroy(event.packet);
- } break;
-
- case ENET_EVENT_TYPE_DISCONNECT:
- {
- NetComputer *comp = (NetComputer *)event.peer->data;
- LOG_INFO(ip4ToString(event.peer->address.host) << " disconnected.", 0);
- // Reset the peer's client information.
- computerDisconnected(comp);
- clients.erase(std::find(clients.begin(), clients.end(), comp));
- event.peer->data = NULL;
- } break;
-
- default: break;
- }
- }
-}
-
-void ConnectionHandler::sendToEveryone(const MessageOut &msg)
-{
- for (NetComputers::iterator i = clients.begin(), i_end = clients.end();
- i != i_end; ++i) {
- (*i)->send(msg);
- }
-}
-
-unsigned int ConnectionHandler::getClientNumber()
-{
- return clients.size();
-}