mirror of
https://bitbucket.org/theswgsource/src-1.2.git
synced 2026-10-02 17:13:09 -04:00
111 lines
3.4 KiB
C++
Executable File
111 lines
3.4 KiB
C++
Executable File
// ======================================================================
|
|
//
|
|
// WatcherConnection.cpp
|
|
// copyright (c) 2001 Sony Online Entertainment
|
|
//
|
|
// ======================================================================
|
|
|
|
#include "FirstPlanetServer.h"
|
|
#include "WatcherConnection.h"
|
|
|
|
#include "ConfigPlanetServer.h"
|
|
#include "sharedNetworkMessages/PlanetNodeStatusMessage.h"
|
|
#include "sharedNetworkMessages/PlanetObjectStatusMessage.h"
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
WatcherConnection::WatcherConnection(UdpConnectionMT * u, TcpClient * t) :
|
|
ServerConnection(u, t),
|
|
m_objectData(new ObjectDataList),
|
|
m_nodeData(new NodeDataList)
|
|
{
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
WatcherConnection::~WatcherConnection()
|
|
{
|
|
delete m_objectData;
|
|
delete m_nodeData;
|
|
m_objectData = 0;
|
|
m_nodeData = 0;
|
|
|
|
} //lint !e1740 // thinks we didn't delete m_objectData and m_nodeData, but clearly we did
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void WatcherConnection::onConnectionClosed()
|
|
{
|
|
DEBUG_REPORT_LOG(true,("WatcherConnection closed.\n"));
|
|
ServerConnection::onConnectionClosed();
|
|
|
|
static MessageConnectionCallback m("WatcherConnectionClosed");
|
|
emitMessage(m);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void WatcherConnection::onConnectionOpened()
|
|
{
|
|
DEBUG_REPORT_LOG(true,("WatcherConnection opened.\n"));
|
|
ServerConnection::onConnectionOpened();
|
|
|
|
static MessageConnectionCallback m("WatcherConnectionOpened");
|
|
emitMessage(m);
|
|
setOverflowLimit(ConfigPlanetServer::getWatcherOverflowLimit());
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
void WatcherConnection::addObjectUpdate(const NetworkId &objectId, int x, int z, uint32 authoritativeServer, int interestRadius, bool deleteObject, int objectTypeTag, int const level, bool const hibernating, uint32 const templateCrc, int const aiActivity, int const creationType)
|
|
{
|
|
NOT_NULL(m_objectData);
|
|
m_objectData->push_back(PlanetObjectStatusMessageData(objectId, x,z, authoritativeServer, interestRadius, static_cast<int>(deleteObject), objectTypeTag, level, hibernating, templateCrc, aiActivity, creationType));
|
|
|
|
if (static_cast<int>(m_objectData->size()) > ConfigPlanetServer::getMaxWatcherUpdatesPerMessage())
|
|
{
|
|
flushQueuedObjectData();
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
|
|
void WatcherConnection::flushQueuedObjectData()
|
|
{
|
|
NOT_NULL(m_objectData);
|
|
if (m_objectData->size() != 0)
|
|
{
|
|
PlanetObjectStatusMessage msg(*m_objectData);
|
|
send(msg,true);
|
|
m_objectData->clear();
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
void WatcherConnection::addNodeUpdate(int x, int z, bool loaded, const stdvector<uint32>::fwd &servers, const stdvector<int>::fwd &subscriptionCounts)
|
|
{
|
|
NOT_NULL(m_nodeData);
|
|
m_nodeData->push_back(PlanetNodeStatusMessageData(x,z,loaded,servers,subscriptionCounts));
|
|
|
|
if (static_cast<int>(m_objectData->size()) > ConfigPlanetServer::getMaxWatcherUpdatesPerMessage())
|
|
{
|
|
flushQueuedNodeData();
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
void WatcherConnection::flushQueuedNodeData()
|
|
{
|
|
NOT_NULL(m_nodeData);
|
|
if (m_nodeData->size() != 0)
|
|
{
|
|
PlanetNodeStatusMessage msg(*m_nodeData);
|
|
send(msg,true);
|
|
m_nodeData->clear();
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|