From d2c830306fb5c5a5781391336a6154b1bb68058d Mon Sep 17 00:00:00 2001 From: DarthArgus Date: Sun, 24 Jul 2016 20:37:39 -0700 Subject: [PATCH] i must test these before calling them good - as gcc isn't on the windows machine i push, test, fix, and then push again - pvs studio <3 --- .../ATGenericAPI/GenericApiCore.cpp | 439 ++- .../ATGenericAPI/GenericConnection.cpp | 305 +- .../ATGenericAPI/GenericMessage.cpp | 47 +- .../TcpLibrary/TcpManager.cpp | 1246 ++++--- .../src/shared/CentralCSHandler.h | 98 +- .../src/shared/ConnectionServerConnection.cpp | 140 +- .../src/shared/ConnectionServer.cpp | 2 +- .../src/shared/TemplateParameter.h | 380 +- .../3rd/library/platform/utils/Base/AutoLog.h | 169 +- .../projects/ChatAPI/AvatarIteratorCore.cpp | 829 +++-- .../ChatAPI/projects/ChatAPI/ChatAPICore.cpp | 2185 ++++++----- .../projects/ChatAPI/ChatAvatarCore.cpp | 324 +- .../ChatAPI/projects/ChatAPI/ChatRoomCore.cpp | 1911 +++++----- .../ChatAPI/projects/ChatAPI/Request.cpp | 3085 ++++++++-------- .../ChatAPI/projects/ChatAPI/Response.cpp | 3186 ++++++++--------- .../soePlatform/ChatAPI/utils/Base/AutoLog.h | 167 +- .../utils/GenericAPI/GenericConnection.cpp | 519 ++- .../utils/GenericAPI/GenericMessage.cpp | 43 +- .../ChatAPI/utils/Unicode/UnicodeUtils.h | 604 ++-- 19 files changed, 7743 insertions(+), 7936 deletions(-) diff --git a/engine/server/application/CentralServer/src/shared/AuctionTransferGameAPI/ATGenericAPI/GenericApiCore.cpp b/engine/server/application/CentralServer/src/shared/AuctionTransferGameAPI/ATGenericAPI/GenericApiCore.cpp index 3735217d..d4b0941d 100644 --- a/engine/server/application/CentralServer/src/shared/AuctionTransferGameAPI/ATGenericAPI/GenericApiCore.cpp +++ b/engine/server/application/CentralServer/src/shared/AuctionTransferGameAPI/ATGenericAPI/GenericApiCore.cpp @@ -13,260 +13,255 @@ using namespace std; #ifdef EXTERNAL_DISTRO -namespace NAMESPACE +namespace NAMESPACE { - #endif -//---------------------------------------- -ServerTrackObject::ServerTrackObject(unsigned mapped_track, unsigned real_track, GenericConnection *con) -: m_mappedTrack(mapped_track), m_realTrack(real_track), m_connection(con) -//---------------------------------------- -{ -} + //---------------------------------------- + ServerTrackObject::ServerTrackObject(unsigned mapped_track, unsigned real_track, GenericConnection *con) + : m_mappedTrack(mapped_track), m_realTrack(real_track), m_connection(con) + //---------------------------------------- + { + } -//---------------------------------------- -GenericAPICore::GenericAPICore(const char *host, - short port, - unsigned reqTimeout, - unsigned reconnectTimeout, - unsigned noDataTimeoutSecs, - unsigned noAckTimeoutSecs, - unsigned incomingBufSizeInKB, - unsigned outgoingBufSizeInKB, - unsigned keepAlive, - unsigned maxRecvMessageSizeInKB) -: m_currTrack(0), - m_reconnectTimeout(0), - m_outCount(0), - m_pendingCount(0), - m_requestTimeout(reqTimeout), - m_currentConnections(0), m_maxConnections(0), - m_suspended(false), - m_nextConnectionIndex(0) -//---------------------------------------- -{ - GenericConnection *con = new GenericConnection(host, port, this, reconnectTimeout, noDataTimeoutSecs, noAckTimeoutSecs, incomingBufSizeInKB, outgoingBufSizeInKB, keepAlive, maxRecvMessageSizeInKB); - m_serverConnections.push_back(con); -} - -//---------------------------------------- -GenericAPICore::GenericAPICore(const char *game, const char *hosts[], - const short port[], - unsigned arraySize, - unsigned reqTimeout, - unsigned reconnectTimeout, - unsigned noDataTimeoutSecs, - unsigned noAckTimeoutSecs, - unsigned incomingBufSizeInKB, - unsigned outgoingBufSizeInKB, - unsigned keepAlive, - unsigned maxRecvMessageSizeInKB) -: m_currTrack(0), - m_reconnectTimeout(0), - m_outCount(0), - m_pendingCount(0), - m_requestTimeout(reqTimeout), - m_currentConnections(0), m_maxConnections(0), - m_suspended(false), - m_nextConnectionIndex(0), - m_game(game) -//---------------------------------------- -{ - for (unsigned i=0; i::iterator conIter = m_serverConnections.begin(); conIter != m_serverConnections.end(); conIter++) - { - GenericConnection *con = *conIter; - delete con; - } - m_serverConnections.clear(); - - for(map::iterator iter = m_pending.begin(); iter != m_pending.end(); ++iter) - { - delete (*iter).second; } - m_pending.empty(); - - while(m_outCount > 0) + //---------------------------------------- + GenericAPICore::GenericAPICore(const char *game, const char *hosts[], + const short port[], + unsigned arraySize, + unsigned reqTimeout, + unsigned reconnectTimeout, + unsigned noDataTimeoutSecs, + unsigned noAckTimeoutSecs, + unsigned incomingBufSizeInKB, + unsigned outgoingBufSizeInKB, + unsigned keepAlive, + unsigned maxRecvMessageSizeInKB) + : m_currTrack(0), + m_reconnectTimeout(0), + m_outCount(0), + m_pendingCount(0), + m_requestTimeout(reqTimeout), + m_currentConnections(0), m_maxConnections(0), + m_suspended(false), + m_nextConnectionIndex(0), + m_game(game) + //---------------------------------------- { - delete m_outboundQueue.front().second; - delete m_outboundQueue.front().first; - m_outboundQueue.pop(); - --m_outCount; - } -} - -//---------------------------------------- -unsigned GenericAPICore::submitRequest(GenericRequest *req, GenericResponse *res) -//---------------------------------------- -{ - ++m_outCount; - if(m_currTrack == 0) - { - m_currTrack++; - } - req->setTrack(m_currTrack); - res->setTrack(m_currTrack); - time_t timeout = time(nullptr) + m_requestTimeout; - - req->setTimeout(timeout); - res->setTimeout(timeout); - - m_outboundQueue.push(pair(req, res)); - return(m_currTrack++); -} - -//---------------------------------------- -void GenericAPICore::process() -//---------------------------------------- -{ - GenericRequest *req; - GenericResponse *res; - - if (!m_suspended) - { - // Process timeout on pending requests - while((m_outCount > 0) && ((req = m_outboundQueue.front().first)->getTimeout() <= time(nullptr))) + for (unsigned i = 0; i < arraySize; i++) { - --m_outCount; - res = m_outboundQueue.front().second; + GenericConnection *con = new GenericConnection(hosts[i], port[i], this, reconnectTimeout, noDataTimeoutSecs, noAckTimeoutSecs, incomingBufSizeInKB, outgoingBufSizeInKB, keepAlive, maxRecvMessageSizeInKB); + m_serverConnections.push_back(con); + } + } + + //---------------------------------------- + GenericAPICore::~GenericAPICore() + //---------------------------------------- + { + for (std::vector::iterator conIter = m_serverConnections.begin(); conIter != m_serverConnections.end(); conIter++) + { + GenericConnection *con = *conIter; + delete con; + } + m_serverConnections.clear(); + + for (map::iterator iter = m_pending.begin(); iter != m_pending.end(); ++iter) + { + delete (*iter).second; + } + + m_pending.clear(); + + while (m_outCount > 0) + { + delete m_outboundQueue.front().second; + delete m_outboundQueue.front().first; m_outboundQueue.pop(); - - responseCallback(res); - delete res; - delete req; + --m_outCount; } + } - // Process timeout on pending responses - while((m_pendingCount > 0) && ((res = (*m_pending.begin()).second)->getTimeout() <= time(nullptr))) + //---------------------------------------- + unsigned GenericAPICore::submitRequest(GenericRequest *req, GenericResponse *res) + //---------------------------------------- + { + ++m_outCount; + if (m_currTrack == 0) { - --m_pendingCount; - m_pending.erase(m_pending.begin()); - responseCallback(res); - delete res; + m_currTrack++; } + req->setTrack(m_currTrack); + res->setTrack(m_currTrack); + time_t timeout = time(nullptr) + m_requestTimeout; - while(m_outCount > 0) + req->setTimeout(timeout); + res->setTimeout(timeout); + + m_outboundQueue.push(pair(req, res)); + return(m_currTrack++); + } + + //---------------------------------------- + void GenericAPICore::process() + //---------------------------------------- + { + GenericRequest *req; + GenericResponse *res; + + if (!m_suspended) { - pair out_pair = m_outboundQueue.front(); - req = out_pair.first; - res = out_pair.second; - GenericConnection *con = nullptr; - if (req->getMappedServerTrack() == 0) // request has no originating "owner" server + // Process timeout on pending requests + while ((m_outCount > 0) && ((req = m_outboundQueue.front().first)->getTimeout() <= time(nullptr))) { - con = getNextActiveConnection(); // it does not matter which server we send this to + --m_outCount; + res = m_outboundQueue.front().second; + m_outboundQueue.pop(); + + responseCallback(res); + delete res; + delete req; } - else + + // Process timeout on pending responses + while ((m_pendingCount > 0) && ((res = (*m_pending.begin()).second)->getTimeout() <= time(nullptr))) { - ServerTrackObject *stobj = findServer(req->getMappedServerTrack()); - if (stobj) + --m_pendingCount; + m_pending.erase(m_pending.begin()); + responseCallback(res); + delete res; + } + + while (m_outCount > 0) + { + pair out_pair = m_outboundQueue.front(); + req = out_pair.first; + res = out_pair.second; + GenericConnection *con = nullptr; + if (req->getMappedServerTrack() == 0) // request has no originating "owner" server { - con = stobj->getConnection(); // the server connection to respond to - req->setServerTrack(stobj->getRealServerTrack()); // map server track back to REAL server track - //printf("\nUnmapping %d to %d", stobj->getMappedServerTrack(), req->getMappedServerTrack()); //debug - delete stobj; + con = getNextActiveConnection(); // it does not matter which server we send this to + } + else + { + ServerTrackObject *stobj = findServer(req->getMappedServerTrack()); + if (stobj) + { + con = stobj->getConnection(); // the server connection to respond to + req->setServerTrack(stobj->getRealServerTrack()); // map server track back to REAL server track + //printf("\nUnmapping %d to %d", stobj->getMappedServerTrack(), req->getMappedServerTrack()); //debug + delete stobj; + } + } + + if (con != nullptr) + { + Base::ByteStream msg; + req->pack(msg); + con->Send(msg); + m_pending.insert(pair(res->getTrack(), res)); + --m_outCount; + ++m_pendingCount; + m_outboundQueue.pop(); + delete req; + } + else + { + //no active connections + break; //from while loop } } + } - if (con != nullptr) - { - Base::ByteStream msg; - req->pack(msg); - con->Send(msg); - m_pending.insert(pair(res->getTrack(), res)); - --m_outCount; - ++m_pendingCount; - m_outboundQueue.pop(); - delete req; - } - else - { - //no active connections - break; //from while loop - } - + for (std::vector::iterator conIter = m_serverConnections.begin(); conIter != m_serverConnections.end(); conIter++) + { + GenericConnection *con = *conIter; + con->process(); } } - for (std::vector::iterator conIter = m_serverConnections.begin(); conIter != m_serverConnections.end(); conIter++) - { - GenericConnection *con = *conIter; - con->process(); - } -} + //---------------------------------------- + GenericConnection *GenericAPICore::getNextActiveConnection() + //---------------------------------------- + { + unsigned startIndex = m_nextConnectionIndex; + unsigned maxIndex = m_serverConnections.size() - 1; + GenericConnection *con = nullptr; -//---------------------------------------- -GenericConnection *GenericAPICore::getNextActiveConnection() -//---------------------------------------- -{ - unsigned startIndex = m_nextConnectionIndex; - unsigned maxIndex = m_serverConnections.size() - 1; + //loop until we find an active connection, or until we get back + // to where we started + do + { + if (m_serverConnections[m_nextConnectionIndex]->isConnected()) + { + con = m_serverConnections[m_nextConnectionIndex]; + if (m_nextConnectionIndex == maxIndex) + m_nextConnectionIndex = 0; + else + m_nextConnectionIndex++; + } + else if (++m_nextConnectionIndex > maxIndex) + { + //went past end of vector, start back at 0 + m_nextConnectionIndex = 0; + } + } while (con == nullptr && m_nextConnectionIndex != startIndex); - GenericConnection *con = nullptr; + return con; + } - //loop until we find an active connection, or until we get back - // to where we started - do - { - if (m_serverConnections[m_nextConnectionIndex]->isConnected()) - { - con = m_serverConnections[m_nextConnectionIndex]; - if (m_nextConnectionIndex == maxIndex) - m_nextConnectionIndex = 0; - else - m_nextConnectionIndex++; - - } - else if (++m_nextConnectionIndex > maxIndex) - { - //went past end of vector, start back at 0 - m_nextConnectionIndex = 0; - } - }while (con == nullptr && m_nextConnectionIndex != startIndex); + //---------------------------------------- + void GenericAPICore::countOpenConnections() + //---------------------------------------- + { + m_currentConnections = 0; + m_maxConnections = m_serverConnections.size(); - return con; -} + for (std::vector::iterator conIter = m_serverConnections.begin(); conIter != m_serverConnections.end(); conIter++) + { + GenericConnection *con = *conIter; + if (con->isConnected()) + ++m_currentConnections; + } + } -//---------------------------------------- -void GenericAPICore::countOpenConnections() -//---------------------------------------- -{ - m_currentConnections = 0; - m_maxConnections = m_serverConnections.size(); - - for (std::vector::iterator conIter = m_serverConnections.begin(); conIter != m_serverConnections.end(); conIter++) - { - GenericConnection *con = *conIter; - if (con->isConnected()) - ++m_currentConnections; - } -} - -//---------------------------------------- -ServerTrackObject *GenericAPICore::findServer(unsigned server_track) -//---------------------------------------- -{ - std::map::iterator iter = m_serverTracks.find(server_track); - if (iter == m_serverTracks.end()) - return nullptr; - ServerTrackObject *stobj = (*iter).second; - m_serverTracks.erase(server_track); - return stobj; -} + //---------------------------------------- + ServerTrackObject *GenericAPICore::findServer(unsigned server_track) + //---------------------------------------- + { + std::map::iterator iter = m_serverTracks.find(server_track); + if (iter == m_serverTracks.end()) + return nullptr; + ServerTrackObject *stobj = (*iter).second; + m_serverTracks.erase(server_track); + return stobj; + } #ifdef EXTERNAL_DISTRO }; -#endif +#endif \ No newline at end of file diff --git a/engine/server/application/CentralServer/src/shared/AuctionTransferGameAPI/ATGenericAPI/GenericConnection.cpp b/engine/server/application/CentralServer/src/shared/AuctionTransferGameAPI/ATGenericAPI/GenericConnection.cpp index 11571d48..88aa786b 100755 --- a/engine/server/application/CentralServer/src/shared/AuctionTransferGameAPI/ATGenericAPI/GenericConnection.cpp +++ b/engine/server/application/CentralServer/src/shared/AuctionTransferGameAPI/ATGenericAPI/GenericConnection.cpp @@ -15,187 +15,188 @@ #define GAME_RESOURCE 1 #ifdef EXTERNAL_DISTRO -namespace NAMESPACE +namespace NAMESPACE { #endif -using namespace std; -using namespace Base; + using namespace std; + using namespace Base; -GenericConnection::GenericConnection(const char *host, short port, GenericAPICore *apiCore, unsigned reconnectTimeout, unsigned noDataTimeoutSecs, unsigned, unsigned incomingBufSizeInKB, unsigned outgoingBufSizeInKB, unsigned keepAlive, unsigned maxRecvMessageSizeInKB) -: m_bConnected(CON_NONE), - m_apiCore(apiCore), - m_con(nullptr), - m_host(host), - m_port(port), - m_conState(CON_DISCONNECT), - m_reconnectTimeout(reconnectTimeout) -{ - TcpManager::TcpParams params; - - params.incomingBufferSize = incomingBufSizeInKB * 1024; - params.outgoingBufferSize = outgoingBufSizeInKB * 1024; - params.maxConnections = 1; - params.port = 0; - params.maxRecvMessageSize = maxRecvMessageSizeInKB*1024; - params.keepAliveDelay = keepAlive * 1000; - params.noDataTimeout = noDataTimeoutSecs * 1000; - //params.oldestUnacknowledgedTimeout = noAckTimeoutSecs * 1000; - - m_manager = new TcpManager(params); -} - -GenericConnection::~GenericConnection() -{ - if(m_con) + GenericConnection::GenericConnection(const char *host, short port, GenericAPICore *apiCore, unsigned reconnectTimeout, unsigned noDataTimeoutSecs, unsigned, unsigned incomingBufSizeInKB, unsigned outgoingBufSizeInKB, unsigned keepAlive, unsigned maxRecvMessageSizeInKB) + : m_bConnected(CON_NONE), + m_apiCore(apiCore), + m_con(nullptr), + m_host(host), + m_port(port), + m_conState(CON_DISCONNECT), + m_reconnectTimeout(reconnectTimeout), + m_conTimeout(0) { - m_con->SetHandler(nullptr); - m_con->Disconnect();//don't worry about onterminated being called, we've set it's handler to nullptr, so it wont - m_con->Release(); + TcpManager::TcpParams params; + + params.incomingBufferSize = incomingBufSizeInKB * 1024; + params.outgoingBufferSize = outgoingBufSizeInKB * 1024; + params.maxConnections = 1; + params.port = 0; + params.maxRecvMessageSize = maxRecvMessageSizeInKB * 1024; + params.keepAliveDelay = keepAlive * 1000; + params.noDataTimeout = noDataTimeoutSecs * 1000; + //params.oldestUnacknowledgedTimeout = noAckTimeoutSecs * 1000; + + m_manager = new TcpManager(params); } - m_manager->Release(); -} - -void GenericConnection::disconnect() -{ - if (m_con) + GenericConnection::~GenericConnection() { - m_con->Disconnect(); - //no need to release, since callback to onTerminated releases it, and callback is allways made m_con->Release(); - m_con = nullptr; + if (m_con) + { + m_con->SetHandler(nullptr); + m_con->Disconnect();//don't worry about onterminated being called, we've set it's handler to nullptr, so it wont + m_con->Release(); + } + + m_manager->Release(); } - m_conState = CON_DISCONNECT; - m_bConnected = CON_NONE; -} -void GenericConnection::OnTerminated(TcpConnection *) -{ -// m_apiCore->OnDisconnect(m_host.c_str(), m_port); - m_apiCore->OnDisconnect(this); - if(m_con) + void GenericConnection::disconnect() { - m_con->Release(); - m_con = nullptr; + if (m_con) + { + m_con->Disconnect(); + //no need to release, since callback to onTerminated releases it, and callback is allways made m_con->Release(); + m_con = nullptr; + } + m_conState = CON_DISCONNECT; + m_bConnected = CON_NONE; } - m_conState = CON_DISCONNECT; - m_bConnected = CON_NONE; -} -void GenericConnection::OnRoutePacket(TcpConnection *, const unsigned char *data, int dataLen) -{ - short type; - unsigned track; - - ByteStream msg(data, dataLen); - ByteStream::ReadIterator iter = msg.begin(); - - get(iter, type); - get(iter, track); - GenericResponse *res = nullptr; - - if(track == 0) // notification message from the server, not as a response to a request from this API + void GenericConnection::OnTerminated(TcpConnection *) { - if (type == ATGAME_REQUEST_CONNECT) - { // this is a special case, for when we have identified our game code to server - m_bConnected = CON_IDENTIFIED; - m_apiCore->OnConnect(this); + // m_apiCore->OnDisconnect(m_host.c_str(), m_port); + m_apiCore->OnDisconnect(this); + if (m_con) + { + m_con->Release(); + m_con = nullptr; + } + m_conState = CON_DISCONNECT; + m_bConnected = CON_NONE; + } + + void GenericConnection::OnRoutePacket(TcpConnection *, const unsigned char *data, int dataLen) + { + short type; + unsigned track; + + ByteStream msg(data, dataLen); + ByteStream::ReadIterator iter = msg.begin(); + + get(iter, type); + get(iter, track); + GenericResponse *res = nullptr; + + if (track == 0) // notification message from the server, not as a response to a request from this API + { + if (type == ATGAME_REQUEST_CONNECT) + { // this is a special case, for when we have identified our game code to server + m_bConnected = CON_IDENTIFIED; + m_apiCore->OnConnect(this); + } + else + { + m_apiCore->responseCallback(type, iter, this); + } } else { - m_apiCore->responseCallback(type, iter, this); + map::iterator mapIter = m_apiCore->m_pending.find(track); + + if (mapIter != m_apiCore->m_pending.end()) + { + res = (*mapIter).second; + iter = msg.begin(); + res->unpack(iter); + m_apiCore->responseCallback(res); + m_apiCore->m_pendingCount--; + m_apiCore->m_pending.erase(mapIter); + delete res; + } } } - else + + void GenericConnection::process() { - map::iterator mapIter = m_apiCore->m_pending.find(track); - - if(mapIter != m_apiCore->m_pending.end()) + switch (m_conState) { - res = (*mapIter).second; - iter = msg.begin(); - res->unpack(iter); - m_apiCore->responseCallback(res); - m_apiCore->m_pendingCount--; - m_apiCore->m_pending.erase(mapIter); - delete res; - } - } -} + case CON_DISCONNECT: + // create connection object, attempting to connect and + // checking for connection in next state, CON_NEGOTIATE + m_con = m_manager->EstablishConnection(m_host.c_str(), m_port); + if (m_con) + { + m_con->SetHandler(this); + m_conState = CON_NEGOTIATE; + m_conTimeout = time(nullptr) + m_reconnectTimeout; + } + break; + case CON_NEGOTIATE: + // check for connection -void GenericConnection::process() -{ - switch(m_conState) - { - case CON_DISCONNECT: - // create connection object, attempting to connect and - // checking for connection in next state, CON_NEGOTIATE - m_con = m_manager->EstablishConnection(m_host.c_str(), m_port); - if(m_con) - { - m_con->SetHandler(this); - m_conState = CON_NEGOTIATE; - m_conTimeout = time(nullptr) + m_reconnectTimeout; - } - break; - case CON_NEGOTIATE: - // check for connection + if (m_con->GetStatus() == TcpConnection::StatusConnected) + { + // we're connected + m_conState = CON_CONNECT; + m_bConnected = CON_CONNECTED; + // instead of calling OnConnect() right now, we are going to submit a connection packet + // identifying us + // m_apiCore->OnConnect(this); + Base::ByteStream msg; + put(msg, (short)REQUEST_SET_API); + put(msg, (unsigned)0); // track + put(msg, (unsigned)API_VERSION_CODE); + put(msg, GAME_RESOURCE); // identify us as a game connection resource - if(m_con->GetStatus() == TcpConnection::StatusConnected) - { - // we're connected - m_conState = CON_CONNECT; - m_bConnected = CON_CONNECTED; - // instead of calling OnConnect() right now, we are going to submit a connection packet - // identifying us -// m_apiCore->OnConnect(this); - Base::ByteStream msg; - put(msg, (short)REQUEST_SET_API); - put(msg, (unsigned)0); // track - put(msg, (unsigned)API_VERSION_CODE); - put(msg, GAME_RESOURCE); // identify us as a game connection resource - - // now add in the game identifiers - put(msg, (unsigned)m_apiCore->m_gameIdentifiers.size()); // number of strings to read - for(unsigned index = 0; index < m_apiCore->m_gameIdentifiers.size(); index++) - put(msg, std::string(m_apiCore->m_gameIdentifiers[index])); - Send(msg); - } - else if(time(nullptr) > m_conTimeout) - { - // we did not connect - m_con->Disconnect(); - //no need to release, since callback to onTerminated releases it, and callback is allways made m_con->Release(); - m_con = nullptr; + // now add in the game identifiers + put(msg, (unsigned)m_apiCore->m_gameIdentifiers.size()); // number of strings to read + for (unsigned index = 0; index < m_apiCore->m_gameIdentifiers.size(); index++) + put(msg, std::string(m_apiCore->m_gameIdentifiers[index])); + Send(msg); + } + else if (time(nullptr) > m_conTimeout) + { + // we did not connect + m_con->Disconnect(); + //no need to release, since callback to onTerminated releases it, and callback is allways made m_con->Release(); + m_con = nullptr; + m_conState = CON_DISCONNECT; + m_bConnected = CON_NONE; + } + break; + case CON_CONNECT: + // do nothing + break; + default: + // this should not occur, but we revert to CON_DISCONNECT if it does m_conState = CON_DISCONNECT; - m_bConnected = CON_NONE; - } - break; - case CON_CONNECT: - // do nothing - break; - default: - // this should not occur, but we revert to CON_DISCONNECT if it does - m_conState = CON_DISCONNECT; - m_bConnected = CON_NONE; - if (m_con) - { - m_con->Disconnect(); - //no need to release, since callback to onTerminated releases it, and callback is allways made m_con->Release(); - m_con = nullptr; + m_bConnected = CON_NONE; + if (m_con) + { + m_con->Disconnect(); + //no need to release, since callback to onTerminated releases it, and callback is allways made m_con->Release(); + m_con = nullptr; + } } + m_manager->GiveTime(); } - m_manager->GiveTime(); -} -void GenericConnection::Send(Base::ByteStream &msg) -{ - if(m_con && m_con->GetStatus() == TcpConnection::StatusConnected) + void GenericConnection::Send(Base::ByteStream &msg) { - m_con->Send((const char *)msg.getBuffer(), msg.getSize()); + if (m_con && m_con->GetStatus() == TcpConnection::StatusConnected) + { + m_con->Send((const char *)msg.getBuffer(), msg.getSize()); + } } -} #ifdef EXTERNAL_DISTRO }; -#endif +#endif \ No newline at end of file diff --git a/engine/server/application/CentralServer/src/shared/AuctionTransferGameAPI/ATGenericAPI/GenericMessage.cpp b/engine/server/application/CentralServer/src/shared/AuctionTransferGameAPI/ATGenericAPI/GenericMessage.cpp index c01729d8..e97312fd 100755 --- a/engine/server/application/CentralServer/src/shared/AuctionTransferGameAPI/ATGenericAPI/GenericMessage.cpp +++ b/engine/server/application/CentralServer/src/shared/AuctionTransferGameAPI/ATGenericAPI/GenericMessage.cpp @@ -9,36 +9,35 @@ //---------------------------------------- #ifdef EXTERNAL_DISTRO -namespace NAMESPACE +namespace NAMESPACE { - #endif -using namespace Base; + using namespace Base; -//------------------------------------------- -GenericRequest::GenericRequest(short type, unsigned server_track) -: m_type(type), m_server_track(server_track) -//------------------------------------------- -{ -} + //------------------------------------------- + GenericRequest::GenericRequest(short type, unsigned server_track) + : m_type(type), m_server_track(server_track), m_track(0), m_timeout(0) + //------------------------------------------- + { + } -//------------------------------------------- -GenericResponse::GenericResponse(short type, unsigned result, void *user) -: m_type(type), m_result(result), m_user(user) -//------------------------------------------- -{ -} + //------------------------------------------- + GenericResponse::GenericResponse(short type, unsigned result, void *user) + : m_type(type), m_result(result), m_user(user), m_track(0), m_timeout(0) + //------------------------------------------- + { + } -//----------------------------------------- -void GenericResponse::unpack(ByteStream::ReadIterator &iter) -//----------------------------------------- -{ - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} + //----------------------------------------- + void GenericResponse::unpack(ByteStream::ReadIterator &iter) + //----------------------------------------- + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } #ifdef EXTERNAL_DISTRO }; -#endif +#endif \ No newline at end of file diff --git a/engine/server/application/CentralServer/src/shared/AuctionTransferGameAPI/TcpLibrary/TcpManager.cpp b/engine/server/application/CentralServer/src/shared/AuctionTransferGameAPI/TcpLibrary/TcpManager.cpp index 7c00d9f6..7202f4a3 100755 --- a/engine/server/application/CentralServer/src/shared/AuctionTransferGameAPI/TcpLibrary/TcpManager.cpp +++ b/engine/server/application/CentralServer/src/shared/AuctionTransferGameAPI/TcpLibrary/TcpManager.cpp @@ -4,743 +4,719 @@ #include "TcpConnection.h" #ifndef WIN32 - #include +#include #endif - #ifdef EXTERNAL_DISTRO -namespace NAMESPACE +namespace NAMESPACE { #endif -TcpManager::TcpParams::TcpParams() -: port(0), - maxConnections(10), - incomingBufferSize(64*1024), - outgoingBufferSize(64*1024), - allocatorBlockSize(8*1024), - allocatorBlockCount(16), - maxRecvMessageSize(0), - keepAliveDelay(0), - noDataTimeout(0) -{ - memset(bindAddress, 0, sizeof(bindAddress)); -} + TcpManager::TcpParams::TcpParams() + : port(0), + maxConnections(10), + incomingBufferSize(64 * 1024), + outgoingBufferSize(64 * 1024), + allocatorBlockSize(8 * 1024), + allocatorBlockCount(16), + maxRecvMessageSize(0), + keepAliveDelay(0), + noDataTimeout(0) + { + memset(bindAddress, 0, sizeof(bindAddress)); + } -TcpManager::TcpParams::TcpParams(const TcpParams &cpy) -: port(cpy.port), - maxConnections(cpy.maxConnections), - incomingBufferSize(cpy.incomingBufferSize), - outgoingBufferSize(cpy.outgoingBufferSize), - allocatorBlockSize(cpy.allocatorBlockSize), - allocatorBlockCount(cpy.allocatorBlockCount), - maxRecvMessageSize(cpy.maxRecvMessageSize), - keepAliveDelay(cpy.keepAliveDelay), - noDataTimeout(cpy.noDataTimeout) -{ -} + TcpManager::TcpParams::TcpParams(const TcpParams &cpy) + : port(cpy.port), + maxConnections(cpy.maxConnections), + incomingBufferSize(cpy.incomingBufferSize), + outgoingBufferSize(cpy.outgoingBufferSize), + allocatorBlockSize(cpy.allocatorBlockSize), + allocatorBlockCount(cpy.allocatorBlockCount), + maxRecvMessageSize(cpy.maxRecvMessageSize), + keepAliveDelay(cpy.keepAliveDelay), + noDataTimeout(cpy.noDataTimeout) + { + } -TcpManager::TcpManager(const TcpParams ¶ms) -: m_handler(nullptr), - m_keepAliveList(nullptr, 1), - m_aliveList(nullptr, 2), - m_noDataList(nullptr, 1), - m_dataList(nullptr, 2), - m_params(params), - m_refCount(1), - m_connectionList(nullptr), - m_connectionListCount(0), - m_socket(INVALID_SOCKET), - m_boundAsServer(false), - m_allocator(params.allocatorBlockSize, params.allocatorBlockCount), - m_keepAliveTimer(), - m_noDataTimer() -{ - if (params.keepAliveDelay > 0) - m_keepAliveTimer.start(); + TcpManager::TcpManager(const TcpParams ¶ms) + : m_handler(nullptr), + m_keepAliveList(nullptr, 1), + m_aliveList(nullptr, 2), + m_noDataList(nullptr, 1), + m_dataList(nullptr, 2), + m_params(params), + m_refCount(1), + m_connectionList(nullptr), + m_connectionListCount(0), + m_socket(INVALID_SOCKET), + m_boundAsServer(false), + m_allocator(params.allocatorBlockSize, params.allocatorBlockCount), + m_keepAliveTimer(), + m_noDataTimer() +#if defined(WIN32) + , m_permfds() +#endif + { + if (params.keepAliveDelay > 0) + m_keepAliveTimer.start(); - if (params.noDataTimeout > 0) - m_noDataTimer.start(); + if (params.noDataTimeout > 0) + m_noDataTimer.start(); #if defined(WIN32) - WSADATA wsaData; - WSAStartup(MAKEWORD(1,1), &wsaData); + WSADATA wsaData; + WSAStartup(MAKEWORD(1, 1), &wsaData); - FD_ZERO(&m_permfds);//select only used on win32 + FD_ZERO(&m_permfds);//select only used on win32 +#endif + } + + TcpManager::~TcpManager() + { +#if defined(WIN32) + WSACleanup(); #endif -} - - -TcpManager::~TcpManager() -{ + if (m_boundAsServer) + { #if defined(WIN32) - WSACleanup(); -#endif - - if (m_boundAsServer) - { -#if defined(WIN32) - closesocket(m_socket); + closesocket(m_socket); #else - close(m_socket); + close(m_socket); #endif - } - while (m_connectionList != nullptr) - { - TcpConnection *con = m_connectionList; - m_connectionList = m_connectionList->m_nextConnection; - con->Release(); - m_connectionListCount--; - } -} + } + while (m_connectionList != nullptr) + { + TcpConnection *con = m_connectionList; + m_connectionList = m_connectionList->m_nextConnection; + con->Release(); + m_connectionListCount--; + } + } + bool TcpManager::BindAsServer() + { + m_socket = socket(AF_INET, SOCK_STREAM, 0); -bool TcpManager::BindAsServer() -{ - - m_socket = socket(AF_INET, SOCK_STREAM, 0); - - if (m_socket != INVALID_SOCKET) - { + if (m_socket != INVALID_SOCKET) + { #if defined(WIN32) #pragma warning(push) #pragma warning(disable : 4127) - FD_SET(m_socket, &m_permfds);//the socket this server is listening on + FD_SET(m_socket, &m_permfds);//the socket this server is listening on #pragma warning(pop) - unsigned long isNonBlocking = 1; - int outBufSize = m_params.outgoingBufferSize; - int inBufSize = m_params.incomingBufferSize; - int keepAlive = 1; - int reuseAddr = 1; - struct linger ld; - ld.l_onoff = 0; - ld.l_linger = 0; + unsigned long isNonBlocking = 1; + int outBufSize = m_params.outgoingBufferSize; + int inBufSize = m_params.incomingBufferSize; + int keepAlive = 1; + int reuseAddr = 1; + struct linger ld; + ld.l_onoff = 0; + ld.l_linger = 0; - if (ioctlsocket(m_socket, FIONBIO, &isNonBlocking) != 0 - || setsockopt(m_socket, SOL_SOCKET, SO_SNDBUF, (char *)&outBufSize, sizeof(outBufSize)) != 0 - || setsockopt(m_socket, SOL_SOCKET, SO_RCVBUF, (char *)&inBufSize, sizeof(inBufSize)) != 0 - || setsockopt(m_socket, SOL_SOCKET, SO_KEEPALIVE, (char *)&keepAlive, sizeof(keepAlive)) != 0 - || setsockopt(m_socket, SOL_SOCKET, SO_REUSEADDR, (char *)&reuseAddr, sizeof(reuseAddr)) != 0 - || setsockopt(m_socket, SOL_SOCKET, SO_LINGER, (char *)&ld, sizeof(ld)) != 0 ) - { - return false; - } + if (ioctlsocket(m_socket, FIONBIO, &isNonBlocking) != 0 + || setsockopt(m_socket, SOL_SOCKET, SO_SNDBUF, (char *)&outBufSize, sizeof(outBufSize)) != 0 + || setsockopt(m_socket, SOL_SOCKET, SO_RCVBUF, (char *)&inBufSize, sizeof(inBufSize)) != 0 + || setsockopt(m_socket, SOL_SOCKET, SO_KEEPALIVE, (char *)&keepAlive, sizeof(keepAlive)) != 0 + || setsockopt(m_socket, SOL_SOCKET, SO_REUSEADDR, (char *)&reuseAddr, sizeof(reuseAddr)) != 0 + || setsockopt(m_socket, SOL_SOCKET, SO_LINGER, (char *)&ld, sizeof(ld)) != 0) + { + return false; + } #else // linux is to remain the default compile mode - unsigned long isNonBlocking = 1; - unsigned long keepAlive = 1; - unsigned long outBufSize = m_params.outgoingBufferSize; - unsigned long inBufSize = m_params.incomingBufferSize; - unsigned long reuseAddr = 1; - struct linger ld; - ld.l_onoff = 0; - ld.l_linger = 0; + unsigned long isNonBlocking = 1; + unsigned long keepAlive = 1; + unsigned long outBufSize = m_params.outgoingBufferSize; + unsigned long inBufSize = m_params.incomingBufferSize; + unsigned long reuseAddr = 1; + struct linger ld; + ld.l_onoff = 0; + ld.l_linger = 0; - if (ioctl(m_socket, FIONBIO, &isNonBlocking) != 0 - || setsockopt(m_socket, SOL_SOCKET, SO_SNDBUF, &outBufSize, sizeof(outBufSize)) != 0 - || setsockopt(m_socket, SOL_SOCKET, SO_RCVBUF, &inBufSize, sizeof(inBufSize)) != 0 - || setsockopt(m_socket, SOL_SOCKET, SO_KEEPALIVE, &keepAlive, sizeof(keepAlive)) != 0 - || setsockopt(m_socket, SOL_SOCKET, SO_REUSEADDR, &reuseAddr, sizeof(reuseAddr)) != 0 - || setsockopt(m_socket, SOL_SOCKET, SO_LINGER, &ld, sizeof(ld)) != 0) - { - return false; - } + if (ioctl(m_socket, FIONBIO, &isNonBlocking) != 0 + || setsockopt(m_socket, SOL_SOCKET, SO_SNDBUF, &outBufSize, sizeof(outBufSize)) != 0 + || setsockopt(m_socket, SOL_SOCKET, SO_RCVBUF, &inBufSize, sizeof(inBufSize)) != 0 + || setsockopt(m_socket, SOL_SOCKET, SO_KEEPALIVE, &keepAlive, sizeof(keepAlive)) != 0 + || setsockopt(m_socket, SOL_SOCKET, SO_REUSEADDR, &reuseAddr, sizeof(reuseAddr)) != 0 + || setsockopt(m_socket, SOL_SOCKET, SO_LINGER, &ld, sizeof(ld)) != 0) + { + return false; + } #endif - } - else - { - return false; - } + } + else + { + return false; + } + struct sockaddr_in addr_loc; + addr_loc.sin_family = AF_INET; + addr_loc.sin_port = htons(m_params.port); + addr_loc.sin_addr.s_addr = htonl(INADDR_ANY); + if (m_params.bindAddress[0] != 0) + { + unsigned long address = inet_addr(m_params.bindAddress); + if (address == INADDR_NONE) + { + struct hostent * lphp; + lphp = gethostbyname(m_params.bindAddress); + if (lphp != nullptr) + addr_loc.sin_addr.s_addr = ((struct in_addr *)(lphp->h_addr))->s_addr; + } + else + { + addr_loc.sin_addr.s_addr = address; + } + } - struct sockaddr_in addr_loc; - addr_loc.sin_family = AF_INET; - addr_loc.sin_port = htons(m_params.port); - addr_loc.sin_addr.s_addr = htonl(INADDR_ANY); - if (m_params.bindAddress[0] != 0) - { - unsigned long address = inet_addr(m_params.bindAddress); - if (address == INADDR_NONE) - { - struct hostent * lphp; - lphp = gethostbyname(m_params.bindAddress); - if (lphp != nullptr) - addr_loc.sin_addr.s_addr = ((struct in_addr *)(lphp->h_addr))->s_addr; - } - else - { - addr_loc.sin_addr.s_addr = address; - } - } + if (bind(m_socket, (struct sockaddr *)&addr_loc, sizeof(addr_loc)) != 0) + { + return false; + } - if (bind(m_socket, (struct sockaddr *)&addr_loc, sizeof(addr_loc)) != 0) - { - return false; - } + if (listen(m_socket, 1000) != 0) + { + return false; + } - if (listen(m_socket, 1000) != 0) - { - return false; - } + m_boundAsServer = true; + return true; + } - m_boundAsServer = true; - return true; -} + TcpConnection *TcpManager::acceptClient() + { + TcpConnection *newConn = nullptr; -TcpConnection *TcpManager::acceptClient() -{ - TcpConnection *newConn = nullptr; - - if (m_boundAsServer && m_connectionListCount < m_params.maxConnections) - { + if (m_boundAsServer && m_connectionListCount < m_params.maxConnections) + { + sockaddr_in addr; + int addrLength = sizeof(addr); + SOCKET sock = ::accept(m_socket, (sockaddr *)&addr, (socklen_t *)&addrLength); - sockaddr_in addr; - int addrLength = sizeof(addr); - SOCKET sock = ::accept(m_socket, (sockaddr *) &addr, (socklen_t *) &addrLength); + if (sock != INVALID_SOCKET) + { + newConn = new TcpConnection(this, &m_allocator, m_params, sock, IPAddress(addr.sin_addr.s_addr), ntohs(addr.sin_port)); + addNewConnection(newConn); + if (m_handler != nullptr) + { + m_handler->OnConnectRequest(newConn); + } + } + } + return newConn; + } - if (sock != INVALID_SOCKET) - { - newConn = new TcpConnection(this, &m_allocator, m_params, sock, IPAddress(addr.sin_addr.s_addr), ntohs(addr.sin_port)); - addNewConnection(newConn); - if (m_handler != nullptr) - { - m_handler->OnConnectRequest(newConn); - } - } - } + void TcpManager::SetHandler(TcpManagerHandler *handler) + { + m_handler = handler; + } - return newConn; -} - -void TcpManager::SetHandler(TcpManagerHandler *handler) -{ - m_handler = handler; -} - -SOCKET TcpManager::getMaxFD() -{ + SOCKET TcpManager::getMaxFD() + { #ifdef WIN32 - return 0;//this param is not used on win32 for select, only on unix + return 0;//this param is not used on win32 for select, only on unix #else - SOCKET maxfd = 0; - - if (m_boundAsServer) - maxfd = m_socket+1; - - TcpConnection *next = nullptr; - for (TcpConnection *con = m_connectionList ; con != nullptr ; con = next) - { - next = con->m_nextConnection; - if (con->GetStatus() != TcpConnection::StatusDisconnected && con->m_socket > maxfd) - { - maxfd = con->m_socket + 1; - } - } - return maxfd; + SOCKET maxfd = 0; + + if (m_boundAsServer) + maxfd = m_socket + 1; + + TcpConnection *next = nullptr; + for (TcpConnection *con = m_connectionList; con != nullptr; con = next) + { + next = con->m_nextConnection; + if (con->GetStatus() != TcpConnection::StatusDisconnected && con->m_socket > maxfd) + { + maxfd = con->m_socket + 1; + } + } + return maxfd; #endif -} + } -TcpConnection *TcpManager::getConnection(SOCKET fd) -{ - TcpConnection *next = nullptr; - for (TcpConnection *con = m_connectionList ; con != nullptr ; con = next) - { - next = con->m_nextConnection; - if (con->m_socket == fd) - { - return con; - } - } - //if get here ,couldn't find it - return nullptr; -} + TcpConnection *TcpManager::getConnection(SOCKET fd) + { + TcpConnection *next = nullptr; + for (TcpConnection *con = m_connectionList; con != nullptr; con = next) + { + next = con->m_nextConnection; + if (con->m_socket == fd) + { + return con; + } + } + //if get here ,couldn't find it + return nullptr; + } -bool TcpManager::GiveTime(unsigned maxTimeAcceptingConnections,unsigned maxSendTimePerConnection, unsigned maxRecvTimePerConnection) -{ - bool processedIncoming = false; + bool TcpManager::GiveTime(unsigned maxTimeAcceptingConnections, unsigned maxSendTimePerConnection, unsigned maxRecvTimePerConnection) + { + bool processedIncoming = false; - if (maxTimeAcceptingConnections == 0 && maxSendTimePerConnection==0 && maxRecvTimePerConnection==0) - { - //they don't want to do anything now - return processedIncoming; - } + if (maxTimeAcceptingConnections == 0 && maxSendTimePerConnection == 0 && maxRecvTimePerConnection == 0) + { + //they don't want to do anything now + return processedIncoming; + } - AddRef(); //keep a reference to ourself in case we callback to the application and the application releases us. + AddRef(); //keep a reference to ourself in case we callback to the application and the application releases us. + //first process outgoing on each connection, and finish establishing connections, if params say to + if (m_connectionListCount != 0 && maxSendTimePerConnection != 0) + { + // Send output from last heartbeat + TcpConnection *next = nullptr; + for (TcpConnection *con = m_connectionList; con != nullptr; con = next) + { + con->AddRef(); + if (next) next->Release(); + next = con->m_nextConnection; + if (next) next->AddRef(); + if (con->GetStatus() == TcpConnection::StatusConnected) + { + Clock timer; + timer.start(); + while (!timer.isDone(maxSendTimePerConnection)) + { + int err = con->processOutgoing(); - - //first process outgoing on each connection, and finish establishing connections, if params say to - if (m_connectionListCount != 0 && maxSendTimePerConnection != 0) - { - - // Send output from last heartbeat - TcpConnection *next = nullptr; - for (TcpConnection *con = m_connectionList ; con != nullptr ; con = next) - { - con->AddRef(); - if (next) next->Release(); - next = con->m_nextConnection; - if (next) next->AddRef(); - if(con->GetStatus() == TcpConnection::StatusConnected) - { - Clock timer; - timer.start(); - while(!timer.isDone(maxSendTimePerConnection)) - { - int err = con->processOutgoing(); - - if (err > 0) - { - //couldn't finish processing last request, don't try more - break; - } - else if (err < 0) - { - break; - } - } - con->Release(); - } - else if (con->GetStatus() == TcpConnection::StatusNegotiating) - { - if (con->finishConnect() < 0) - { + if (err > 0) + { + //couldn't finish processing last request, don't try more + break; + } + else if (err < 0) + { + break; + } + } con->Release(); - continue; - } - con->Release(); - } - else //inactive client in client list???? - { - removeConnection(con); - con->Release(); - continue; - } - } - - } - - //process incoming messages (including connect requests) - if (( - m_boundAsServer //if in server mode and want to spend time accepting clients - && maxTimeAcceptingConnections != 0 - ) - || - ( - m_connectionListCount != 0 //if there are connections and want to spend time receiving on them - && maxRecvTimePerConnection != 0 - ) - ) - { -#ifdef WIN32 - SOCKET maxfd = getMaxFD(); //re-calc maxfd every time select on WIN32 - - //select on all fd's - struct timeval timeout; - - fd_set tmpfds; - tmpfds = m_permfds; - timeout.tv_sec = 0; - timeout.tv_usec = 0; - int cnt = select(maxfd, &tmpfds, nullptr, nullptr, &timeout); // blocks for timeout - - - if (cnt > 0) - { - if (m_boundAsServer && maxTimeAcceptingConnections != 0) - {//activity on our socket means connect requests - - //see if are new incoming clients - if (FD_ISSET(m_socket, &tmpfds)) - { - //yep - Clock timer; - timer.start(); - while (acceptClient() && !timer.isDone(maxTimeAcceptingConnections)) - { - //loop - } - } - } - - - - //process incoming client messages - if (maxRecvTimePerConnection != 0) - { - TcpConnection *next = nullptr; - for (TcpConnection *con = m_connectionList ; con != nullptr ; con = next) - { - con->AddRef(); - if (next) next->Release(); - next = con->m_nextConnection; - if (next) next->AddRef(); - - SOCKET fd = con->m_socket; - if (fd == INVALID_SOCKET) - { - //invalid socket in list?, check if is connecting, otherwise, Disconnect and discard - if (con->GetStatus() != TcpConnection::StatusNegotiating) - { - removeConnection(con); - con->Release(); - continue; - } - } - - if (FD_ISSET(fd, &tmpfds)) - { - Clock timer; - timer.start(); - while(!timer.isDone(maxRecvTimePerConnection) && con->GetStatus() == TcpConnection::StatusConnected) - { - int err = con->processIncoming(); - if (err >= 0) - { - processedIncoming = true; - } - - if (err > 0) - { - //couldn't finish processing last request, don't try more - break; - } - else if (err < 0) - { - break; - } - - }//while(!timer...) - }//if (FD_ISSET...) + } + else if (con->GetStatus() == TcpConnection::StatusNegotiating) + { + if (con->finishConnect() < 0) + { + con->Release(); + continue; + } con->Release(); - }//for (...) - } //maxRecvTimePerConnection != 0 - }//cnt > 0 + } + else //inactive client in client list???? + { + removeConnection(con); + con->Release(); + continue; + } + } + } + + //process incoming messages (including connect requests) + if (( + m_boundAsServer //if in server mode and want to spend time accepting clients + && maxTimeAcceptingConnections != 0 + ) + || + ( + m_connectionListCount != 0 //if there are connections and want to spend time receiving on them + && maxRecvTimePerConnection != 0 + ) + ) + { +#ifdef WIN32 + SOCKET maxfd = getMaxFD(); //re-calc maxfd every time select on WIN32 + + //select on all fd's + struct timeval timeout; + + fd_set tmpfds; + tmpfds = m_permfds; + timeout.tv_sec = 0; + timeout.tv_usec = 0; + int cnt = select(maxfd, &tmpfds, nullptr, nullptr, &timeout); // blocks for timeout + + if (cnt > 0) + { + if (m_boundAsServer && maxTimeAcceptingConnections != 0) + {//activity on our socket means connect requests + //see if are new incoming clients + if (FD_ISSET(m_socket, &tmpfds)) + { + //yep + Clock timer; + timer.start(); + while (acceptClient() && !timer.isDone(maxTimeAcceptingConnections)) + { + //loop + } + } + } + + //process incoming client messages + if (maxRecvTimePerConnection != 0) + { + TcpConnection *next = nullptr; + for (TcpConnection *con = m_connectionList; con != nullptr; con = next) + { + con->AddRef(); + if (next) next->Release(); + next = con->m_nextConnection; + if (next) next->AddRef(); + + SOCKET fd = con->m_socket; + if (fd == INVALID_SOCKET) + { + //invalid socket in list?, check if is connecting, otherwise, Disconnect and discard + if (con->GetStatus() != TcpConnection::StatusNegotiating) + { + removeConnection(con); + con->Release(); + continue; + } + } + + if (FD_ISSET(fd, &tmpfds)) + { + Clock timer; + timer.start(); + while (!timer.isDone(maxRecvTimePerConnection) && con->GetStatus() == TcpConnection::StatusConnected) + { + int err = con->processIncoming(); + if (err >= 0) + { + processedIncoming = true; + } + + if (err > 0) + { + //couldn't finish processing last request, don't try more + break; + } + else if (err < 0) + { + break; + } + }//while(!timer...) + }//if (FD_ISSET...) + con->Release(); + }//for (...) + } //maxRecvTimePerConnection != 0 + }//cnt > 0 #else //on UNIX use poll - int numfds = m_connectionListCount; - int idx = 0; - if (m_boundAsServer) - { - numfds++; - idx++; - } + int numfds = m_connectionListCount; + int idx = 0; + if (m_boundAsServer) + { + numfds++; + idx++; + } - struct pollfd pollfds[numfds]; + struct pollfd pollfds[numfds]; - if (m_boundAsServer) - { - pollfds[0].fd = m_socket; - pollfds[0].events |= POLLIN; - } + if (m_boundAsServer) + { + pollfds[0].fd = m_socket; + pollfds[0].events |= POLLIN; + } - TcpConnection *next = nullptr; - for (TcpConnection *con = m_connectionList ; con != nullptr ; con = next, idx++) - { - next = con->m_nextConnection; - pollfds[idx].fd = con->m_socket; - pollfds[idx].events |= POLLIN; - pollfds[idx].events |= POLLHUP; - } - + TcpConnection *next = nullptr; + for (TcpConnection *con = m_connectionList; con != nullptr; con = next, idx++) + { + next = con->m_nextConnection; + pollfds[idx].fd = con->m_socket; + pollfds[idx].events |= POLLIN; + pollfds[idx].events |= POLLHUP; + } - int cnt = poll(pollfds, numfds, 1); + int cnt = poll(pollfds, numfds, 1); - if(cnt == SOCKET_ERROR) - { - //poll not working? - //TODO: need to notify client somehow, don't think we can assume a fatal error here - } - else if (cnt > 0) - { - for (idx = 0; idx < numfds; idx++) - { - //find corresponding TcpConnection - //TODO: optimize, seriously, this is takes linear time, every time - TcpConnection *con = getConnection(pollfds[idx].fd); + if (cnt == SOCKET_ERROR) + { + //poll not working? + //TODO: need to notify client somehow, don't think we can assume a fatal error here + } + else if (cnt > 0) + { + for (idx = 0; idx < numfds; idx++) + { + //find corresponding TcpConnection + //TODO: optimize, seriously, this is takes linear time, every time + TcpConnection *con = getConnection(pollfds[idx].fd); - if (pollfds[idx].revents & POLLIN) - { - if (m_boundAsServer && maxTimeAcceptingConnections != 0 && pollfds[idx].fd == m_socket) - { - //new incoming clients - Clock timer; - timer.start(); - while (acceptClient() && !timer.isDone(maxTimeAcceptingConnections)) - { - //loop - } + if (pollfds[idx].revents & POLLIN) + { + if (m_boundAsServer && maxTimeAcceptingConnections != 0 && pollfds[idx].fd == m_socket) + { + //new incoming clients + Clock timer; + timer.start(); + while (acceptClient() && !timer.isDone(maxTimeAcceptingConnections)) + { + //loop + } - continue;//don't try to readmsgs from listening fd - } - - //process regular msg(s) - if (con == nullptr) - { - close(pollfds[idx].fd); - continue; - } + continue;//don't try to readmsgs from listening fd + } - Clock timer; - timer.start(); - con->AddRef();//so it can't get deleted while we are checking it's status - while(!timer.isDone(maxRecvTimePerConnection) && con->GetStatus() == TcpConnection::StatusConnected) - { - int err = con->processIncoming(); - if (err >= 0) - { - processedIncoming = true; - } + //process regular msg(s) + if (con == nullptr) + { + close(pollfds[idx].fd); + continue; + } - if (err > 0) - { - //couldn't finish processing last request, don't try more - break; - } - else if (err < 0) - { - break; - } + Clock timer; + timer.start(); + con->AddRef();//so it can't get deleted while we are checking it's status + while (!timer.isDone(maxRecvTimePerConnection) && con->GetStatus() == TcpConnection::StatusConnected) + { + int err = con->processIncoming(); + if (err >= 0) + { + processedIncoming = true; + } - }//while(!timer....) - con->Release(); - }//if(pollfds[... - else if (pollfds[idx].revents & POLLHUP) - { - if (con == nullptr) - { - close(pollfds[idx].fd); - continue; - } + if (err > 0) + { + //couldn't finish processing last request, don't try more + break; + } + else if (err < 0) + { + break; + } + }//while(!timer....) + con->Release(); + }//if(pollfds[... + else if (pollfds[idx].revents & POLLHUP) + { + if (con == nullptr) + { + close(pollfds[idx].fd); + continue; + } - //Disconnect client - con->Disconnect(); - } - }//for (idx=0.... - }//else if (cnt > 0) + //Disconnect client + con->Disconnect(); + } + }//for (idx=0.... + }//else if (cnt > 0) #endif - }//wanted to process incoming messages or connect requests + }//wanted to process incoming messages or connect requests - //now process any keepalives, if time to do that - if (m_params.keepAliveDelay > 0 && m_keepAliveTimer.isDone(m_params.keepAliveDelay)) - { - TcpConnection *next = nullptr; - for (TcpConnection *con = m_keepAliveList.m_beginList ; con != nullptr ; con = next) - { - con->AddRef(); - if (next) next->Release(); - next = con->m_nextKeepAliveConnection; - if (next) next->AddRef(); - - con->Send(nullptr, 0); //note: this request will move the connection from the keepAliveList to the aliveList - con->Release(); - } + //now process any keepalives, if time to do that + if (m_params.keepAliveDelay > 0 && m_keepAliveTimer.isDone(m_params.keepAliveDelay)) + { + TcpConnection *next = nullptr; + for (TcpConnection *con = m_keepAliveList.m_beginList; con != nullptr; con = next) + { + con->AddRef(); + if (next) next->Release(); + next = con->m_nextKeepAliveConnection; + if (next) next->AddRef(); - //now move the complete alive list over to the keepalive list to reset those timers - m_keepAliveList.m_beginList = m_aliveList.m_beginList; - m_aliveList.m_beginList = nullptr; + con->Send(nullptr, 0); //note: this request will move the connection from the keepAliveList to the aliveList + con->Release(); + } - //switch id's for those connections that were in the alive list last go - around - int tmpID = m_aliveList.m_listID; - m_aliveList.m_listID = m_keepAliveList.m_listID; - m_keepAliveList.m_listID = tmpID; + //now move the complete alive list over to the keepalive list to reset those timers + m_keepAliveList.m_beginList = m_aliveList.m_beginList; + m_aliveList.m_beginList = nullptr; - m_keepAliveTimer.reset(); - m_keepAliveTimer.start(); - } + //switch id's for those connections that were in the alive list last go - around + int tmpID = m_aliveList.m_listID; + m_aliveList.m_listID = m_keepAliveList.m_listID; + m_keepAliveList.m_listID = tmpID; - //now process any noDataCons, if time to do that - if (m_params.noDataTimeout > 0 && m_noDataTimer.isDone(m_params.noDataTimeout)) - { - TcpConnection *next = nullptr; - for (TcpConnection *con = m_noDataList.m_beginList ; con != nullptr ; con = next) - { - con->AddRef(); - if (next) next->Release(); - next = con->m_nextRecvDataConnection; - if (next) next->AddRef(); + m_keepAliveTimer.reset(); + m_keepAliveTimer.start(); + } - //time to disconnect this guy - con->Disconnect(); - con->Release(); - } + //now process any noDataCons, if time to do that + if (m_params.noDataTimeout > 0 && m_noDataTimer.isDone(m_params.noDataTimeout)) + { + TcpConnection *next = nullptr; + for (TcpConnection *con = m_noDataList.m_beginList; con != nullptr; con = next) + { + con->AddRef(); + if (next) next->Release(); + next = con->m_nextRecvDataConnection; + if (next) next->AddRef(); - //now move the complete data list over to the nodata list to reset those timers - m_noDataList.m_beginList = m_dataList.m_beginList; - m_dataList.m_beginList = nullptr; + //time to disconnect this guy + con->Disconnect(); + con->Release(); + } - //switch id's for those connections that were in the data list last go - around - int tmpID = m_dataList.m_listID; - m_dataList.m_listID = m_noDataList.m_listID; - m_noDataList.m_listID = tmpID; + //now move the complete data list over to the nodata list to reset those timers + m_noDataList.m_beginList = m_dataList.m_beginList; + m_dataList.m_beginList = nullptr; - m_noDataTimer.reset(); - m_noDataTimer.start(); - } + //switch id's for those connections that were in the data list last go - around + int tmpID = m_dataList.m_listID; + m_dataList.m_listID = m_noDataList.m_listID; + m_noDataList.m_listID = tmpID; - Release(); + m_noDataTimer.reset(); + m_noDataTimer.start(); + } - return processedIncoming; -} + Release(); -TcpConnection *TcpManager::EstablishConnection(const char *serverAddress, unsigned short serverPort, unsigned timeout) -{ - if (m_boundAsServer) - { - //can't open outgoing connections when in server mode - // use a different TcpManager to do that - return nullptr; - } + return processedIncoming; + } - if (m_connectionListCount >= m_params.maxConnections) - return(nullptr); + TcpConnection *TcpManager::EstablishConnection(const char *serverAddress, unsigned short serverPort, unsigned timeout) + { + if (m_boundAsServer) + { + //can't open outgoing connections when in server mode + // use a different TcpManager to do that + return nullptr; + } - // get server address - unsigned long address = inet_addr(serverAddress); - if (address == INADDR_NONE) - { - struct hostent * lphp; - lphp = gethostbyname(serverAddress); - if (lphp == nullptr) - return(nullptr); - address = ((struct in_addr *)(lphp->h_addr))->s_addr; - } - IPAddress destIP(address); + if (m_connectionListCount >= m_params.maxConnections) + return(nullptr); - TcpConnection *con = new TcpConnection(this, &m_allocator, m_params, destIP, serverPort, timeout); - con->AddRef();//for the client - to conform to UdpLibrary method - addNewConnection(con); + // get server address + unsigned long address = inet_addr(serverAddress); + if (address == INADDR_NONE) + { + struct hostent * lphp; + lphp = gethostbyname(serverAddress); + if (lphp == nullptr) + return(nullptr); + address = ((struct in_addr *)(lphp->h_addr))->s_addr; + } + IPAddress destIP(address); - return con; -} + TcpConnection *con = new TcpConnection(this, &m_allocator, m_params, destIP, serverPort, timeout); + con->AddRef();//for the client - to conform to UdpLibrary method + addNewConnection(con); -void TcpManager::addNewConnection(TcpConnection *con) -{ - con->AddRef(); + return con; + } + + void TcpManager::addNewConnection(TcpConnection *con) + { + con->AddRef(); #ifdef WIN32 //uses select - if (con->m_socket != INVALID_SOCKET) - { + if (con->m_socket != INVALID_SOCKET) + { #pragma warning(push) #pragma warning(disable : 4127) - FD_SET(con->m_socket, &m_permfds); + FD_SET(con->m_socket, &m_permfds); #pragma warning(pop) - } + } #endif - con->m_nextConnection = m_connectionList; - con->m_prevConnection = nullptr; - if (m_connectionList != nullptr) - m_connectionList->m_prevConnection = con; - m_connectionList = con; - m_connectionListCount++; + con->m_nextConnection = m_connectionList; + con->m_prevConnection = nullptr; + if (m_connectionList != nullptr) + m_connectionList->m_prevConnection = con; + m_connectionList = con; + m_connectionListCount++; - con->m_nextKeepAliveConnection = m_aliveList.m_beginList; - con->m_prevKeepAliveConnection = nullptr; - if (m_aliveList.m_beginList != nullptr) - m_aliveList.m_beginList->m_prevKeepAliveConnection = con; - m_aliveList.m_beginList = con; - con->m_aliveListId = m_keepAliveList.m_listID;//start it out thinking it's already in the alive list, since it is + con->m_nextKeepAliveConnection = m_aliveList.m_beginList; + con->m_prevKeepAliveConnection = nullptr; + if (m_aliveList.m_beginList != nullptr) + m_aliveList.m_beginList->m_prevKeepAliveConnection = con; + m_aliveList.m_beginList = con; + con->m_aliveListId = m_keepAliveList.m_listID;//start it out thinking it's already in the alive list, since it is - con->m_nextRecvDataConnection = m_dataList.m_beginList; - con->m_prevRecvDataConnection = nullptr; - if (m_dataList.m_beginList != nullptr) - m_dataList.m_beginList->m_prevRecvDataConnection = con; - m_dataList.m_beginList = con; - con->m_recvDataListId = m_noDataList.m_listID;//start it out thinking it's already in the data list, since it is -} + con->m_nextRecvDataConnection = m_dataList.m_beginList; + con->m_prevRecvDataConnection = nullptr; + if (m_dataList.m_beginList != nullptr) + m_dataList.m_beginList->m_prevRecvDataConnection = con; + m_dataList.m_beginList = con; + con->m_recvDataListId = m_noDataList.m_listID;//start it out thinking it's already in the data list, since it is + } -void TcpManager::removeConnection(TcpConnection *con) -{ - if (!con->wasRemovedFromMgr()) - { - con->setRemovedFromMgr(); - m_connectionListCount--; - #ifdef WIN32 //select only used on win32 - if (con->m_socket != INVALID_SOCKET) - { + void TcpManager::removeConnection(TcpConnection *con) + { + if (!con->wasRemovedFromMgr()) + { + con->setRemovedFromMgr(); + m_connectionListCount--; +#ifdef WIN32 //select only used on win32 + if (con->m_socket != INVALID_SOCKET) + { #pragma warning(push) #pragma warning(disable : 4127) - FD_CLR(con->m_socket, &m_permfds); + FD_CLR(con->m_socket, &m_permfds); #pragma warning(pop) - } - #endif - if (con->m_prevConnection != nullptr) - con->m_prevConnection->m_nextConnection = con->m_nextConnection; - if (con->m_nextConnection != nullptr) - con->m_nextConnection->m_prevConnection = con->m_prevConnection; - if (m_connectionList == con) - m_connectionList = con->m_nextConnection; - con->m_nextConnection = nullptr; - con->m_prevConnection = nullptr; + } +#endif + if (con->m_prevConnection != nullptr) + con->m_prevConnection->m_nextConnection = con->m_nextConnection; + if (con->m_nextConnection != nullptr) + con->m_nextConnection->m_prevConnection = con->m_prevConnection; + if (m_connectionList == con) + m_connectionList = con->m_nextConnection; + con->m_nextConnection = nullptr; + con->m_prevConnection = nullptr; - if (con->m_prevKeepAliveConnection != nullptr) - con->m_prevKeepAliveConnection->m_nextKeepAliveConnection = con->m_nextKeepAliveConnection; - if (con->m_nextKeepAliveConnection != nullptr) - con->m_nextKeepAliveConnection->m_prevKeepAliveConnection = con->m_prevKeepAliveConnection; + if (con->m_prevKeepAliveConnection != nullptr) + con->m_prevKeepAliveConnection->m_nextKeepAliveConnection = con->m_nextKeepAliveConnection; + if (con->m_nextKeepAliveConnection != nullptr) + con->m_nextKeepAliveConnection->m_prevKeepAliveConnection = con->m_prevKeepAliveConnection; - if (m_aliveList.m_beginList == con) - m_aliveList.m_beginList = con->m_nextKeepAliveConnection; - else if (m_keepAliveList.m_beginList == con) - m_keepAliveList.m_beginList = con->m_nextKeepAliveConnection; - con->m_nextKeepAliveConnection = nullptr; - con->m_prevKeepAliveConnection = nullptr; + if (m_aliveList.m_beginList == con) + m_aliveList.m_beginList = con->m_nextKeepAliveConnection; + else if (m_keepAliveList.m_beginList == con) + m_keepAliveList.m_beginList = con->m_nextKeepAliveConnection; + con->m_nextKeepAliveConnection = nullptr; + con->m_prevKeepAliveConnection = nullptr; + if (con->m_prevRecvDataConnection != nullptr) + con->m_prevRecvDataConnection->m_nextRecvDataConnection = con->m_nextRecvDataConnection; + if (con->m_nextRecvDataConnection != nullptr) + con->m_nextRecvDataConnection->m_prevRecvDataConnection = con->m_prevRecvDataConnection; + if (m_dataList.m_beginList == con) + m_dataList.m_beginList = con->m_nextRecvDataConnection; + else if (m_noDataList.m_beginList == con) + m_noDataList.m_beginList = con->m_nextRecvDataConnection; + con->m_nextRecvDataConnection = nullptr; + con->m_prevRecvDataConnection = nullptr; - if (con->m_prevRecvDataConnection != nullptr) - con->m_prevRecvDataConnection->m_nextRecvDataConnection = con->m_nextRecvDataConnection; - if (con->m_nextRecvDataConnection != nullptr) - con->m_nextRecvDataConnection->m_prevRecvDataConnection = con->m_prevRecvDataConnection; + con->Release(); + } + } - if (m_dataList.m_beginList == con) - m_dataList.m_beginList = con->m_nextRecvDataConnection; - else if (m_noDataList.m_beginList == con) - m_noDataList.m_beginList = con->m_nextRecvDataConnection; - con->m_nextRecvDataConnection = nullptr; - con->m_prevRecvDataConnection = nullptr; + void TcpManager::AddRef() + { + m_refCount++; + } + void TcpManager::Release() + { + if (--m_refCount == 0) + delete this; + } + IPAddress TcpManager::GetLocalIp() const + { + struct sockaddr_in addr_self; + memset(&addr_self, 0, sizeof(addr_self)); + socklen_t len = sizeof(addr_self); + getsockname(m_socket, (struct sockaddr *)&addr_self, &len); + return(IPAddress(addr_self.sin_addr.s_addr)); + } - con->Release(); - } -} - -void TcpManager::AddRef() -{ - m_refCount++; -} - -void TcpManager::Release() -{ - if (--m_refCount == 0) - delete this; -} - -IPAddress TcpManager::GetLocalIp() const -{ - struct sockaddr_in addr_self; - memset(&addr_self, 0, sizeof(addr_self)); - socklen_t len = sizeof(addr_self); - getsockname(m_socket, (struct sockaddr *)&addr_self, &len); - return(IPAddress(addr_self.sin_addr.s_addr)); - -} - -unsigned int TcpManager::GetLocalPort() const -{ - struct sockaddr_in addr_self; - memset(&addr_self, 0, sizeof(addr_self)); - socklen_t len = sizeof(addr_self); - getsockname(m_socket, (struct sockaddr *)&addr_self, &len); - return(ntohs(addr_self.sin_port)); -} - + unsigned int TcpManager::GetLocalPort() const + { + struct sockaddr_in addr_self; + memset(&addr_self, 0, sizeof(addr_self)); + socklen_t len = sizeof(addr_self); + getsockname(m_socket, (struct sockaddr *)&addr_self, &len); + return(ntohs(addr_self.sin_port)); + } #ifdef EXTERNAL_DISTRO }; -#endif - - +#endif \ No newline at end of file diff --git a/engine/server/application/CentralServer/src/shared/CentralCSHandler.h b/engine/server/application/CentralServer/src/shared/CentralCSHandler.h index b07690de..09e7c5f3 100755 --- a/engine/server/application/CentralServer/src/shared/CentralCSHandler.h +++ b/engine/server/application/CentralServer/src/shared/CentralCSHandler.h @@ -16,28 +16,27 @@ class StructureListMessage; #define DECLARE_CS_CMD( _name ) void handle_##_name( GameServerCSRequestMessage & message ); - class CentralCSHandler { public: static void install(); static void remove(); static CentralCSHandler & getInstance(); - void handle( const CSToolRequest& msg, uint32 loginServerId ); + void handle(const CSToolRequest& msg, uint32 loginServerId); ~CentralCSHandler(); - - void handleFindObjectResponse( int iIndex, bool bFound ); - void handleStructureListResponse( StructureListMessage& msg ); - + + void handleFindObjectResponse(int iIndex, bool bFound); + void handleStructureListResponse(StructureListMessage& msg); + // only need to DECLARE_CS_CMD for commands handled at the CentralServer. - - DECLARE_CS_CMD( list_structures ); - DECLARE_CS_CMD( login_character ); - DECLARE_CS_CMD( warp_player ); - + + DECLARE_CS_CMD(list_structures); + DECLARE_CS_CMD(login_character); + DECLARE_CS_CMD(warp_player); + protected: static CentralCSHandler * smp_instance; - typedef void( CentralCSHandler::*CentralCSHandlerFunc )( GameServerCSRequestMessage & ); + typedef void(CentralCSHandler::*CentralCSHandlerFunc)(GameServerCSRequestMessage &); class HandlerEntry { @@ -52,75 +51,70 @@ protected: TYPE_ARBITRARY_GAME_SERVER // send to a game server, we don't care which one. This is used // if all game servers have what we're looking for, so we don't care who gets it. }; - - - HandlerEntry( const std::string & in_name, CentralCSHandlerFunc in_func, EntryType in_type ) : - name( in_name ), - type( in_type ), - func( in_func ) + + HandlerEntry(const std::string & in_name, CentralCSHandlerFunc in_func, EntryType in_type) : + name(in_name), + type(in_type), + func(in_func) { } - - HandlerEntry( const std::string & in_name, EntryType in_type ) : - name(in_name), - type( in_type ) + + HandlerEntry(const std::string & in_name, EntryType in_type) : + name(in_name), + type(in_type), + func(nullptr) { } - + std::string name; EntryType type; CentralCSHandlerFunc func; // will be nullptr unless it's of TYPE_CENTRAL. - - }; - + class CSCharacterFindInfo { public: - CSCharacterFindInfo( NetworkId & id, int numServers, GameServerCSRequestMessage &req, bool bHandleAtCentral ) : - commandLine( req.getCommandString() ), - command( req.getCommandName() ), - iAccessLevel( req.getAccessLevel() ), - user(req.getUserName() ), - iToolId( req.getToolId() ), - iAccount( req.getAccountId() ), - responsesWaiting( numServers ), - iLoginServerId( req.getLoginServerID() ), - bCentral( bHandleAtCentral ) - + CSCharacterFindInfo(NetworkId & id, int numServers, GameServerCSRequestMessage &req, bool bHandleAtCentral) : + commandLine(req.getCommandString()), + command(req.getCommandName()), + iAccessLevel(req.getAccessLevel()), + user(req.getUserName()), + iToolId(req.getToolId()), + iAccount(req.getAccountId()), + responsesWaiting(numServers), + iLoginServerId(req.getLoginServerID()), + bCentral(bHandleAtCentral) + { - } - + std::string commandLine; std::string command; - + uint32 iAccessLevel; std::string user; - + uint32 iToolId; int iAccount; - - - int responsesWaiting; + + int responsesWaiting; int iLoginServerId; bool bCentral; // if offline, should we handle this at the Central Server or the DB? protected: - }; - + typedef std::map< int, CSCharacterFindInfo * > CentralCharFindMap; - + CentralCharFindMap m_findMap; - + typedef std::map< std::string, HandlerEntry * > CentralCSHandlerMap; - + CentralCSHandlerMap m_entries; - + private: CentralCSHandler() : - m_findMap(), - m_entries() + m_findMap(), + m_entries() { }; }; diff --git a/engine/server/application/CentralServer/src/shared/ConnectionServerConnection.cpp b/engine/server/application/CentralServer/src/shared/ConnectionServerConnection.cpp index 3ef1d338..1c31b191 100755 --- a/engine/server/application/CentralServer/src/shared/ConnectionServerConnection.cpp +++ b/engine/server/application/CentralServer/src/shared/ConnectionServerConnection.cpp @@ -1,8 +1,6 @@ // ConnectionServerConnection.cpp // copyright 2001 Verant Interactive - - //----------------------------------------------------------------------- #include "FirstCentralServer.h" @@ -40,48 +38,50 @@ struct OnConnectionServerConnectionClosed {}; //----------------------------------------------------------------------- ConnectionServerConnection::ConnectionServerConnection(const std::string & a, const uint16 p) : -ServerConnection (a, p, NetworkSetupData()), -m_chatServicePort (0), -m_csServicePort (0), -m_clientServicePortPrivate (0), -m_clientServicePortPublic (0), -m_gameServicePort (0), -m_id (0), -m_pingPort (0), -m_connectionServerNumber (0), -m_gameServiceAddress (), -m_playerCount (0), -m_freeTrialCount (0), -m_emptySceneCount (0), -m_tutorialSceneCount (0), -m_falconSceneCount (0), -m_clientServiceAddress (), -m_chatServiceAddress (), -m_customerServiceAddress () + ServerConnection(a, p, NetworkSetupData()), + m_chatServicePort(0), + m_csServicePort(0), + m_clientServicePortPrivate(0), + m_clientServicePortPublic(0), + m_gameServicePort(0), + m_id(0), + m_pingPort(0), + m_connectionServerNumber(0), + m_gameServiceAddress(), + m_playerCount(0), + m_freeTrialCount(0), + m_emptySceneCount(0), + m_tutorialSceneCount(0), + m_falconSceneCount(0), + m_clientServiceAddress(), + m_chatServiceAddress(), + m_customerServiceAddress(), + m_voiceChatServicePort(0) { } //----------------------------------------------------------------------- ConnectionServerConnection::ConnectionServerConnection(UdpConnectionMT * u, TcpClient * t) : -ServerConnection (u, t), -m_chatServicePort (0), -m_csServicePort (0), -m_clientServicePortPrivate (0), -m_clientServicePortPublic (0), -m_gameServicePort (0), -m_id (0), -m_pingPort (0), -m_connectionServerNumber (0), -m_gameServiceAddress (), -m_playerCount (0), -m_freeTrialCount (0), -m_emptySceneCount (0), -m_tutorialSceneCount (0), -m_falconSceneCount (0), -m_clientServiceAddress (), -m_chatServiceAddress (), -m_customerServiceAddress () + ServerConnection(u, t), + m_chatServicePort(0), + m_csServicePort(0), + m_clientServicePortPrivate(0), + m_clientServicePortPublic(0), + m_gameServicePort(0), + m_id(0), + m_pingPort(0), + m_connectionServerNumber(0), + m_gameServiceAddress(), + m_playerCount(0), + m_freeTrialCount(0), + m_emptySceneCount(0), + m_tutorialSceneCount(0), + m_falconSceneCount(0), + m_clientServiceAddress(), + m_chatServiceAddress(), + m_customerServiceAddress(), + m_voiceChatServicePort(0) { } @@ -89,12 +89,12 @@ m_customerServiceAddress () ConnectionServerConnection::~ConnectionServerConnection() { - // remove ConnectionServerConnection *'s from the + // remove ConnectionServerConnection *'s from the // s_pseudoClientConnectionMap std::map >::iterator i; - for(i = s_pseudoClientConnectionMap.begin(); i != s_pseudoClientConnectionMap.end();) + for (i = s_pseudoClientConnectionMap.begin(); i != s_pseudoClientConnectionMap.end();) { - if(i->second.second == this) + if (i->second.second == this) { if (i->second.first == TransferRequestMoveValidation::TRS_transfer_server) { @@ -121,7 +121,7 @@ bool ConnectionServerConnection::sendToPseudoClientConnection(unsigned int stati { bool result = false; std::map >::iterator f = s_pseudoClientConnectionMap.find(stationId); - if(f != s_pseudoClientConnectionMap.end()) + if (f != s_pseudoClientConnectionMap.end()) { result = true; f->second.second->send(message, true); @@ -166,9 +166,9 @@ void ConnectionServerConnection::onReceive(const Archive::ByteStream & message) { Archive::ReadIterator ri = message.begin(); GameNetworkMessage m(ri); - ri = message.begin(); + ri = message.begin(); - if(m.isType("NewCentralConnectionServer")) + if (m.isType("NewCentralConnectionServer")) { const NewCentralConnectionServer ncs(ri); @@ -178,7 +178,7 @@ void ConnectionServerConnection::onReceive(const Archive::ByteStream & message) m_clientServicePortPrivate = ncs.getClientServicePortPrivate(); m_clientServicePortPublic = ncs.getClientServicePortPublic(); m_gameServicePort = ncs.getGameServicePort(); - m_pingPort = ncs.getPingPort (); + m_pingPort = ncs.getPingPort(); m_connectionServerNumber = ncs.getConnectionServerNumber(); m_gameServiceAddress = ncs.getGameServiceAddress(); m_clientServiceAddress = ncs.getClientServiceAddress(); @@ -207,8 +207,8 @@ void ConnectionServerConnection::onReceive(const Archive::ByteStream & message) //Send to CS servers const EnumerateServers e2(true, getCustomerServiceAddress(), getCustomerServicePort(), ct); - if ( !getCustomerServiceAddress().empty() - && (getCustomerServicePort() != 0)) + if (!getCustomerServiceAddress().empty() + && (getCustomerServicePort() != 0)) { CentralServer::getInstance().broadcastToCustomerServiceServers(e2); } @@ -218,10 +218,10 @@ void ConnectionServerConnection::onReceive(const Archive::ByteStream & message) } //Send to login Servers - if ( (getClientServicePortPrivate() != 0) || (getClientServicePortPublic() != 0) ) + if ((getClientServicePortPrivate() != 0) || (getClientServicePortPublic() != 0)) { const LoginConnectionServerAddress csa(m_id, getClientServiceAddress(), getClientServicePortPrivate(), - getClientServicePortPublic(), getPlayerCount(), getPingPort ()); + getClientServicePortPublic(), getPlayerCount(), getPingPort()); CentralServer::getInstance().sendToAllLoginServers(csa); } } @@ -235,12 +235,12 @@ void ConnectionServerConnection::onReceive(const Archive::ByteStream & message) CentralServer::getInstance().sendToAllLoginServers(ulc); } - else if(m.isType("TaskSpawnProcess")) + else if (m.isType("TaskSpawnProcess")) { const TaskSpawnProcess spawn(ri); CentralServer::getInstance().sendTaskMessage(spawn); } - else if(m.isType("NewPseudoClientConnection")) + else if (m.isType("NewPseudoClientConnection")) { const GenericValueTypeMessage > info(ri); s_pseudoClientConnectionMap[info.getValue().first] = std::make_pair(static_cast(info.getValue().second), this); @@ -248,20 +248,20 @@ void ConnectionServerConnection::onReceive(const Archive::ByteStream & message) // remove corresponding "non pseudo client connection" CentralServer::getInstance().removeFromAccountConnectionMap(static_cast(info.getValue().first)); } - else if(m.isType("DestroyPseudoClientConnection")) + else if (m.isType("DestroyPseudoClientConnection")) { const GenericValueTypeMessage info(ri); std::map >::iterator f = s_pseudoClientConnectionMap.find(info.getValue()); - if(f != s_pseudoClientConnectionMap.end()) + if (f != s_pseudoClientConnectionMap.end()) { s_pseudoClientConnectionMap.erase(f); } } - else if(m.isType("TransferReceiveDataFromGameServer")) + else if (m.isType("TransferReceiveDataFromGameServer")) { const GenericValueTypeMessage transferReply(ri); - if(transferReply.getValue().getTransferRequestSource() == TransferRequestMoveValidation::TRS_transfer_server) + if (transferReply.getValue().getTransferRequestSource() == TransferRequestMoveValidation::TRS_transfer_server) { CentralServer::getInstance().sendToTransferServer(transferReply); } @@ -275,7 +275,7 @@ void ConnectionServerConnection::onReceive(const Archive::ByteStream & message) LOG("CustomerService", ("CharacterTransfer: Sending TransferLoginCharacterToDestinationServer to CentralServer (via LoginServer) (%s) for (%s)", transferReply.getValue().getDestinationGalaxy().c_str(), login.getValue().toString().c_str())); } } - else if(m.isType("ApplyTransferDataSuccess")) + else if (m.isType("ApplyTransferDataSuccess")) { const GenericValueTypeMessage success(ri); @@ -290,7 +290,7 @@ void ConnectionServerConnection::onReceive(const Archive::ByteStream & message) // send the message back to the transfer server, which then // sends a disable login request to the source central server, // "removing" the account on the source galaxy. - if(success.getValue().getTransferRequestSource() == TransferRequestMoveValidation::TRS_transfer_server) + if (success.getValue().getTransferRequestSource() == TransferRequestMoveValidation::TRS_transfer_server) { CentralServer::getInstance().sendToTransferServer(success); } @@ -303,14 +303,14 @@ void ConnectionServerConnection::onReceive(const Archive::ByteStream & message) IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(toggleLoginStatus)); } } - else if(m.isType("ApplyTransferDataFail")) + else if (m.isType("ApplyTransferDataFail")) { const GenericValueTypeMessage fail(ri); - + // send the message back to the transfer server, which then // sends a delete request to the destination central server, // "removing" the account on the destination galaxy. - if(fail.getValue().getTransferRequestSource() == TransferRequestMoveValidation::TRS_transfer_server) + if (fail.getValue().getTransferRequestSource() == TransferRequestMoveValidation::TRS_transfer_server) { CentralServer::getInstance().sendToTransferServer(fail); } @@ -329,11 +329,11 @@ void ConnectionServerConnection::onReceive(const Archive::ByteStream & message) IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(closeRequestTarget)); } } - else if(m.isType("TransferCreateCharacterFailed")) + else if (m.isType("TransferCreateCharacterFailed")) { const GenericValueTypeMessage fail(ri); - if(fail.getValue().getTransferRequestSource() == TransferRequestMoveValidation::TRS_transfer_server) + if (fail.getValue().getTransferRequestSource() == TransferRequestMoveValidation::TRS_transfer_server) { CentralServer::getInstance().sendToTransferServer(fail); } @@ -348,11 +348,11 @@ void ConnectionServerConnection::onReceive(const Archive::ByteStream & message) IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(closeRequestTarget)); } } - else if(m.isType("ReplyTransferDataFail")) + else if (m.isType("ReplyTransferDataFail")) { const GenericValueTypeMessage reply(ri); - if(reply.getValue().getTransferRequestSource() == TransferRequestMoveValidation::TRS_transfer_server) + if (reply.getValue().getTransferRequestSource() == TransferRequestMoveValidation::TRS_transfer_server) { CentralServer::getInstance().sendToTransferServer(reply); } @@ -367,11 +367,11 @@ void ConnectionServerConnection::onReceive(const Archive::ByteStream & message) IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(closeRequestTarget)); } } - else if(m.isType("TransferFailGameServerClosedConnectionWithConnectionServer")) + else if (m.isType("TransferFailGameServerClosedConnectionWithConnectionServer")) { const GenericValueTypeMessage fail(ri); - if(fail.getValue().getTransferRequestSource() == TransferRequestMoveValidation::TRS_transfer_server) + if (fail.getValue().getTransferRequestSource() == TransferRequestMoveValidation::TRS_transfer_server) { CentralServer::getInstance().sendToTransferServer(fail); } @@ -386,12 +386,12 @@ void ConnectionServerConnection::onReceive(const Archive::ByteStream & message) IGNORE_RETURN(CentralServer::getInstance().sendToArbitraryLoginServer(closeRequestTarget)); } } - else if(m.isType("AccountFeatureIdRequest")) + else if (m.isType("AccountFeatureIdRequest")) { const AccountFeatureIdRequest msg(ri); CentralServer::getInstance().sendToArbitraryLoginServer(msg); } - else if(m.isType("AdjustAccountFeatureIdRequest")) + else if (m.isType("AdjustAccountFeatureIdRequest")) { const AdjustAccountFeatureIdRequest msg(ri); CentralServer::getInstance().sendToArbitraryLoginServer(msg); @@ -408,7 +408,7 @@ ConnectionServerConnection * ConnectionServerConnection::getConnectionForAccount { ConnectionServerConnection * result = 0; std::map >::iterator f = s_pseudoClientConnectionMap.find(stationId); - if(f != s_pseudoClientConnectionMap.end()) + if (f != s_pseudoClientConnectionMap.end()) { result = f->second.second; } @@ -424,4 +424,4 @@ void ConnectionServerConnection::removeFromAccountConnectionMap(unsigned int sta { s_pseudoClientConnectionMap.erase(f); } -} +} \ No newline at end of file diff --git a/engine/server/application/ConnectionServer/src/shared/ConnectionServer.cpp b/engine/server/application/ConnectionServer/src/shared/ConnectionServer.cpp index ae9f8bec..2fabbf21 100755 --- a/engine/server/application/ConnectionServer/src/shared/ConnectionServer.cpp +++ b/engine/server/application/ConnectionServer/src/shared/ConnectionServer.cpp @@ -223,7 +223,7 @@ bool ConnectionServer::decryptToken(const KeyShare::Token & token, char* session uint32 len = apiSessionIdWidth + sizeof(StationId); unsigned char * keyBuffer = new unsigned char[len + 1]; unsigned char * keyBufferPointer = keyBuffer; - memset(keyBuffer, 0, len); + memset(keyBuffer, 0, sizeof(*keyBuffer)); bool retval = cs.loginServerKeys->decipherToken(token, keyBuffer, len); diff --git a/engine/shared/library/sharedUtility/src/shared/TemplateParameter.h b/engine/shared/library/sharedUtility/src/shared/TemplateParameter.h index 9c86d90b..c4b1cc1a 100755 --- a/engine/shared/library/sharedUtility/src/shared/TemplateParameter.h +++ b/engine/shared/library/sharedUtility/src/shared/TemplateParameter.h @@ -21,7 +21,6 @@ class Vector; - //======================================================================== template class TemplateBase @@ -40,12 +39,12 @@ public: DataType max_value; Range(void) {} - Range(const Range &s) : - min_value(s.min_value), + Range(const Range &s) : + min_value(s.min_value), max_value(s.max_value) {} Range & operator=(const Range &s) { - min_value = s.min_value; + min_value = s.min_value; max_value = s.max_value; return *this; } @@ -58,8 +57,8 @@ public: DataType base; DieRoll(void) {} - DieRoll(const DieRoll &s) : - num_dice(s.num_dice), + DieRoll(const DieRoll &s) : + num_dice(s.num_dice), die_sides(s.die_sides), base(s.base) {} DieRoll & operator =(const DieRoll &s) @@ -112,81 +111,80 @@ protected: } m_data; // storage for complex-type data bool m_loaded; // flag that this parameter has been loaded - - TemplateBase(void); - TemplateBase(const TemplateBase &); - TemplateBase & operator =(const TemplateBase &); + TemplateBase(void); + TemplateBase(const TemplateBase &); + TemplateBase & operator =(const TemplateBase &); virtual ~TemplateBase(); - virtual void cleanSingleParam(void); - void loadWeightedListFromIff(Iff &file); - void saveWeightedListToIff(Iff &file) const; + void loadWeightedListFromIff(Iff &file); + void saveWeightedListToIff(Iff &file) const; virtual TemplateBase * createNewParam(void) = 0; virtual ReturnType getSingle(void) const; virtual ReturnType getRange(void) const; virtual ReturnType getDieRoll(void) const; - void setValue(const DataType & min_value, const DataType & max_value); - void setValue(const DataType & num_dice, const DataType & die_sides, const DataType & base); + void setValue(const DataType & min_value, const DataType & max_value); + void setValue(const DataType & num_dice, const DataType & die_sides, const DataType & base); }; template inline TemplateBase::TemplateBase(void) : - m_dataType(NONE), - m_loaded(false) + m_dataType(NONE), + m_loaded(false), + m_data(nullptr) { } // TemplateBase::TemplateBase(void) template inline TemplateBase::TemplateBase(const TemplateBase< - DataType, ReturnType> & source) + DataType, ReturnType> & source) : m_loaded(false) { m_dataType = source.m_dataType; switch (m_dataType) { - case SINGLE: - m_dataSingle = source.m_dataSingle; - break; - case WEIGHTED_LIST: - m_data.weightedList = new WeightedList(*source.m_data.weightedList); - break; - case RANGE: - m_data.range = new Range(*source.m_data.range); - break; - case DIE_ROLL: - m_data.dieRoll = new DieRoll(*source.m_data.dieRoll); - break; - case NONE: - default: - break; + case SINGLE: + m_dataSingle = source.m_dataSingle; + break; + case WEIGHTED_LIST: + m_data.weightedList = new WeightedList(*source.m_data.weightedList); + break; + case RANGE: + m_data.range = new Range(*source.m_data.range); + break; + case DIE_ROLL: + m_data.dieRoll = new DieRoll(*source.m_data.dieRoll); + break; + case NONE: + default: + break; } } // TemplateBase::TemplateBase(const TemplateBase &) template inline TemplateBase & TemplateBase:: - operator =(const TemplateBase &source) +operator =(const TemplateBase &source) { cleanData(); m_dataType = source.m_dataType; switch (m_dataType) { - case SINGLE: - m_dataSingle = source.m_dataSingle; - break; - case WEIGHTED_LIST: - m_data.weightedList = new WeightedList(*source.m_data.weightedList); - break; - case RANGE: - m_data.range = new Range(*source.m_data.range); - break; - case DIE_ROLL: - m_data.dieRoll = new DieRoll(*source.m_data.dieRoll); - break; - case NONE: - default: - break; + case SINGLE: + m_dataSingle = source.m_dataSingle; + break; + case WEIGHTED_LIST: + m_data.weightedList = new WeightedList(*source.m_data.weightedList); + break; + case RANGE: + m_data.range = new Range(*source.m_data.range); + break; + case DIE_ROLL: + m_data.dieRoll = new DieRoll(*source.m_data.dieRoll); + break; + case NONE: + default: + break; } return *this; } // TemplateBase::operator = @@ -199,34 +197,34 @@ inline void TemplateBase::cleanData(void) { switch (m_dataType) { - case SINGLE: - cleanSingleParam(); - break; - case WEIGHTED_LIST: - { - typename WeightedList::iterator end = m_data.weightedList->end(); - for (typename WeightedList::iterator iter = m_data.weightedList->begin(); - iter != end; - ++iter) - { - delete (*iter).value; - (*iter).value = nullptr; - } - delete m_data.weightedList; - m_data.weightedList = nullptr; - } - break; - case RANGE: - delete m_data.range; - m_data.range = nullptr; - break; - case DIE_ROLL: - delete m_data.dieRoll; - m_data.dieRoll = nullptr; - break; - case NONE: - default: - break; + case SINGLE: + cleanSingleParam(); + break; + case WEIGHTED_LIST: + { + typename WeightedList::iterator end = m_data.weightedList->end(); + for (typename WeightedList::iterator iter = m_data.weightedList->begin(); + iter != end; + ++iter) + { + delete (*iter).value; + (*iter).value = nullptr; + } + delete m_data.weightedList; + m_data.weightedList = nullptr; + } + break; + case RANGE: + delete m_data.range; + m_data.range = nullptr; + break; + case DIE_ROLL: + delete m_data.dieRoll; + m_data.dieRoll = nullptr; + break; + case NONE: + default: + break; } m_dataType = NONE; m_loaded = false; @@ -247,38 +245,38 @@ inline bool TemplateBase::isLoaded(void) const template inline ReturnType TemplateBase::getValue(void) const { -static DataType dummyReturn; + static DataType dummyReturn; switch (m_dataType) { - case SINGLE: - return getSingle(); - case WEIGHTED_LIST: + case SINGLE: + return getSingle(); + case WEIGHTED_LIST: + { + int weight = Random::random(1, 100); + typename WeightedList::const_iterator end = m_data.weightedList->end(); + for (typename WeightedList::const_iterator iter = m_data.weightedList->begin(); + iter != end; + ++iter) + { + weight -= (*iter).weight; + if (weight <= 0) { - int weight = Random::random(1, 100); - typename WeightedList::const_iterator end = m_data.weightedList->end(); - for (typename WeightedList::const_iterator iter = m_data.weightedList->begin(); - iter != end; - ++iter) - { - weight -= (*iter).weight; - if (weight <= 0) - { - return dynamic_cast *> - ((*iter).value)->getValue(); - } - } - DEBUG_FATAL(true, ("weighted list does not equal 100")); + return dynamic_cast *> + ((*iter).value)->getValue(); } - break; - case RANGE: - return getRange(); - case DIE_ROLL: - return getDieRoll(); - case NONE: - default: - DEBUG_FATAL(true, ("Unknown data type %d for template param", m_dataType)); - break; + } + DEBUG_FATAL(true, ("weighted list does not equal 100")); + } + break; + case RANGE: + return getRange(); + case DIE_ROLL: + return getDieRoll(); + case NONE: + default: + DEBUG_FATAL(true, ("Unknown data type %d for template param", m_dataType)); + break; } return dummyReturn; } // TemplateBase::getValue @@ -322,7 +320,7 @@ inline ReturnType TemplateBase::getSingle(void) const template inline ReturnType TemplateBase::getRange(void) const { -static DataType dummyReturn; + static DataType dummyReturn; DEBUG_FATAL(true, ("getRange not supported")); return dummyReturn; @@ -331,7 +329,7 @@ static DataType dummyReturn; template inline ReturnType TemplateBase::getDieRoll(void) const { -static DataType dummyReturn; + static DataType dummyReturn; DEBUG_FATAL(true, ("getDieRoll not supported")); return dummyReturn; @@ -347,7 +345,7 @@ inline void TemplateBase::setValue(const DataType & value) } template -inline void TemplateBase::setValue(const DataType & min_value, +inline void TemplateBase::setValue(const DataType & min_value, const DataType & max_value) { cleanData(); @@ -359,7 +357,7 @@ inline void TemplateBase::setValue(const DataType & min_va } template -inline void TemplateBase::setValue(const DataType & num_dice, +inline void TemplateBase::setValue(const DataType & num_dice, const DataType & die_sides, const DataType & base) { cleanData(); @@ -398,7 +396,7 @@ inline void TemplateBase::cleanSingleParam(void) template inline void TemplateBase::loadWeightedListFromIff(Iff &file) { -WeightedValue weightedValue; + WeightedValue weightedValue; NOT_NULL(m_data.weightedList); @@ -423,7 +421,7 @@ WeightedValue weightedValue; template inline void TemplateBase::saveWeightedListToIff(Iff &file) const { -int32 intData; + int32 intData; NOT_NULL(m_data.weightedList); @@ -441,14 +439,13 @@ int32 intData; } } // TemplateBase::saveWeightedListToIff - //======================================================================== // class IntegerParam class IntegerParam : public TemplateBase { public: - IntegerParam(void); + IntegerParam(void); virtual ~IntegerParam(); virtual void loadFromIff(Iff &file); @@ -478,7 +475,6 @@ private: // derived template param }; - inline char IntegerParam::getDeltaType(void) const { return m_dataDeltaType; @@ -535,7 +531,7 @@ inline void IntegerParam::setValue(const int & num_dice, const int & die_sides, inline const IntegerParam::DieRoll * IntegerParam::getDieRollStruct(void) const { - if(m_dataType == DIE_ROLL) + if (m_dataType == DIE_ROLL) { return m_data.dieRoll; } @@ -547,7 +543,7 @@ inline const IntegerParam::DieRoll * IntegerParam::getDieRollStruct(void) const inline const IntegerParam::Range * IntegerParam::getRangeStruct(void) const { - if(m_dataType == RANGE) + if (m_dataType == RANGE) { return m_data.range; } @@ -563,7 +559,7 @@ inline const IntegerParam::Range * IntegerParam::getRangeStruct(void) const class FloatParam : public TemplateBase { public: - FloatParam(void); + FloatParam(void); virtual ~FloatParam(); virtual void loadFromIff(Iff &file); @@ -590,7 +586,6 @@ private: // derived template param }; - inline char FloatParam::getDeltaType(void) const { return m_dataDeltaType; @@ -631,7 +626,7 @@ inline void FloatParam::setValue(const float & min_value, const float & max_valu inline const FloatParam::Range * FloatParam::getRangeStruct() const { - if(m_dataType == RANGE) + if (m_dataType == RANGE) { return m_data.range; } @@ -647,7 +642,7 @@ inline const FloatParam::Range * FloatParam::getRangeStruct() const class BoolParam : public TemplateBase { public: - BoolParam(void); + BoolParam(void); virtual ~BoolParam(); virtual void loadFromIff(Iff &file); @@ -662,14 +657,13 @@ inline TemplateBase *BoolParam::createNewParam(void) return new BoolParam; } - //======================================================================== // class StringParam : public TemplateBase { public: - StringParam(void); + StringParam(void); virtual ~StringParam(); virtual void cleanSingleParam(void); @@ -681,13 +675,11 @@ protected: virtual TemplateBase *createNewParam(void); }; - inline TemplateBase *StringParam::createNewParam(void) { return new StringParam; } - //======================================================================== // class VectorParam @@ -705,7 +697,7 @@ struct VectorParamData class VectorParam : public TemplateBase { public: - VectorParam(void); + VectorParam(void); virtual ~VectorParam(); virtual void cleanSingleParam(void); @@ -717,28 +709,26 @@ protected: virtual TemplateBase *createNewParam(void); }; - inline TemplateBase *VectorParam::createNewParam(void) { return new VectorParam; } - //======================================================================== // class StringId param struct StringIdParamData -{ +{ StringParam table; StringParam index; - StringIdParamData(void) : table() , index() {} + StringIdParamData(void) : table(), index() {} }; class StringIdParam : public TemplateBase { public: - StringIdParam(void); + StringIdParam(void); virtual ~StringIdParam(); virtual void cleanSingleParam(void); @@ -757,7 +747,6 @@ inline TemplateBase *StringIdParam::create return new StringIdParam; } - //======================================================================== // class TriggerVolume param @@ -788,11 +777,11 @@ inline float TriggerVolumeData::getRadius(void) const } // TriggerVolumeData::getRadius struct TriggerVolumeParamData -{ +{ StringParam name; FloatParam radius; - TriggerVolumeParamData(void) : name() , radius() {} + TriggerVolumeParamData(void) : name(), radius() {} private: // no copying @@ -800,11 +789,11 @@ private: // TriggerVolumeParamData & operator =(const TriggerVolumeParamData &); }; -class TriggerVolumeParam : public TemplateBase { public: - TriggerVolumeParam(void); + TriggerVolumeParam(void); virtual ~TriggerVolumeParam(); virtual void cleanSingleParam(void); @@ -823,7 +812,6 @@ inline TemplateBase *TriggerVolu return new TriggerVolumeParam; } - //======================================================================== // class DynamicVariableParamData - used by class DynamicVariableParam @@ -842,7 +830,7 @@ public: STRING, LIST } m_type; - union + union { IntegerParam *iparam; FloatParam *fparam; @@ -850,8 +838,8 @@ public: std::vector *lparam; } m_data; - DynamicVariableParamData(void); - DynamicVariableParamData(const std::string &name, DataType type); + DynamicVariableParamData(void); + DynamicVariableParamData(const std::string &name, DataType type); virtual ~DynamicVariableParamData(); void loadFromIff(Iff &file); void saveToIff(Iff &file) const; @@ -862,21 +850,20 @@ private: DynamicVariableParamData & operator =(const DynamicVariableParamData &); }; -inline DynamicVariableParamData::DynamicVariableParamData(void) : +inline DynamicVariableParamData::DynamicVariableParamData(void) : m_name(), m_type(UNKNOWN) { memset(&m_data, 0, sizeof(m_data)); } - //======================================================================== // class DynamicVariableParam : public TemplateBase { public: - DynamicVariableParam(void); + DynamicVariableParam(void); virtual ~DynamicVariableParam(); virtual void cleanSingleParam(void); @@ -900,9 +887,8 @@ private: DynamicVariableParam & operator =(const DynamicVariableParam &); }; - inline TemplateBase * - DynamicVariableParam::createNewParam(void) +DynamicVariableParam::createNewParam(void) { return new DynamicVariableParam(); } @@ -922,7 +908,6 @@ inline void DynamicVariableParam::setIsLoaded(void) m_loaded = true; } - //======================================================================== // @@ -930,7 +915,7 @@ template class StructParam : public TemplateBase { public: - StructParam(void); + StructParam(void); virtual ~StructParam(); bool isInitialized(void) const; @@ -1000,34 +985,34 @@ inline void StructParam::loadFromIff(Iff &file) typename StructParam::DataTypeId dataType = static_cast::DataTypeId>(file.read_int8()); switch (dataType) { - case TemplateBase::SINGLE: - { - Tag id = file.read_int32(); - SP * structTemplate = DataResourceList::fetch(id); - NOT_NULL(structTemplate); - // we need to exit the chunk because the iff class doesn't - // support chunk nesting - file.exitChunk(); - structTemplate->loadFromIff(file); - // we need to enter a fake chunk because whoever called this - // function assumes we are still in a chunk - file.enterChunk(); - this->setValue(structTemplate); - this->m_loaded = true; - } - break; - case TemplateBase::WEIGHTED_LIST: - this->setValue(new typename TemplateBase::WeightedList); - this->loadWeightedListFromIff(file); - break; - case TemplateBase::NONE: - this->cleanData(); - break; - case TemplateBase::RANGE: - case TemplateBase::DIE_ROLL: - default: - DEBUG_FATAL(true, ("loaded unknown data type %d for template struct param", this->m_dataType)); - break; + case TemplateBase::SINGLE: + { + Tag id = file.read_int32(); + SP * structTemplate = DataResourceList::fetch(id); + NOT_NULL(structTemplate); + // we need to exit the chunk because the iff class doesn't + // support chunk nesting + file.exitChunk(); + structTemplate->loadFromIff(file); + // we need to enter a fake chunk because whoever called this + // function assumes we are still in a chunk + file.enterChunk(); + this->setValue(structTemplate); + this->m_loaded = true; + } + break; + case TemplateBase::WEIGHTED_LIST: + this->setValue(new typename TemplateBase::WeightedList); + this->loadWeightedListFromIff(file); + break; + case TemplateBase::NONE: + this->cleanData(); + break; + case TemplateBase::RANGE: + case TemplateBase::DIE_ROLL: + default: + DEBUG_FATAL(true, ("loaded unknown data type %d for template struct param", this->m_dataType)); + break; } } // StructParam::loadFromIff @@ -1043,35 +1028,32 @@ inline void StructParam::saveToIff(Iff &file) const file.insertChunkData(&type, sizeof(type)); switch (this->m_dataType) { - case TemplateBase::SINGLE: - { - int32 tag = this->m_dataSingle->getId(); - file.insertChunkData(&tag, sizeof(tag)); - // we need to exit the chunk because the iff class doesn't - // support chunk nesting - file.exitChunk(); - this->m_dataSingle->saveToIff(file); - // we need to insert a fake chunk because whoever called this - // function assumes we are still in a chunk - file.insertChunk(TAG(X, X, X, X)); - } - break; - case TemplateBase::WEIGHTED_LIST: - this->saveWeightedListToIff(file); - break; - case TemplateBase::NONE: - break; - case TemplateBase::RANGE: - case TemplateBase::DIE_ROLL: - default: - DEBUG_FATAL(true, ("saving unknown data type %d for template struct param", this->m_dataType)); - break; + case TemplateBase::SINGLE: + { + int32 tag = this->m_dataSingle->getId(); + file.insertChunkData(&tag, sizeof(tag)); + // we need to exit the chunk because the iff class doesn't + // support chunk nesting + file.exitChunk(); + this->m_dataSingle->saveToIff(file); + // we need to insert a fake chunk because whoever called this + // function assumes we are still in a chunk + file.insertChunk(TAG(X, X, X, X)); + } + break; + case TemplateBase::WEIGHTED_LIST: + this->saveWeightedListToIff(file); + break; + case TemplateBase::NONE: + break; + case TemplateBase::RANGE: + case TemplateBase::DIE_ROLL: + default: + DEBUG_FATAL(true, ("saving unknown data type %d for template struct param", this->m_dataType)); + break; } } // StructParam::saveToIff - //======================================================================== - #endif // _INCLUDED_TemplateParameter_H - diff --git a/external/3rd/library/platform/utils/Base/AutoLog.h b/external/3rd/library/platform/utils/Base/AutoLog.h index 18871c7f..e3d13a47 100755 --- a/external/3rd/library/platform/utils/Base/AutoLog.h +++ b/external/3rd/library/platform/utils/Base/AutoLog.h @@ -6,112 +6,111 @@ #include #ifdef EXTERNAL_DISTRO -namespace NAMESPACE +namespace NAMESPACE { - #endif -namespace Base -{ + namespace Base + { + class CAutoLog + { + public: + enum eLogLevel { + eLOG_NONE = 0, // log entries are discarded + eLOG_ERROR = 1, // log errors only + eLOG_ALERT = 2, // log alerts and errors only + eLOG_NORMAL = 3, // log all normal events, no debug + eLOG_DEBUG = 4 // log everything + }; - class CAutoLog - { - public: - enum eLogLevel { - eLOG_NONE = 0, // log entries are discarded - eLOG_ERROR = 1, // log errors only - eLOG_ALERT = 2, // log alerts and errors only - eLOG_NORMAL = 3, // log all normal events, no debug - eLOG_DEBUG = 4 // log everything - }; + // Global setting for all AutoLog instances for this application. Can be set on the fly. Default is eLOG_NORMAL. + void SetLogLevel(eLogLevel loglevel); - // Global setting for all AutoLog instances for this application. Can be set on the fly. Default is eLOG_NORMAL. - void SetLogLevel(eLogLevel loglevel); + // Global setting for all AutoLog instances for this application. Can be set on the fly. Default is eLOG_ERROR. + void SetPrintLevel(eLogLevel printlevel); - // Global setting for all AutoLog instances for this application. Can be set on the fly. Default is eLOG_ERROR. - void SetPrintLevel(eLogLevel printlevel); + // Global setting for all AutoLog instances for this application. Can be set on the fly. Default is eLOG_ERROR. + void SetFlushLevel(eLogLevel flushlevel); - // Global setting for all AutoLog instances for this application. Can be set on the fly. Default is eLOG_ERROR. - void SetFlushLevel(eLogLevel flushlevel); + // constructor, no file loaded + CAutoLog(); - // constructor, no file loaded - CAutoLog(); + // version of constructor that calls Open(file) + CAutoLog(const char * file); - // version of constructor that calls Open(file) - CAutoLog(const char * file); + // destructor, will close file if opened + ~CAutoLog(); - // destructor, will close file if opened - ~CAutoLog(); + // Open log file. If a file is already open, function will fail. + // returns true if no error + bool Open(const char * file); - // Open log file. If a file is already open, function will fail. - // returns true if no error - bool Open(const char * file); + // Close log file if opened. + void Close(void); - // Close log file if opened. - void Close(void); + // Make an entry in the log. Format and variable arguments are identical to printf. + // severity will be compared to master log level to determine if the log entry will be made + // severity will be compared to master print level to determine if the log entry will be printed to stdout + void Log(eLogLevel severity, char * format, ...); - // Make an entry in the log. Format and variable arguments are identical to printf. - // severity will be compared to master log level to determine if the log entry will be made - // severity will be compared to master print level to determine if the log entry will be printed to stdout - void Log(eLogLevel severity, char * format, ...); + // Equivalent to the above with the approriate severity argument + void LogError(char * format, ...); + void LogAlert(char * format, ...); + void Log(char * format, ...); + void LogDebug(char * format, ...); - // Equivalent to the above with the approriate severity argument - void LogError(char * format, ...); - void LogAlert(char * format, ...); - void Log(char * format, ...); - void LogDebug(char * format, ...); + private: + FILE * pFile; // current log file opened + char * pFilename; // current log file opened + int nTodaysDayOfYear; // remember the current day to detect change of day + void Archive(void); // archives current log - private: - FILE * pFile; // current log file opened - char * pFilename; // current log file opened - int nTodaysDayOfYear; // remember the current day to detect change of day - void Archive(void); // archives current log + static eLogLevel nLogMask; // master severity level + static eLogLevel nPrintMask; // master severity level + static eLogLevel nFlushMask; // master severity level + }; - static eLogLevel nLogMask; // master severity level - static eLogLevel nPrintMask; // master severity level - static eLogLevel nFlushMask; // master severity level - }; + //------------------------------------- + inline void CAutoLog::SetLogLevel(eLogLevel loglevel) + { + nLogMask = loglevel; + } - //------------------------------------- - inline void CAutoLog::SetLogLevel(eLogLevel loglevel) - { - nLogMask = loglevel; - } + //------------------------------------- + inline void CAutoLog::SetPrintLevel(eLogLevel printlevel) + { + nPrintMask = printlevel; + } - //------------------------------------- - inline void CAutoLog::SetPrintLevel(eLogLevel printlevel) - { - nPrintMask = printlevel; - } + //------------------------------------- + inline void CAutoLog::SetFlushLevel(eLogLevel flushlevel) + { + nFlushMask = flushlevel; + } - //------------------------------------- - inline void CAutoLog::SetFlushLevel(eLogLevel flushlevel) - { - nFlushMask = flushlevel; - } + //------------------------------------- + inline CAutoLog::CAutoLog() + { + pFilename = nullptr; + pFile = (FILE *)-1; + nTodaysDayOfYear = 0; + } - //------------------------------------- - inline CAutoLog::CAutoLog() - { - pFilename = nullptr; - pFile = (FILE *)-1; - } + //------------------------------------- + inline CAutoLog::CAutoLog(const char * file) + { + pFilename = nullptr; + pFile = (FILE *)-1; + Open(file); + } - //------------------------------------- - inline CAutoLog::CAutoLog(const char * file) - { - pFilename = nullptr; - pFile = (FILE *)-1; - Open(file); - } - - //------------------------------------- - inline CAutoLog::~CAutoLog() - { - Close(); - } -}; + //------------------------------------- + inline CAutoLog::~CAutoLog() + { + Close(); + } + }; #ifdef EXTERNAL_DISTRO -}; + }; #endif #endif diff --git a/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/AvatarIteratorCore.cpp b/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/AvatarIteratorCore.cpp index 9548bc9f..be7f3a83 100755 --- a/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/AvatarIteratorCore.cpp +++ b/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/AvatarIteratorCore.cpp @@ -3,476 +3,473 @@ using namespace std; -namespace ChatSystem +namespace ChatSystem { + // AVATAR ITERATOR CORE -// AVATAR ITERATOR CORE - -AvatarIteratorCore::AvatarIteratorCore() -: m_map(nullptr) -{ -} - -AvatarIteratorCore::AvatarIteratorCore(std::map *mapIn, std::map::iterator iter) -: m_map(mapIn), - m_mapIter(iter) -{ -} - -AvatarIteratorCore::~AvatarIteratorCore() -{ -} - -AvatarIteratorCore &AvatarIteratorCore::operator=(const AvatarIteratorCore& rhs) -{ - m_map = rhs.m_map; - m_mapIter = rhs.m_mapIter; - - return (*this); -} - -ChatAvatar *AvatarIteratorCore::getCurAvatar() -{ - ChatAvatar *returnVal = nullptr; - - if (!outOfBounds()) + AvatarIteratorCore::AvatarIteratorCore() + : m_map(nullptr), m_mapIter() { - returnVal = (*m_mapIter).second; } - return returnVal; -} - -bool AvatarIteratorCore::increment() -{ - bool returnVal = false; - - m_mapIter++; - if (!outOfBounds()) + AvatarIteratorCore::AvatarIteratorCore(std::map *mapIn, std::map::iterator iter) + : m_map(mapIn), + m_mapIter(iter) { - returnVal = true; } - return returnVal; -} - -bool AvatarIteratorCore::decrement() -{ - bool returnVal = false; - - m_mapIter--; - if (!outOfBounds()) + AvatarIteratorCore::~AvatarIteratorCore() { - returnVal = true; } - return returnVal; -} - -bool AvatarIteratorCore::outOfBounds() -{ - bool returnVal = true; - - if (m_map) + AvatarIteratorCore &AvatarIteratorCore::operator=(const AvatarIteratorCore& rhs) { - if (m_mapIter != m_map->end()) + m_map = rhs.m_map; + m_mapIter = rhs.m_mapIter; + + return (*this); + } + + ChatAvatar *AvatarIteratorCore::getCurAvatar() + { + ChatAvatar *returnVal = nullptr; + + if (!outOfBounds()) { - returnVal = false; + returnVal = (*m_mapIter).second; } + + return returnVal; } - return returnVal; -} - -// MODERATOR ITERATOR CORE - -ModeratorIteratorCore::ModeratorIteratorCore() -: m_set(nullptr) -{ -} - -ModeratorIteratorCore::ModeratorIteratorCore(std::set *setIn, std::set::iterator iter) -: m_set(setIn), - m_setIter(iter) -{ -} - -ModeratorIteratorCore::~ModeratorIteratorCore() -{ -} - -ModeratorIteratorCore &ModeratorIteratorCore::operator=(const ModeratorIteratorCore& rhs) -{ - m_set = rhs.m_set; - m_setIter = rhs.m_setIter; - - return (*this); -} - -ChatAvatar *ModeratorIteratorCore::getCurAvatar() -{ - ChatAvatar *returnVal = nullptr; - - if (!outOfBounds()) + bool AvatarIteratorCore::increment() { - returnVal = (*m_setIter); - } + bool returnVal = false; - return returnVal; -} - -bool ModeratorIteratorCore::increment() -{ - bool returnVal = false; - - m_setIter++; - if (!outOfBounds()) - { - returnVal = true; - } - - return returnVal; -} - -bool ModeratorIteratorCore::decrement() -{ - bool returnVal = false; - - m_setIter--; - if (!outOfBounds()) - { - returnVal = true; - } - - return returnVal; -} - -bool ModeratorIteratorCore::outOfBounds() -{ - bool returnVal = true; - - if (m_set) - { - if (m_setIter != m_set->end()) + m_mapIter++; + if (!outOfBounds()) { - returnVal = false; + returnVal = true; } + + return returnVal; } - return returnVal; -} - -// TEMPORARY MODERATOR ITERATOR CORE - -TemporaryModeratorIteratorCore::TemporaryModeratorIteratorCore() -: m_set(nullptr) -{ -} - -TemporaryModeratorIteratorCore::TemporaryModeratorIteratorCore(std::set *setIn, std::set::iterator iter) -: m_set(setIn), - m_setIter(iter) -{ -} - -TemporaryModeratorIteratorCore::~TemporaryModeratorIteratorCore() -{ -} - -TemporaryModeratorIteratorCore &TemporaryModeratorIteratorCore::operator=(const TemporaryModeratorIteratorCore& rhs) -{ - m_set = rhs.m_set; - m_setIter = rhs.m_setIter; - - return (*this); -} - -ChatAvatar *TemporaryModeratorIteratorCore::getCurAvatar() -{ - ChatAvatar *returnVal = nullptr; - - if (!outOfBounds()) + bool AvatarIteratorCore::decrement() { - returnVal = (*m_setIter); - } + bool returnVal = false; - return returnVal; -} - -bool TemporaryModeratorIteratorCore::increment() -{ - bool returnVal = false; - - m_setIter++; - if (!outOfBounds()) - { - returnVal = true; - } - - return returnVal; -} - -bool TemporaryModeratorIteratorCore::decrement() -{ - bool returnVal = false; - - m_setIter--; - if (!outOfBounds()) - { - returnVal = true; - } - - return returnVal; -} - -bool TemporaryModeratorIteratorCore::outOfBounds() -{ - bool returnVal = true; - - if (m_set) - { - if (m_setIter != m_set->end()) + m_mapIter--; + if (!outOfBounds()) { - returnVal = false; + returnVal = true; } + + return returnVal; } - return returnVal; -} - -// VOICE ITERATOR CORE - -VoiceIteratorCore::VoiceIteratorCore() -: m_set(nullptr) -{ -} - -VoiceIteratorCore::VoiceIteratorCore(std::set *setIn, std::set::iterator iter) -: m_set(setIn), - m_setIter(iter) -{ -} - -VoiceIteratorCore::~VoiceIteratorCore() -{ -} - -VoiceIteratorCore &VoiceIteratorCore::operator=(const VoiceIteratorCore& rhs) -{ - m_set = rhs.m_set; - m_setIter = rhs.m_setIter; - - return (*this); -} - -ChatAvatar *VoiceIteratorCore::getCurAvatar() -{ - ChatAvatar *returnVal = nullptr; - - if (!outOfBounds()) + bool AvatarIteratorCore::outOfBounds() { - returnVal = (*m_setIter); - } + bool returnVal = true; - return returnVal; -} - -bool VoiceIteratorCore::increment() -{ - bool returnVal = false; - - m_setIter++; - if (!outOfBounds()) - { - returnVal = true; - } - - return returnVal; -} - -bool VoiceIteratorCore::decrement() -{ - bool returnVal = false; - - m_setIter--; - if (!outOfBounds()) - { - returnVal = true; - } - - return returnVal; -} - -bool VoiceIteratorCore::outOfBounds() -{ - bool returnVal = true; - - if (m_set) - { - if (m_setIter != m_set->end()) + if (m_map) { - returnVal = false; + if (m_mapIter != m_map->end()) + { + returnVal = false; + } } + + return returnVal; } - return returnVal; -} + // MODERATOR ITERATOR CORE -// INVITE ITERATOR CORE - -InviteIteratorCore::InviteIteratorCore() -: m_set(nullptr) -{ -} - -InviteIteratorCore::InviteIteratorCore(std::set *setIn, std::set::iterator iter) -: m_set(setIn), - m_setIter(iter) -{ -} - -InviteIteratorCore::~InviteIteratorCore() -{ -} - -InviteIteratorCore &InviteIteratorCore::operator=(const InviteIteratorCore& rhs) -{ - m_set = rhs.m_set; - m_setIter = rhs.m_setIter; - - return (*this); -} - -ChatAvatar *InviteIteratorCore::getCurAvatar() -{ - ChatAvatar *returnVal = nullptr; - - if (!outOfBounds()) + ModeratorIteratorCore::ModeratorIteratorCore() + : m_set(nullptr), m_setIter() { - returnVal = (*m_setIter); } - return returnVal; -} - -bool InviteIteratorCore::increment() -{ - bool returnVal = false; - - m_setIter++; - if (!outOfBounds()) + ModeratorIteratorCore::ModeratorIteratorCore(std::set *setIn, std::set::iterator iter) + : m_set(setIn), + m_setIter(iter) { - returnVal = true; } - return returnVal; -} - -bool InviteIteratorCore::decrement() -{ - bool returnVal = false; - - m_setIter--; - if (!outOfBounds()) + ModeratorIteratorCore::~ModeratorIteratorCore() { - returnVal = true; } - return returnVal; -} - -bool InviteIteratorCore::outOfBounds() -{ - bool returnVal = true; - - if (m_set) + ModeratorIteratorCore &ModeratorIteratorCore::operator=(const ModeratorIteratorCore& rhs) { - if (m_setIter != m_set->end()) + m_set = rhs.m_set; + m_setIter = rhs.m_setIter; + + return (*this); + } + + ChatAvatar *ModeratorIteratorCore::getCurAvatar() + { + ChatAvatar *returnVal = nullptr; + + if (!outOfBounds()) { - returnVal = false; + returnVal = (*m_setIter); } + + return returnVal; } - return returnVal; -} - -// BAN ITERATOR CORE - -BanIteratorCore::BanIteratorCore() -: m_set(nullptr) -{ -} - -BanIteratorCore::BanIteratorCore(std::set *setIn, std::set::iterator iter) -: m_set(setIn), - m_setIter(iter) -{ -} - -BanIteratorCore::~BanIteratorCore() -{ -} - -BanIteratorCore &BanIteratorCore::operator=(const BanIteratorCore& rhs) -{ - m_set = rhs.m_set; - m_setIter = rhs.m_setIter; - - return (*this); -} - -ChatAvatar *BanIteratorCore::getCurAvatar() -{ - ChatAvatar *returnVal = nullptr; - - if (!outOfBounds()) + bool ModeratorIteratorCore::increment() { - returnVal = (*m_setIter); - } + bool returnVal = false; - return returnVal; -} - -bool BanIteratorCore::increment() -{ - bool returnVal = false; - - m_setIter++; - if (!outOfBounds()) - { - returnVal = true; - } - - return returnVal; -} - -bool BanIteratorCore::decrement() -{ - bool returnVal = false; - - m_setIter--; - if (!outOfBounds()) - { - returnVal = true; - } - - return returnVal; -} - -bool BanIteratorCore::outOfBounds() -{ - bool returnVal = true; - - if (m_set) - { - if (m_setIter != m_set->end()) + m_setIter++; + if (!outOfBounds()) { - returnVal = false; + returnVal = true; } + + return returnVal; } - return returnVal; -} + bool ModeratorIteratorCore::decrement() + { + bool returnVal = false; -}; + m_setIter--; + if (!outOfBounds()) + { + returnVal = true; + } + return returnVal; + } + + bool ModeratorIteratorCore::outOfBounds() + { + bool returnVal = true; + + if (m_set) + { + if (m_setIter != m_set->end()) + { + returnVal = false; + } + } + + return returnVal; + } + + // TEMPORARY MODERATOR ITERATOR CORE + + TemporaryModeratorIteratorCore::TemporaryModeratorIteratorCore() + : m_set(nullptr), m_setIter() + { + } + + TemporaryModeratorIteratorCore::TemporaryModeratorIteratorCore(std::set *setIn, std::set::iterator iter) + : m_set(setIn), + m_setIter(iter) + { + } + + TemporaryModeratorIteratorCore::~TemporaryModeratorIteratorCore() + { + } + + TemporaryModeratorIteratorCore &TemporaryModeratorIteratorCore::operator=(const TemporaryModeratorIteratorCore& rhs) + { + m_set = rhs.m_set; + m_setIter = rhs.m_setIter; + + return (*this); + } + + ChatAvatar *TemporaryModeratorIteratorCore::getCurAvatar() + { + ChatAvatar *returnVal = nullptr; + + if (!outOfBounds()) + { + returnVal = (*m_setIter); + } + + return returnVal; + } + + bool TemporaryModeratorIteratorCore::increment() + { + bool returnVal = false; + + m_setIter++; + if (!outOfBounds()) + { + returnVal = true; + } + + return returnVal; + } + + bool TemporaryModeratorIteratorCore::decrement() + { + bool returnVal = false; + + m_setIter--; + if (!outOfBounds()) + { + returnVal = true; + } + + return returnVal; + } + + bool TemporaryModeratorIteratorCore::outOfBounds() + { + bool returnVal = true; + + if (m_set) + { + if (m_setIter != m_set->end()) + { + returnVal = false; + } + } + + return returnVal; + } + + // VOICE ITERATOR CORE + + VoiceIteratorCore::VoiceIteratorCore() + : m_set(nullptr), m_setIter() + { + } + + VoiceIteratorCore::VoiceIteratorCore(std::set *setIn, std::set::iterator iter) + : m_set(setIn), + m_setIter(iter) + { + } + + VoiceIteratorCore::~VoiceIteratorCore() + { + } + + VoiceIteratorCore &VoiceIteratorCore::operator=(const VoiceIteratorCore& rhs) + { + m_set = rhs.m_set; + m_setIter = rhs.m_setIter; + + return (*this); + } + + ChatAvatar *VoiceIteratorCore::getCurAvatar() + { + ChatAvatar *returnVal = nullptr; + + if (!outOfBounds()) + { + returnVal = (*m_setIter); + } + + return returnVal; + } + + bool VoiceIteratorCore::increment() + { + bool returnVal = false; + + m_setIter++; + if (!outOfBounds()) + { + returnVal = true; + } + + return returnVal; + } + + bool VoiceIteratorCore::decrement() + { + bool returnVal = false; + + m_setIter--; + if (!outOfBounds()) + { + returnVal = true; + } + + return returnVal; + } + + bool VoiceIteratorCore::outOfBounds() + { + bool returnVal = true; + + if (m_set) + { + if (m_setIter != m_set->end()) + { + returnVal = false; + } + } + + return returnVal; + } + + // INVITE ITERATOR CORE + + InviteIteratorCore::InviteIteratorCore() + : m_set(nullptr), m_setIter() + { + } + + InviteIteratorCore::InviteIteratorCore(std::set *setIn, std::set::iterator iter) + : m_set(setIn), + m_setIter(iter) + { + } + + InviteIteratorCore::~InviteIteratorCore() + { + } + + InviteIteratorCore &InviteIteratorCore::operator=(const InviteIteratorCore& rhs) + { + m_set = rhs.m_set; + m_setIter = rhs.m_setIter; + + return (*this); + } + + ChatAvatar *InviteIteratorCore::getCurAvatar() + { + ChatAvatar *returnVal = nullptr; + + if (!outOfBounds()) + { + returnVal = (*m_setIter); + } + + return returnVal; + } + + bool InviteIteratorCore::increment() + { + bool returnVal = false; + + m_setIter++; + if (!outOfBounds()) + { + returnVal = true; + } + + return returnVal; + } + + bool InviteIteratorCore::decrement() + { + bool returnVal = false; + + m_setIter--; + if (!outOfBounds()) + { + returnVal = true; + } + + return returnVal; + } + + bool InviteIteratorCore::outOfBounds() + { + bool returnVal = true; + + if (m_set) + { + if (m_setIter != m_set->end()) + { + returnVal = false; + } + } + + return returnVal; + } + + // BAN ITERATOR CORE + + BanIteratorCore::BanIteratorCore() + : m_set(nullptr), m_setIter() + { + } + + BanIteratorCore::BanIteratorCore(std::set *setIn, std::set::iterator iter) + : m_set(setIn), + m_setIter(iter) + { + } + + BanIteratorCore::~BanIteratorCore() + { + } + + BanIteratorCore &BanIteratorCore::operator=(const BanIteratorCore& rhs) + { + m_set = rhs.m_set; + m_setIter = rhs.m_setIter; + + return (*this); + } + + ChatAvatar *BanIteratorCore::getCurAvatar() + { + ChatAvatar *returnVal = nullptr; + + if (!outOfBounds()) + { + returnVal = (*m_setIter); + } + + return returnVal; + } + + bool BanIteratorCore::increment() + { + bool returnVal = false; + + m_setIter++; + if (!outOfBounds()) + { + returnVal = true; + } + + return returnVal; + } + + bool BanIteratorCore::decrement() + { + bool returnVal = false; + + m_setIter--; + if (!outOfBounds()) + { + returnVal = true; + } + + return returnVal; + } + + bool BanIteratorCore::outOfBounds() + { + bool returnVal = true; + + if (m_set) + { + if (m_setIter != m_set->end()) + { + returnVal = false; + } + } + + return returnVal; + } +}; \ No newline at end of file diff --git a/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/ChatAPICore.cpp b/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/ChatAPICore.cpp index 99cfe621..797c4aba 100755 --- a/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/ChatAPICore.cpp +++ b/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/ChatAPICore.cpp @@ -13,316 +13,316 @@ const unsigned long kChatApiVersion = 2; -namespace ChatSystem +namespace ChatSystem { + using namespace std; + using namespace Base; + using namespace Plat_Unicode; + using namespace GenericAPI; -using namespace std; -using namespace Base; -using namespace Plat_Unicode; -using namespace GenericAPI; - -const char * const ChatAPICore::ms_errorStringsEnglish[] = -{ - "Succeeded", // 0 - "Timed Out", - "Duplicate login", - "Source avatar does not exist", - "Destination avatar does not exist", - "Address does not exist", // 5 - "Address is not a room", - "Address is not an AID node", - "Friend not found", - "Unknown failure", - "Source avatar not in room", // 10 - "Destination avatar not in room", - "Avatar is banned from room", - "Room is private", - "Room is moderated", - "Not in room", // 15 - "Insufficient room privileges", - "Database error", - "Cannot get avatar ID", - "Cannot get node ID", - "Cannot get persistent message ID", // 20 - "Persistent message not found", - "Maximum number of avatars already in room", - "Destination avatar is ignoring source avatar", - "Room already exists", - "Nothing to confirm", // 25 - "Duplicate friend", - "Ignore not found", - "Duplicate ignore", - "Database error", - "Destination avatar is not a moderator", // 30 - "Destination avatar is not a invited", - "Destination avatar has not been banned", - "Duplicate ban", - "Duplicate moderator", - "Duplicate invite", // 35 - "Already in room", - "Parent room is not persistent", - "Parent node is of wrong type", - "No fan club handle", - "AID node already exists", // 40 - "UID node already exists", - "Wrong chat server for request", - "Succeeded, but local data is invalid", - "Login with nullptr name", - "No server assigned to this identity", // 45 - "Another server already assumed this identity", - "Remote server is down", - "Node ID conflict", - "Invalid node name", - "Insufficient message privileges", // 50 - "Snoop already added", - "Not snooping", - "Destination avatar is not a temporary moderator", - "Destination avatar does not have voice", - "Duplicate temporary moderator", // 55 - "Duplicate voice", - "Chat avatar must first be logged out", - "No work to do", - "Cannot perform rename to nullptr avatar name", - "Cannot perform station acct transfer to stationID = 0", // 60 - "Cannot perform avatar move to nullptr avatar address", - "Failed to obtain an ID for a new room or avatar", - "Room is local to namespace/world; cannot enter from other worlds", - "Room is local to game; cannot enter from other game namespaces", - "Destination avatar has not submitted entry request for room", // 65 - "Insufficient login priority to force logout of current avatar", - "Avatar must wait to be allowed into specified room.", - "Persistent message would exceed inbox limit for this avatar", - "Duplicate destination specified for multiple persistent send", - "Persistent message would exceed given category limit", // 70 - "Add friend request is pending due to destination avatar is offline", -}; - -unsigned ChatAPICore::ms_numErrorStrings = sizeof(ChatAPICore::ms_errorStringsEnglish) / sizeof(const char *); - -ChatAPICore::ChatAPICore(const char *registrar_host, short registrar_port, const char *server_host, short server_port) -: GenericAPICore(registrar_host, - registrar_port, - 180 /*request timeout*/, - 10 /* reconnect timeout */, - 60 /*nodata timeout*/, - 60 /*noack timeout*/, - 2048 /*in buffer in KB*/, - 2048 /*out buffer in KB*/, - 15 /*keepalives in secs*/), - m_connected(false), - m_sentVersion(false), - m_inFailoverMode(false), - m_failoverAvatarResRemain(0), - m_failoverRoomResRemain(0), - m_requestCount(0), - m_setToRegistrar(true), - m_registrarHost(registrar_host), - m_defaultServerHost(server_host), - m_assignedServerHost(server_host), - m_registrarPort(registrar_port), - m_defaultServerPort(server_port), - m_assignedServerPort(server_port), - m_timeSinceLastDisconnect(time(nullptr)), - m_rcvdRegistrarResponse(false), - m_shouldSendVersion(true) -{ - // prevent user requests from going through - suspendProcessing(); -} - -ChatAPICore::~ChatAPICore() -{ - m_api = nullptr; - - std::map::iterator iter = m_avatarCoreCache.begin(); - for (; iter != m_avatarCoreCache.end(); ++iter) + const char * const ChatAPICore::ms_errorStringsEnglish[] = { - delete (*iter).second; + "Succeeded", // 0 + "Timed Out", + "Duplicate login", + "Source avatar does not exist", + "Destination avatar does not exist", + "Address does not exist", // 5 + "Address is not a room", + "Address is not an AID node", + "Friend not found", + "Unknown failure", + "Source avatar not in room", // 10 + "Destination avatar not in room", + "Avatar is banned from room", + "Room is private", + "Room is moderated", + "Not in room", // 15 + "Insufficient room privileges", + "Database error", + "Cannot get avatar ID", + "Cannot get node ID", + "Cannot get persistent message ID", // 20 + "Persistent message not found", + "Maximum number of avatars already in room", + "Destination avatar is ignoring source avatar", + "Room already exists", + "Nothing to confirm", // 25 + "Duplicate friend", + "Ignore not found", + "Duplicate ignore", + "Database error", + "Destination avatar is not a moderator", // 30 + "Destination avatar is not a invited", + "Destination avatar has not been banned", + "Duplicate ban", + "Duplicate moderator", + "Duplicate invite", // 35 + "Already in room", + "Parent room is not persistent", + "Parent node is of wrong type", + "No fan club handle", + "AID node already exists", // 40 + "UID node already exists", + "Wrong chat server for request", + "Succeeded, but local data is invalid", + "Login with nullptr name", + "No server assigned to this identity", // 45 + "Another server already assumed this identity", + "Remote server is down", + "Node ID conflict", + "Invalid node name", + "Insufficient message privileges", // 50 + "Snoop already added", + "Not snooping", + "Destination avatar is not a temporary moderator", + "Destination avatar does not have voice", + "Duplicate temporary moderator", // 55 + "Duplicate voice", + "Chat avatar must first be logged out", + "No work to do", + "Cannot perform rename to nullptr avatar name", + "Cannot perform station acct transfer to stationID = 0", // 60 + "Cannot perform avatar move to nullptr avatar address", + "Failed to obtain an ID for a new room or avatar", + "Room is local to namespace/world; cannot enter from other worlds", + "Room is local to game; cannot enter from other game namespaces", + "Destination avatar has not submitted entry request for room", // 65 + "Insufficient login priority to force logout of current avatar", + "Avatar must wait to be allowed into specified room.", + "Persistent message would exceed inbox limit for this avatar", + "Duplicate destination specified for multiple persistent send", + "Persistent message would exceed given category limit", // 70 + "Add friend request is pending due to destination avatar is offline", + }; + + unsigned ChatAPICore::ms_numErrorStrings = sizeof(ChatAPICore::ms_errorStringsEnglish) / sizeof(const char *); + + ChatAPICore::ChatAPICore(const char *registrar_host, short registrar_port, const char *server_host, short server_port) + : GenericAPICore(registrar_host, + registrar_port, + 180 /*request timeout*/, + 10 /* reconnect timeout */, + 60 /*nodata timeout*/, + 60 /*noack timeout*/, + 2048 /*in buffer in KB*/, + 2048 /*out buffer in KB*/, + 15 /*keepalives in secs*/), + m_connected(false), + m_sentVersion(false), + m_inFailoverMode(false), + m_failoverAvatarResRemain(0), + m_failoverRoomResRemain(0), + m_requestCount(0), + m_setToRegistrar(true), + m_registrarHost(registrar_host), + m_defaultServerHost(server_host), + m_assignedServerHost(server_host), + m_registrarPort(registrar_port), + m_defaultServerPort(server_port), + m_assignedServerPort(server_port), + m_timeSinceLastDisconnect(time(nullptr)), + m_rcvdRegistrarResponse(false), + m_shouldSendVersion(true), + m_api(nullptr) + { + // prevent user requests from going through + suspendProcessing(); } - std::map::iterator iter2 = m_avatarCache.begin(); - for (; iter2 != m_avatarCache.end(); ++iter2) + ChatAPICore::~ChatAPICore() { - delete (*iter2).second; - } + m_api = nullptr; - std::map::iterator iter3 = m_roomCoreCache.begin(); - for (; iter3 != m_roomCoreCache.end(); ++iter3) - { - delete (*iter3).second; - } - - std::map::iterator iter4 = m_roomCache.begin(); - for (; iter4 != m_roomCache.end(); ++iter4) - { - delete (*iter4).second; - } -} - -ChatUnicodeString ChatAPICore::getErrorString(unsigned resultCode) -{ - ChatUnicodeString errorString; - - if (resultCode < ms_numErrorStrings) - { - errorString = ms_errorStringsEnglish[resultCode]; - } - - return errorString; -} - -void ChatAPICore::cacheAvatar(ChatAvatarCore *avatarCore) -{ - if(avatarCore) - { - pair < map::iterator, bool > result; - - result = m_avatarCoreCache.insert(pair(avatarCore->getAvatarID(), avatarCore)); - - if (result.second == true) + std::map::iterator iter = m_avatarCoreCache.begin(); + for (; iter != m_avatarCoreCache.end(); ++iter) { - // create m_avatarCache entry as well - ChatAvatar *newAvatar = new ChatAvatar(avatarCore->getAvatarID(), - avatarCore->getUserID(), - ChatUnicodeString(avatarCore->getName().data(), avatarCore->getName().size()), - ChatUnicodeString(avatarCore->getAddress().data(), avatarCore->getAddress().size()), - ChatUnicodeString(avatarCore->getGateway().data(), avatarCore->getGateway().size()), - ChatUnicodeString(avatarCore->getServer().data(), avatarCore->getServer().size()), - avatarCore->getGatewayID(), - avatarCore->getServerID(), - ChatUnicodeString(avatarCore->getLoginLocation().data(), avatarCore->getLoginLocation().size()), - avatarCore->getAttributes()); - - newAvatar->setLoginPriority(avatarCore->getLoginPriority()); - newAvatar->setForwardingEmail(avatarCore->getEmail()); - newAvatar->setInboxLimit(avatarCore->getInboxLimit()); - - m_avatarCache.insert(pair(newAvatar->getAvatarID(), newAvatar)); + delete (*iter).second; } - else + + std::map::iterator iter2 = m_avatarCache.begin(); + for (; iter2 != m_avatarCache.end(); ++iter2) { - // insert failed; we have to clean up the ChatAvatarCore - delete avatarCore; + delete (*iter2).second; + } + + std::map::iterator iter3 = m_roomCoreCache.begin(); + for (; iter3 != m_roomCoreCache.end(); ++iter3) + { + delete (*iter3).second; + } + + std::map::iterator iter4 = m_roomCache.begin(); + for (; iter4 != m_roomCache.end(); ++iter4) + { + delete (*iter4).second; } } -} -ChatAvatarCore *ChatAPICore::getAvatarCore(unsigned avatarID) -{ - ChatAvatarCore *returnAvatar = nullptr; - - std::map::iterator iter = m_avatarCoreCache.find(avatarID); - if(iter != m_avatarCoreCache.end()) + ChatUnicodeString ChatAPICore::getErrorString(unsigned resultCode) { - returnAvatar = (*iter).second; + ChatUnicodeString errorString; + + if (resultCode < ms_numErrorStrings) + { + errorString = ms_errorStringsEnglish[resultCode]; + } + + return errorString; } - return(returnAvatar); -} -ChatAvatar *ChatAPICore::getAvatar(unsigned avatarID) -{ - ChatAvatar *returnAvatar = nullptr; - - std::map::iterator iter = m_avatarCache.find(avatarID); - if(iter != m_avatarCache.end()) + void ChatAPICore::cacheAvatar(ChatAvatarCore *avatarCore) { - returnAvatar = (*iter).second; + if (avatarCore) + { + pair < map::iterator, bool > result; + + result = m_avatarCoreCache.insert(pair(avatarCore->getAvatarID(), avatarCore)); + + if (result.second == true) + { + // create m_avatarCache entry as well + ChatAvatar *newAvatar = new ChatAvatar(avatarCore->getAvatarID(), + avatarCore->getUserID(), + ChatUnicodeString(avatarCore->getName().data(), avatarCore->getName().size()), + ChatUnicodeString(avatarCore->getAddress().data(), avatarCore->getAddress().size()), + ChatUnicodeString(avatarCore->getGateway().data(), avatarCore->getGateway().size()), + ChatUnicodeString(avatarCore->getServer().data(), avatarCore->getServer().size()), + avatarCore->getGatewayID(), + avatarCore->getServerID(), + ChatUnicodeString(avatarCore->getLoginLocation().data(), avatarCore->getLoginLocation().size()), + avatarCore->getAttributes()); + + newAvatar->setLoginPriority(avatarCore->getLoginPriority()); + newAvatar->setForwardingEmail(avatarCore->getEmail()); + newAvatar->setInboxLimit(avatarCore->getInboxLimit()); + + m_avatarCache.insert(pair(newAvatar->getAvatarID(), newAvatar)); + } + else + { + // insert failed; we have to clean up the ChatAvatarCore + delete avatarCore; + } + } } - return(returnAvatar); -} -ChatAvatarCore *ChatAPICore::decacheAvatar(unsigned avatarID) -{ - ChatAvatarCore *returnAvatar = nullptr; - std::map::iterator iterCore = m_avatarCoreCache.find(avatarID); - if(iterCore != m_avatarCoreCache.end()) + ChatAvatarCore *ChatAPICore::getAvatarCore(unsigned avatarID) { - returnAvatar = (*iterCore).second; - m_avatarCoreCache.erase(iterCore); + ChatAvatarCore *returnAvatar = nullptr; + + std::map::iterator iter = m_avatarCoreCache.find(avatarID); + if (iter != m_avatarCoreCache.end()) + { + returnAvatar = (*iter).second; + } + return(returnAvatar); + } + + ChatAvatar *ChatAPICore::getAvatar(unsigned avatarID) + { + ChatAvatar *returnAvatar = nullptr; - // erase and delete from m_avatarCache as well std::map::iterator iter = m_avatarCache.find(avatarID); - delete (*iter).second; - m_avatarCache.erase(iter); - } - return(returnAvatar); -} - -void ChatAPICore::cacheRoom(ChatRoomCore *roomCore) -{ - if(roomCore) - { - pair < map::iterator, bool > result; - result = m_roomCoreCache.insert(pair(roomCore->getRoomID(), roomCore)); - - if (result.second == true) + if (iter != m_avatarCache.end()) { - // create m_avatarCache entry as well - ChatRoom *newRoom = new ChatRoom(roomCore); + returnAvatar = (*iter).second; + } + return(returnAvatar); + } - m_roomCache.insert(pair(roomCore->getRoomID(), newRoom)); + ChatAvatarCore *ChatAPICore::decacheAvatar(unsigned avatarID) + { + ChatAvatarCore *returnAvatar = nullptr; + std::map::iterator iterCore = m_avatarCoreCache.find(avatarID); + if (iterCore != m_avatarCoreCache.end()) + { + returnAvatar = (*iterCore).second; + m_avatarCoreCache.erase(iterCore); + + // erase and delete from m_avatarCache as well + std::map::iterator iter = m_avatarCache.find(avatarID); + delete (*iter).second; + m_avatarCache.erase(iter); + } + return(returnAvatar); + } + + void ChatAPICore::cacheRoom(ChatRoomCore *roomCore) + { + if (roomCore) + { + pair < map::iterator, bool > result; + result = m_roomCoreCache.insert(pair(roomCore->getRoomID(), roomCore)); + + if (result.second == true) + { + // create m_avatarCache entry as well + ChatRoom *newRoom = new ChatRoom(roomCore); + + m_roomCache.insert(pair(roomCore->getRoomID(), newRoom)); + } } } -} -ChatRoomCore *ChatAPICore::getRoomCore(unsigned roomID) -{ - ChatRoomCore *returnRoom = nullptr; - std::map::iterator iter = m_roomCoreCache.find(roomID); - if(iter != m_roomCoreCache.end()) + ChatRoomCore *ChatAPICore::getRoomCore(unsigned roomID) { - returnRoom = (*iter).second; + ChatRoomCore *returnRoom = nullptr; + std::map::iterator iter = m_roomCoreCache.find(roomID); + if (iter != m_roomCoreCache.end()) + { + returnRoom = (*iter).second; + } + + return(returnRoom); } - - return(returnRoom); -} -ChatRoom *ChatAPICore::getRoom(unsigned roomID) -{ - ChatRoom *returnRoom = nullptr; - std::map::iterator iter = m_roomCache.find(roomID); - if(iter != m_roomCache.end()) + ChatRoom *ChatAPICore::getRoom(unsigned roomID) { - returnRoom = (*iter).second; - } - - return(returnRoom); -} - -ChatRoomCore *ChatAPICore::decacheRoom(unsigned roomID) -{ - ChatRoomCore *returnRoom = nullptr; - - std::map::iterator iterCore = m_roomCoreCache.find(roomID); - if(iterCore != m_roomCoreCache.end()) - { - returnRoom = (*iterCore).second; - m_roomCoreCache.erase(iterCore); - - // erase and delete from m_roomCache as well + ChatRoom *returnRoom = nullptr; std::map::iterator iter = m_roomCache.find(roomID); - delete (*iter).second; - m_roomCache.erase(iter); + if (iter != m_roomCache.end()) + { + returnRoom = (*iter).second; + } + + return(returnRoom); } - return(returnRoom); -} - -void ChatAPICore::responseCallback(GenericResponse *res) -{ - switch(res->getType()) + ChatRoomCore *ChatAPICore::decacheRoom(unsigned roomID) { - case RESPONSE_LOGINAVATAR: + ChatRoomCore *returnRoom = nullptr; + + std::map::iterator iterCore = m_roomCoreCache.find(roomID); + if (iterCore != m_roomCoreCache.end()) + { + returnRoom = (*iterCore).second; + m_roomCoreCache.erase(iterCore); + + // erase and delete from m_roomCache as well + std::map::iterator iter = m_roomCache.find(roomID); + delete (*iter).second; + m_roomCache.erase(iter); + } + + return(returnRoom); + } + + void ChatAPICore::responseCallback(GenericResponse *res) + { + switch (res->getType()) + { + case RESPONSE_LOGINAVATAR: { ResLoginAvatar *R = static_cast(res); ChatAvatar *avatar = nullptr; - if(R->getAvatar()) + if (R->getAvatar()) { cacheAvatar(R->getAvatar()); avatar = getAvatar(R->getAvatar()->getAvatarID()); } - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_LOGINAVATAR: avatar=%p\n", avatar); @@ -335,30 +335,30 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnLoginAvatar(R->getTrack(), R->getResult(), avatar, R->getRequiredLoginPriority(), R->getUser()); } break; - case RESPONSE_TEMPORARYAVATAR: - { - ResTemporaryAvatar* R = static_cast(res); - ChatAvatar* avatar = nullptr; + case RESPONSE_TEMPORARYAVATAR: + { + ResTemporaryAvatar* R = static_cast(res); + ChatAvatar* avatar = nullptr; - if ( R->getAvatar() ) - { - cacheAvatar(R->getAvatar()); - avatar = getAvatar(R->getAvatar()->getAvatarID()); - } - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) - { - R->setResult(CHATRESULT_SUCCESSBADDATA); - _chatdebug_("ChatAPI:BadData: RESPONSE_TEMPORARYAVATAR: avatar=%p\n", avatar); - } + if (R->getAvatar()) + { + cacheAvatar(R->getAvatar()); + avatar = getAvatar(R->getAvatar()->getAvatarID()); + } + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) + { + R->setResult(CHATRESULT_SUCCESSBADDATA); + _chatdebug_("ChatAPI:BadData: RESPONSE_TEMPORARYAVATAR: avatar=%p\n", avatar); + } - m_api->OnTemporaryAvatar(R->getTrack(), R->getResult(), avatar, R->getUser()); - } - break; - case RESPONSE_LOGOUTAVATAR: + m_api->OnTemporaryAvatar(R->getTrack(), R->getResult(), avatar, R->getUser()); + } + break; + case RESPONSE_LOGOUTAVATAR: { ResLogoutAvatar *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_LOGOUTAVATAR: avatar=%p\n", avatar); @@ -371,11 +371,11 @@ void ChatAPICore::responseCallback(GenericResponse *res) } } break; - case RESPONSE_DESTROYAVATAR: + case RESPONSE_DESTROYAVATAR: { ResDestroyAvatar *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_DESTROYAVATAR: avatar=%p\n", avatar); @@ -385,24 +385,24 @@ void ChatAPICore::responseCallback(GenericResponse *res) delete avatarCore; } break; - case RESPONSE_GETFANCLUBHANDLE: + case RESPONSE_GETFANCLUBHANDLE: { ResGetFanClubHandle *R = static_cast(res); m_api->OnFanClubHandle(R->getTrack(), R->getResult(), ChatUnicodeString(R->getHandle().data(), R->getHandle().size()), R->getStationID(), R->getFanClubCode(), R->getUser()); } break; - case RESPONSE_GETAVATAR: + case RESPONSE_GETAVATAR: { ResGetAvatar *R = static_cast(res); ChatAvatar *cachedAvatar = nullptr; ChatAvatar *avatar = nullptr; ChatAvatarCore *avatarCore = R->getAvatar(); - + if (R->getResult() == 0 && avatarCore) // if success { // attempt to return locally cached avatar, if available cachedAvatar = getAvatar(avatarCore->getAvatarID()); - + if (cachedAvatar != nullptr) { // update cached information with returned data @@ -419,7 +419,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) } } - if ((!avatar||!avatarCore) && (R->getResult() == CHATRESULT_SUCCESS)) + if ((!avatar || !avatarCore) && (R->getResult() == CHATRESULT_SUCCESS)) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_GETAVATAR: avatarCore=%p, avatar=%p\n", avatarCore, avatar); @@ -435,65 +435,65 @@ void ChatAPICore::responseCallback(GenericResponse *res) delete avatarCore; } break; - case RESPONSE_GETANYAVATAR: - { - ResGetAnyAvatar *R = static_cast(res); - ChatAvatar *cachedAvatar = nullptr; - ChatAvatar *avatar = nullptr; - ChatAvatarCore *avatarCore = R->getAvatar(); + case RESPONSE_GETANYAVATAR: + { + ResGetAnyAvatar *R = static_cast(res); + ChatAvatar *cachedAvatar = nullptr; + ChatAvatar *avatar = nullptr; + ChatAvatarCore *avatarCore = R->getAvatar(); - if (R->getResult() == 0 && avatarCore) // if success - { - // attempt to return locally cached avatar, if available - cachedAvatar = getAvatar(avatarCore->getAvatarID()); + if (R->getResult() == 0 && avatarCore) // if success + { + // attempt to return locally cached avatar, if available + cachedAvatar = getAvatar(avatarCore->getAvatarID()); - if (cachedAvatar != nullptr) - { - // update cached information with returned data - cachedAvatar->setAttributes(avatarCore->getAttributes()); - cachedAvatar->setForwardingEmail(avatarCore->getEmail()); - cachedAvatar->setInboxLimit(avatarCore->getInboxLimit()); + if (cachedAvatar != nullptr) + { + // update cached information with returned data + cachedAvatar->setAttributes(avatarCore->getAttributes()); + cachedAvatar->setForwardingEmail(avatarCore->getEmail()); + cachedAvatar->setInboxLimit(avatarCore->getInboxLimit()); - avatar = cachedAvatar; - } - else - { - // don't cache uncached avatars - avatar = avatarCore->getNewChatAvatar(); - } - } + avatar = cachedAvatar; + } + else + { + // don't cache uncached avatars + avatar = avatarCore->getNewChatAvatar(); + } + } - if ((!avatar||!avatarCore) && (R->getResult() == CHATRESULT_SUCCESS)) - { - R->setResult(CHATRESULT_SUCCESSBADDATA); - _chatdebug_("ChatAPI:BadData: RESPONSE_GETANYAVATAR: avatarCore=%p, avatar=%p\n", avatarCore, avatar); - } + if ((!avatar || !avatarCore) && (R->getResult() == CHATRESULT_SUCCESS)) + { + R->setResult(CHATRESULT_SUCCESSBADDATA); + _chatdebug_("ChatAPI:BadData: RESPONSE_GETANYAVATAR: avatarCore=%p, avatar=%p\n", avatarCore, avatar); + } - m_api->OnGetAnyAvatar(R->getTrack(), R->getResult(), avatar, R->isLoggedIn(), R->getUser()); + m_api->OnGetAnyAvatar(R->getTrack(), R->getResult(), avatar, R->isLoggedIn(), R->getUser()); - if (cachedAvatar == nullptr) - { - delete avatar; - } + if (cachedAvatar == nullptr) + { + delete avatar; + } - delete avatarCore; - } - break; - case RESPONSE_AVATARLIST: - { - ResAvatarList *R = static_cast(res); + delete avatarCore; + } + break; + case RESPONSE_AVATARLIST: + { + ResAvatarList *R = static_cast(res); - m_api->OnAvatarList(R->getTrack(), R->getResult(), R->getListLength(), R->getAvatarList(), R->getUser()); - - break; - } - case RESPONSE_SETAVATARATTRIBUTES: + m_api->OnAvatarList(R->getTrack(), R->getResult(), R->getListLength(), R->getAvatarList(), R->getUser()); + + break; + } + case RESPONSE_SETAVATARATTRIBUTES: { ResSetAvatarAttributes *R = static_cast(res); ChatAvatar *cachedAvatar = nullptr; ChatAvatar *avatar = nullptr; ChatAvatarCore *avatarCore = R->getAvatar(); - + if (R->getResult() == 0 && avatarCore) // if success { avatar = avatarCore->getNewChatAvatar(); @@ -508,7 +508,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) } } } - + if (cachedAvatar != nullptr) { cachedAvatar = avatar; @@ -516,7 +516,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) } else { - if ((!avatar||!avatarCore) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !avatarCore) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_SETAVATARATTRIBUTES: avatarCore=%p, avatar=%p\n", avatarCore, avatar); @@ -528,54 +528,54 @@ void ChatAPICore::responseCallback(GenericResponse *res) delete avatarCore; } break; - case RESPONSE_SETSTATUSMESSAGE: - { - ResSetAvatarStatusMessage *R = static_cast(res); - ChatAvatar *cachedAvatar = nullptr; - ChatAvatar *avatar = nullptr; - ChatAvatarCore *avatarCore = R->getAvatar(); + case RESPONSE_SETSTATUSMESSAGE: + { + ResSetAvatarStatusMessage *R = static_cast(res); + ChatAvatar *cachedAvatar = nullptr; + ChatAvatar *avatar = nullptr; + ChatAvatarCore *avatarCore = R->getAvatar(); - if (R->getResult() == 0 && avatarCore) // if success - { - avatar = avatarCore->getNewChatAvatar(); - if (avatar) - { - // attempt to return locally cached avatar, if available - cachedAvatar = getAvatar(avatar->getAvatarID()); + if (R->getResult() == 0 && avatarCore) // if success + { + avatar = avatarCore->getNewChatAvatar(); + if (avatar) + { + // attempt to return locally cached avatar, if available + cachedAvatar = getAvatar(avatar->getAvatarID()); - if (cachedAvatar != nullptr) - { - cachedAvatar->setStatusMessage(avatar->getStatusMessage()); - } - } - } + if (cachedAvatar != nullptr) + { + cachedAvatar->setStatusMessage(avatar->getStatusMessage()); + } + } + } - if (cachedAvatar != nullptr) - { - cachedAvatar = avatar; - m_api->OnSetAvatarStatusMessage(R->getTrack(), R->getResult(), cachedAvatar, R->getUser()); - } - else - { - if ((!avatar||!avatarCore) && R->getResult()==CHATRESULT_SUCCESS) - { - R->setResult(CHATRESULT_SUCCESSBADDATA); - _chatdebug_("ChatAPI:BadData: RESPONSE_SETAVATARATTRIBUTES: avatarCore=%p, avatar=%p\n", avatarCore, avatar); - } - m_api->OnSetAvatarAttributes(R->getTrack(), R->getResult(), avatar, R->getUser()); - } + if (cachedAvatar != nullptr) + { + cachedAvatar = avatar; + m_api->OnSetAvatarStatusMessage(R->getTrack(), R->getResult(), cachedAvatar, R->getUser()); + } + else + { + if ((!avatar || !avatarCore) && R->getResult() == CHATRESULT_SUCCESS) + { + R->setResult(CHATRESULT_SUCCESSBADDATA); + _chatdebug_("ChatAPI:BadData: RESPONSE_SETAVATARATTRIBUTES: avatarCore=%p, avatar=%p\n", avatarCore, avatar); + } + m_api->OnSetAvatarAttributes(R->getTrack(), R->getResult(), avatar, R->getUser()); + } - delete avatar; - delete avatarCore; - } - break; - case RESPONSE_SETAVATAREMAIL: + delete avatar; + delete avatarCore; + } + break; + case RESPONSE_SETAVATAREMAIL: { ResSetAvatarForwardingEmail*R = static_cast(res); ChatAvatar *cachedAvatar = nullptr; ChatAvatar *avatar = nullptr; ChatAvatarCore *avatarCore = R->getAvatar(); - + if (R->getResult() == 0 && avatarCore) // if success { avatar = avatarCore->getNewChatAvatar(); @@ -590,7 +590,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) } } } - + if (cachedAvatar != nullptr) { cachedAvatar = avatar; @@ -598,7 +598,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) } else { - if ((!avatar||!avatarCore) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !avatarCore) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_SETAVATAREMAIL: avatarCore=%p, avatar=%p\n", avatarCore, avatar); @@ -610,13 +610,13 @@ void ChatAPICore::responseCallback(GenericResponse *res) delete avatarCore; } break; - case RESPONSE_SETAVATARINBOXLIMIT: + case RESPONSE_SETAVATARINBOXLIMIT: { ResSetAvatarInboxLimit *R = static_cast(res); ChatAvatar *cachedAvatar = nullptr; ChatAvatar *avatar = nullptr; ChatAvatarCore *avatarCore = R->getAvatar(); - + if (R->getResult() == 0 && avatarCore) // if success { avatar = avatarCore->getNewChatAvatar(); @@ -631,7 +631,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) } } } - + if (cachedAvatar != nullptr) { cachedAvatar = avatar; @@ -639,7 +639,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) } else { - if ((!avatar||!avatarCore) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !avatarCore) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_SETAVATARINBOXLIMIT: avatarCore=%p, avatar=%p\n", avatarCore, avatar); @@ -651,7 +651,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) delete avatarCore; } break; - case RESPONSE_GETROOM: + case RESPONSE_GETROOM: { ResGetRoom *R = static_cast(res); ChatRoom *room = nullptr; @@ -663,7 +663,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) if (getRoomCore(roomid) == nullptr) { // we need to cache this room first - cacheRoom(roomCore); + cacheRoom(roomCore); // are there any parent rooms to the one we // created that we need to cache as well? @@ -679,7 +679,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) // room was already cached, so we must // recache it ChatRoomCore *oldCore = decacheRoom(roomid); - + delete oldCore; cacheRoom(roomCore); @@ -692,11 +692,11 @@ void ChatAPICore::responseCallback(GenericResponse *res) delete (*iter); } } - + room = getRoom(roomid); } - - if ((!room||!roomCore) && R->getResult()==CHATRESULT_SUCCESS) + + if ((!room || !roomCore) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_GETROOM: roomCore=%p, room=%p\n", roomCore, room); @@ -704,7 +704,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnGetRoom(R->getTrack(), R->getResult(), room, R->getUser()); } break; - case RESPONSE_CREATEROOM: + case RESPONSE_CREATEROOM: { ResCreateRoom *R = static_cast(res); @@ -714,7 +714,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) if (R->getResult() == 0) // if success { roomCore = R->getRoom(); - + if (roomCore) { // cache this room @@ -735,7 +735,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) } } - if ((!room||!roomCore) && R->getResult()==CHATRESULT_SUCCESS) + if ((!room || !roomCore) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_CREATEROOM: roomCore=%p, room=%p\n", roomCore, room); @@ -743,18 +743,18 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnCreateRoom(R->getTrack(), R->getResult(), room, R->getUser()); } break; - case RESPONSE_DESTROYROOM: + case RESPONSE_DESTROYROOM: { ResDestroyRoom *R = static_cast(res); m_api->OnDestroyRoom(R->getTrack(), R->getResult(), R->getUser()); // decache occurs on MESSAGE_DESTROYROOM } break; - case RESPONSE_SENDINSTANTMESSAGE: + case RESPONSE_SENDINSTANTMESSAGE: { ResSendInstantMessage *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_SENDINSTANTMESSAGE: avatar=%p\n", avatar); @@ -762,12 +762,12 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnSendInstantMessage(R->getTrack(), R->getResult(), avatar, R->getUser()); } break; - case RESPONSE_SENDROOMMESSAGE: + case RESPONSE_SENDROOMMESSAGE: { ResSendRoomMessage *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getAvatarID()); ChatRoom *room = getRoom(R->getRoomID()); - if ((!avatar||!room) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !room) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_SENDROOMMESSAGE: avatar=%p, room=%p\n", avatar, room); @@ -775,11 +775,11 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnSendRoomMessage(R->getTrack(), R->getResult(), avatar, room, R->getUser()); } break; - case RESPONSE_SENDBROADCASTMESSAGE: + case RESPONSE_SENDBROADCASTMESSAGE: { ResSendBroadcastMessage *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_SENDBROADCASTMESSAGE: avatar=%p\n", avatar); @@ -787,23 +787,23 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnSendBroadcastMessage(R->getTrack(), R->getResult(), avatar, ChatUnicodeString(R->getAddress().data(), R->getAddress().size()), R->getUser()); } break; - case RESPONSE_FILTERMESSAGE: + case RESPONSE_FILTERMESSAGE: { ResFilterMessage *R = static_cast(res); - m_api->OnFilterMessage(R->getTrack(), R->getResult(), ChatUnicodeString(R->getMsg().data(),R->getMsg().size()), R->getUser()); + m_api->OnFilterMessage(R->getTrack(), R->getResult(), ChatUnicodeString(R->getMsg().data(), R->getMsg().size()), R->getUser()); } break; - case RESPONSE_FILTERMESSAGE_EX: + case RESPONSE_FILTERMESSAGE_EX: { ResFilterMessage *R = static_cast(res); - m_api->OnFilterMessageEx(R->getTrack(), R->getResult(), ChatUnicodeString(R->getMsg().data(),R->getMsg().size()), R->getUser()); + m_api->OnFilterMessageEx(R->getTrack(), R->getResult(), ChatUnicodeString(R->getMsg().data(), R->getMsg().size()), R->getUser()); } break; - case RESPONSE_ADDFRIEND: + case RESPONSE_ADDFRIEND: { ResAddFriend *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_ADDFRIEND: avatar=%p\n", avatar); @@ -811,11 +811,11 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnAddFriend(R->getTrack(), R->getResult(), avatar, ChatUnicodeString(R->getName().data(), R->getName().size()), ChatUnicodeString(R->getAddress().data(), R->getAddress().size()), R->getUser()); } break; - case RESPONSE_ADDFRIEND_RECIPROCATE: + case RESPONSE_ADDFRIEND_RECIPROCATE: { ResAddFriendReciprocate *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_ADDFRIEND_RECIPROCATE: avatar=%p\n", avatar); @@ -823,23 +823,23 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnAddFriendReciprocate(R->getTrack(), R->getResult(), avatar, ChatUnicodeString(R->getName().data(), R->getName().size()), ChatUnicodeString(R->getAddress().data(), R->getAddress().size()), R->getUser()); } break; - case RESPONSE_SETFRIENDCOMMENT: + case RESPONSE_SETFRIENDCOMMENT: { ResSetFriendComment *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_ADDFRIEND: avatar=%p\n", avatar); } - m_api->OnSetFriendComment(R->getTrack(), R->getResult(), avatar, ChatUnicodeString(R->getName().data(), R->getName().size()), ChatUnicodeString(R->getAddress().data(), R->getAddress().size()), ChatUnicodeString(R->getComment().data(), R->getComment().size()) ,R->getUser()); + m_api->OnSetFriendComment(R->getTrack(), R->getResult(), avatar, ChatUnicodeString(R->getName().data(), R->getName().size()), ChatUnicodeString(R->getAddress().data(), R->getAddress().size()), ChatUnicodeString(R->getComment().data(), R->getComment().size()), R->getUser()); } break; - case RESPONSE_REMOVEFRIEND: + case RESPONSE_REMOVEFRIEND: { ResRemoveFriend *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_REMOVEFRIEND: avatar=%p\n", avatar); @@ -848,11 +848,11 @@ void ChatAPICore::responseCallback(GenericResponse *res) } break; - case RESPONSE_REMOVEFRIEND_RECIPROCATE: + case RESPONSE_REMOVEFRIEND_RECIPROCATE: { ResRemoveFriendReciprocate *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_REMOVEFRIEND_RECIPROCATE: avatar=%p\n", avatar); @@ -860,11 +860,11 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnRemoveFriendReciprocate(R->getTrack(), R->getResult(), avatar, ChatUnicodeString(R->getName().data(), R->getName().size()), ChatUnicodeString(R->getAddress().data(), R->getAddress().size()), R->getUser()); } break; - case RESPONSE_FRIENDSTATUS: + case RESPONSE_FRIENDSTATUS: { ResFriendStatus *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_FRIENDSTATUS: avatar=%p\n", avatar); @@ -872,11 +872,11 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnFriendStatus(R->getTrack(), R->getResult(), avatar, R->getListLength(), R->getFriendList(), R->getUser()); } break; - case RESPONSE_ADDIGNORE: + case RESPONSE_ADDIGNORE: { ResAddIgnore *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_ADDIGNORE: avatar=%p\n", avatar); @@ -884,11 +884,11 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnAddIgnore(R->getTrack(), R->getResult(), avatar, ChatUnicodeString(R->getName().data(), R->getName().size()), ChatUnicodeString(R->getAddress().data(), R->getAddress().size()), R->getUser()); } break; - case RESPONSE_REMOVEIGNORE: + case RESPONSE_REMOVEIGNORE: { ResRemoveIgnore *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_REMOVEIGNORE: avatar=%p\n", avatar); @@ -896,13 +896,13 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnRemoveIgnore(R->getTrack(), R->getResult(), avatar, ChatUnicodeString(R->getName().data(), R->getName().size()), ChatUnicodeString(R->getAddress().data(), R->getAddress().size()), R->getUser()); } break; - case RESPONSE_ENTERROOM: + case RESPONSE_ENTERROOM: { ResEnterRoom *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getAvatarID()); ChatRoomCore *roomCore = R->getRoom(); ChatRoom *room = getRoom(R->getRoomID()); - + if (R->getResult() == 0) { if (!room && roomCore) @@ -922,7 +922,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) } else if (room && roomCore) { - // We already had room (and parents) cached, and our + // We already had room (and parents) cached, and our // ResEnterRoom object has created a new ChatRoomCore, // so we delete it because we don't need to cache it. delete roomCore; @@ -943,7 +943,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) _chatdebug_("ChatAPI:BadData: RESPONSE_ENTERROOM: avatar=%p, room=%p , roomCore=%p\n", avatar, room, roomCore); } } - if ((!avatar||!room) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !room) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_ENTERROOM: avatar=%p, room=%p\n", avatar, room); @@ -951,12 +951,12 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnEnterRoom(R->getTrack(), R->getResult(), avatar, room, R->getUser()); } break; - case RESPONSE_ALLOWROOMENTRY: + case RESPONSE_ALLOWROOMENTRY: { ResAllowRoomEntry *R = static_cast(res); ChatAvatar *srcAvatar = getAvatar(R->getSrcAvatarID()); - if (!srcAvatar && R->getResult()==CHATRESULT_SUCCESS) + if (!srcAvatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_ALLOWROOMENTRY: srcAvatar=%p\n", srcAvatar); @@ -965,13 +965,13 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnAllowRoomEntry(R->getTrack(), R->getResult(), srcAvatar, R->getDestRoomAddress(), R->getUser()); } break; - case RESPONSE_LEAVEROOM: + case RESPONSE_LEAVEROOM: { ResLeaveRoom *R = static_cast(res); ChatRoom *room = getRoom(R->getRoomID()); - + ChatAvatar *avatar = getAvatar(R->getAvatarID()); - if ((!avatar||!room) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !room) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_LEAVEROOM: avatar=%p, room=%p\n", avatar, room); @@ -979,12 +979,12 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnLeaveRoom(R->getTrack(), R->getResult(), avatar, room, R->getUser()); } break; - case RESPONSE_ADDMODERATOR: + case RESPONSE_ADDMODERATOR: { ResAddModerator *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); ChatRoom *room = getRoom(R->getDestRoomID()); - if ((!avatar||!room) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !room) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_ADDMODERATOR: avatar=%p, room=%p\n", avatar, room); @@ -993,12 +993,12 @@ void ChatAPICore::responseCallback(GenericResponse *res) // cached room gets updated by MESSAGE_ADDMODERATOR } break; - case RESPONSE_REMOVEMODERATOR: + case RESPONSE_REMOVEMODERATOR: { ResRemoveModerator *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); ChatRoom *room = getRoom(R->getDestRoomID()); - if ((!avatar||!room) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !room) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_REMOVEMODERATOR: avatar=%p, room=%p\n", avatar, room); @@ -1007,12 +1007,12 @@ void ChatAPICore::responseCallback(GenericResponse *res) // cached room gets updated by MESSAGE_REMOVEMODERATOR } break; - case RESPONSE_ADDTEMPORARYMODERATOR: + case RESPONSE_ADDTEMPORARYMODERATOR: { ResAddTemporaryModerator *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); ChatRoom *room = getRoom(R->getDestRoomID()); - if ((!avatar||!room) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !room) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_ADDTEMPORARYMODERATOR: avatar=%p, room=%p\n", avatar, room); @@ -1021,12 +1021,12 @@ void ChatAPICore::responseCallback(GenericResponse *res) // cached room gets updated by MESSAGE_ADDMTEMPORARYODERATOR } break; - case RESPONSE_REMOVETEMPORARYMODERATOR: + case RESPONSE_REMOVETEMPORARYMODERATOR: { ResRemoveTemporaryModerator *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); ChatRoom *room = getRoom(R->getDestRoomID()); - if ((!avatar||!room) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !room) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_REMOVETEMPORARYMODERATOR: avatar=%p, room=%p\n", avatar, room); @@ -1035,12 +1035,12 @@ void ChatAPICore::responseCallback(GenericResponse *res) // cached room gets updated by MESSAGE_REMOVETEMPORARYMODERATOR } break; - case RESPONSE_ADDBAN: + case RESPONSE_ADDBAN: { ResAddBan *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); ChatRoom *room = getRoom(R->getDestRoomID()); - if ((!avatar||!room) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !room) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_ADDBAN: avatar=%p, room=%p\n", avatar, room); @@ -1049,12 +1049,12 @@ void ChatAPICore::responseCallback(GenericResponse *res) // cached room gets updated by MESSAGE_ADDBAN } break; - case RESPONSE_REMOVEBAN: + case RESPONSE_REMOVEBAN: { ResRemoveBan *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); ChatRoom *room = getRoom(R->getDestRoomID()); - if ((!avatar||!room) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !room) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_REMOVEBAN: avatar=%p, room=%p\n", avatar, room); @@ -1063,12 +1063,12 @@ void ChatAPICore::responseCallback(GenericResponse *res) // cached room gets updated by MESSAGE_REMOVEBAN } break; - case RESPONSE_ADDINVITE: + case RESPONSE_ADDINVITE: { ResAddInvite *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); ChatRoom *room = getRoom(R->getDestRoomID()); - if ((!avatar||!room) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !room) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_ADDINVITE: avatar=%p, room=%p\n", avatar, room); @@ -1077,12 +1077,12 @@ void ChatAPICore::responseCallback(GenericResponse *res) // cached room gets updated by MESSAGE_ADDINVITE } break; - case RESPONSE_REMOVEINVITE: + case RESPONSE_REMOVEINVITE: { ResRemoveInvite *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); ChatRoom *room = getRoom(R->getDestRoomID()); - if ((!avatar||!room) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !room) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_REMOVEINVITE: avatar=%p, room=%p\n", avatar, room); @@ -1091,12 +1091,12 @@ void ChatAPICore::responseCallback(GenericResponse *res) // cached room gets updated by MESSAGE_REMOVEINVITE } break; - case RESPONSE_GRANTVOICE: + case RESPONSE_GRANTVOICE: { ResGrantVoice *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); ChatRoom *room = getRoom(R->getDestRoomID()); - if ((!avatar||!room) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !room) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_GRANTVOICE: avatar=%p, room=%p\n", avatar, room); @@ -1105,12 +1105,12 @@ void ChatAPICore::responseCallback(GenericResponse *res) // cached room gets updated by MESSAGE_GRANTVOICE } break; - case RESPONSE_REVOKEVOICE: + case RESPONSE_REVOKEVOICE: { ResRevokeVoice *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); ChatRoom *room = getRoom(R->getDestRoomID()); - if ((!avatar||!room) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !room) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_REVOKEVOICE: avatar=%p, room=%p\n", avatar, room); @@ -1119,12 +1119,12 @@ void ChatAPICore::responseCallback(GenericResponse *res) // cached room gets updated by MESSAGE_REVOKEVOICE } break; - case RESPONSE_KICKAVATAR: + case RESPONSE_KICKAVATAR: { ResKickAvatar *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); ChatRoom *room = getRoom(R->getDestRoomID()); - if ((!avatar||!room) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !room) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_KICKAVATAR: avatar=%p, room=%p\n", avatar, room); @@ -1133,12 +1133,12 @@ void ChatAPICore::responseCallback(GenericResponse *res) // cached room gets updated by MESSAGE_KICK } break; - case RESPONSE_SETROOMPARAMS: + case RESPONSE_SETROOMPARAMS: { ResSetRoomParams *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); ChatRoom *room = getRoom(R->getDestRoomID()); - if ((!avatar||!room) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !room) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_SETROOMPARAMS: avatar=%p, room=%p\n", avatar, room); @@ -1148,12 +1148,12 @@ void ChatAPICore::responseCallback(GenericResponse *res) // cached room gets updated by MESSAGE_SETROOMPARAMS } break; - case RESPONSE_CHANGEROOMOWNER: + case RESPONSE_CHANGEROOMOWNER: { ResChangeRoomOwner *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); ChatRoom *room = getRoom(R->getDestRoomID()); - if ((!avatar||!room) && R->getResult()==CHATRESULT_SUCCESS) + if ((!avatar || !room) && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_CHANGEROOMOWNER: avatar=%p, room=%p\n", avatar, room); @@ -1163,7 +1163,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) // cached room gets updated by MESSAGE_CHANGEROOMOWNER } break; - case RESPONSE_GETROOMSUMMARIES: + case RESPONSE_GETROOMSUMMARIES: { ResGetRoomSummaries *R = static_cast(res); unsigned numRooms = R->getNumRooms(); @@ -1172,15 +1172,15 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnGetRoomSummaries(R->getTrack(), R->getResult(), numRooms, foundRooms, R->getUser()); } break; - case RESPONSE_FINDAVATARBYUID: + case RESPONSE_FINDAVATARBYUID: { ResFindAvatarByUID *R = static_cast(res); ChatAvatar **avatarMatches = nullptr; ChatAvatarCore **avatarCoreMatches = nullptr; - + unsigned numAvatarsOnline = R->getNumAvatarsOnline(); - if(R->getResult() == CHATRESULT_SUCCESS) + if (R->getResult() == CHATRESULT_SUCCESS) { avatarCoreMatches = R->getAvatarsCore(); avatarMatches = new ChatAvatar*[numAvatarsOnline]; @@ -1192,14 +1192,14 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnFindAvatarByUID(R->getTrack(), R->getResult(), numAvatarsOnline, avatarMatches, R->getUser()); - delete [] avatarMatches; + delete[] avatarMatches; } break; - case RESPONSE_SENDPERSISTENTMESSAGE: + case RESPONSE_SENDPERSISTENTMESSAGE: { ResSendPersistentMessage *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_SENDPERSISTENTMESSAGE: avatar=%p\n", avatar); @@ -1208,11 +1208,11 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnSendPersistentMessage(R->getTrack(), R->getResult(), avatar, R->getMessageID(), R->getUser()); } break; - case RESPONSE_SENDMULTIPLEPERSISTENTMESSAGES: + case RESPONSE_SENDMULTIPLEPERSISTENTMESSAGES: { ResSendMultiplePersistentMessages *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_SENDMULTIPLEPERSISTENTMESSAGES: avatar=%p\n", avatar); @@ -1221,7 +1221,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnSendMultiplePersistentMessages(R->getTrack(), R->getResult(), R->getNumResults(), &R->getResultVector()[0], &R->getMessageIDvector()[0], avatar, R->getUser()); } break; - case RESPONSE_ALTERPERSISTENTMESSAGE: + case RESPONSE_ALTERPERSISTENTMESSAGE: { ResAlterPersistentMessage *R = static_cast(res); ChatUnicodeString destAvatarName(R->getDestAvatarName().data(), R->getDestAvatarName().length()); @@ -1230,13 +1230,13 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnAlterPersistentMessage(R->getTrack(), R->getResult(), destAvatarName, destAvatarAddress, R->getMessageID()); } break; - case RESPONSE_GETPERSISTENTMESSAGE: + case RESPONSE_GETPERSISTENTMESSAGE: { ResGetPersistentMessage *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); ChatUnicodeString message(R->getMsg().data(), R->getMsg().size()); ChatUnicodeString oobdata(R->getOOB().data(), R->getOOB().size()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_GETPERSISTENTMESSAGE: avatar=%p\n", avatar); @@ -1244,11 +1244,11 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnGetPersistentMessage(R->getTrack(), R->getResult(), avatar, R->getHeader(), message, oobdata, R->getUser()); } break; - case RESPONSE_GETMULTIPLEPERSISTENTMESSAGES: - { + case RESPONSE_GETMULTIPLEPERSISTENTMESSAGES: + { ResGetMultiplePersistentMessages *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_GETMULTIPLEPERSISTENTMESSAGES: avatar=%p\n", avatar); @@ -1256,11 +1256,11 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnGetMultiplePersistentMessages(R->getTrack(), R->getResult(), avatar, R->getListLength(), R->getList(), R->getUser()); } break; - case RESPONSE_UPDATEPERSISTENTMESSAGE: + case RESPONSE_UPDATEPERSISTENTMESSAGE: { ResUpdatePersistentMessage *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_UPDATEPERSISTENTMESSAGE: avatar=%p\n", avatar); @@ -1268,11 +1268,11 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnUpdatePersistentMessage(R->getTrack(), R->getResult(), avatar, R->getUser()); } break; - case RESPONSE_UPDATEPERSISTENTMESSAGES: + case RESPONSE_UPDATEPERSISTENTMESSAGES: { ResUpdatePersistentMessages *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_UPDATEPERSISTENTMESSAGES: avatar=%p\n", avatar); @@ -1280,11 +1280,11 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnUpdatePersistentMessages(R->getTrack(), R->getResult(), avatar, R->getUser()); } break; - case RESPONSE_CHANGEPERSISTENTFOLDER: + case RESPONSE_CHANGEPERSISTENTFOLDER: { ResClassifyPersistentMessages *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_CHANGEPERSISTENTFOLDER: avatar=%p\n", avatar); @@ -1292,18 +1292,18 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnClassifyPersistentMessages(R->getTrack(), R->getResult(), avatar, R->getUser()); } break; - case RESPONSE_PURGEPERSISTENTMESSAGES: + case RESPONSE_PURGEPERSISTENTMESSAGES: { ResDeleteAllPersistentMessages *R = static_cast(res); m_api->OnDeleteAllPersistentMessages(R->getTrack(), R->getResult(), R->getAvatarName(), R->getAvatarAddress(), R->getNumberDeleted(), R->getUser()); } break; - case RESPONSE_GETPERSISTENTHEADERS: + case RESPONSE_GETPERSISTENTHEADERS: { ResGetPersistentHeaders *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_GETPERSISTENTHEADERS: avatar=%p\n", avatar); @@ -1311,11 +1311,11 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnGetPersistentHeaders(R->getTrack(), R->getResult(), avatar, R->getListLength(), R->getList(), R->getUser()); } break; - case RESPONSE_PARTIALPERSISTENTHEADERS: + case RESPONSE_PARTIALPERSISTENTHEADERS: { ResGetPartialPersistentHeaders *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getSrcAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_GETPARTIALPERSISTENTHEADERS: avatar=%p\n", avatar); @@ -1323,18 +1323,18 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnGetPartialPersistentHeaders(R->getTrack(), R->getResult(), avatar, R->getListLength(), R->getList(), R->getUser()); } break; - case RESPONSE_COUNTPERSISTENTMESSAGES: + case RESPONSE_COUNTPERSISTENTMESSAGES: { ResCountPersistentMessages *R = static_cast(res); - + m_api->OnCountPersistentMessages(R->getTrack(), R->getResult(), R->getAvatarName(), R->getAvatarAddress(), R->getNumberOfMessages(), R->getUser()); } break; - case RESPONSE_UNREGISTERROOM: + case RESPONSE_UNREGISTERROOM: { ResUnregisterRoom *R = static_cast(res); ChatRoom *room = getRoom(R->getDestRoomID()); - if (!room && R->getResult()==CHATRESULT_SUCCESS) + if (!room && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_UNREGISTERROOM: room=%p\n", room); @@ -1348,11 +1348,11 @@ void ChatAPICore::responseCallback(GenericResponse *res) } } break; - case RESPONSE_IGNORESTATUS: + case RESPONSE_IGNORESTATUS: { ResIgnoreStatus *R = static_cast(res); ChatAvatar *avatar = getAvatar(R->getAvatarID()); - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_IGNORESTATUS: avatar=%p\n", avatar); @@ -1360,10 +1360,10 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnIgnoreStatus(R->getTrack(), R->getResult(), avatar, R->getListLength(), R->getIgnoreList(), R->getUser()); } break; - case RESPONSE_FAILOVER_RELOGINAVATAR: + case RESPONSE_FAILOVER_RELOGINAVATAR: { ResFailoverReloginAvatar *R = static_cast(res); - + unsigned result = R->getResult(); if (result != 0 && result != CHATRESULT_DUPLICATELOGIN) { @@ -1377,7 +1377,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnLogoutAvatar(0, 0, avatar, nullptr); } } - + m_failoverAvatarResRemain--; if (!m_failoverAvatarResRemain) @@ -1386,14 +1386,14 @@ void ChatAPICore::responseCallback(GenericResponse *res) } } break; - case RESPONSE_FAILOVER_RECREATEROOM: + case RESPONSE_FAILOVER_RECREATEROOM: { ResFailoverRecreateRoom *R = static_cast(res); if (R->getResult() == 0) { ChatRoomCore *rcvdRoom = R->getRoom(); - + if (rcvdRoom) { ChatRoomCore *roomCore = getRoomCore(R->getRoomID()); @@ -1405,11 +1405,10 @@ void ChatAPICore::responseCallback(GenericResponse *res) } else { - // MAKE APPROPRIATE CHANGES to the cached roomCore object - + // creator values should NEVER change - + // CHECK room values (attribs, topic, maxsize, id) // (name, address, createtime should NEVER change) if (roomCore->getRoomID() != rcvdRoom->getRoomID()) @@ -1444,21 +1443,21 @@ void ChatAPICore::responseCallback(GenericResponse *res) ChatUnicodeString cus2(pus2.data(), pus2.size()); ChatAvatar dummySrcAvatar(0, 0, cus1, cus1, cus2, cus2, 0, 0); - + ChatRoom *destRoom = getRoom(R->getRoomID()); - - if (!destRoom && R->getResult()==CHATRESULT_SUCCESS) + + if (!destRoom && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_FAILOVER_RECREATEROOM: destRoom=%p\n", destRoom); } m_api->OnReceiveDestroyRoom(&dummySrcAvatar, destRoom); - + destRoomCore = decacheRoom(R->getRoomID()); delete destRoomCore; } } - + if (R->wasFailoverForcedByServer() == false) { m_failoverRoomResRemain--; @@ -1473,16 +1472,16 @@ void ChatAPICore::responseCallback(GenericResponse *res) } } break; - case RESPONSE_GETAVATARKEYWORDS: + case RESPONSE_GETAVATARKEYWORDS: { ResGetAvatarKeywords *R = static_cast(res); ChatAvatar *avatar = nullptr; - if(R->getResult() == CHATRESULT_SUCCESS) + if (R->getResult() == CHATRESULT_SUCCESS) { avatar = getAvatar(R->getAvatarID()); } - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_GETAVATARKEYWORDS: avatar=%p\n", avatar); @@ -1491,15 +1490,15 @@ void ChatAPICore::responseCallback(GenericResponse *res) } break; - case RESPONSE_SETAVATARKEYWORDS: + case RESPONSE_SETAVATARKEYWORDS: { ResSetAvatarKeywords *R = static_cast(res); ChatAvatar *avatar = nullptr; - if(R->getResult() == CHATRESULT_SUCCESS) + if (R->getResult() == CHATRESULT_SUCCESS) { avatar = getAvatar(R->getAvatarID()); } - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_SETAVATARKEYWORDS: avatar=%p\n", avatar); @@ -1507,13 +1506,13 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnSetAvatarKeywords(R->getTrack(), R->getResult(), avatar, R->getUser()); } break; - case RESPONSE_SEARCHAVATARKEYWORDS: + case RESPONSE_SEARCHAVATARKEYWORDS: { ResSearchAvatarKeywords *R = static_cast(res); ChatAvatar **avatarMatches = nullptr; ChatAvatarCore **avatarCoreMatches = nullptr; - - if(R->getResult() == CHATRESULT_SUCCESS) + + if (R->getResult() == CHATRESULT_SUCCESS) { avatarCoreMatches = R->getMatches(); avatarMatches = new ChatAvatar*[R->getNumMatches()]; @@ -1524,18 +1523,18 @@ void ChatAPICore::responseCallback(GenericResponse *res) } m_api->OnSearchAvatarKeywords(R->getTrack(), R->getResult(), avatarMatches, R->getNumMatches(), R->getUser()); - delete [] avatarMatches; + delete[] avatarMatches; } break; - case RESPONSE_CONFIRMFRIEND: + case RESPONSE_CONFIRMFRIEND: { ResFriendConfirm *R = static_cast(res); ChatAvatar *avatar = nullptr; - if(R->getResult() == CHATRESULT_SUCCESS) + if (R->getResult() == CHATRESULT_SUCCESS) { avatar = getAvatar(R->getAvatarID()); } - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_CONFIRMFRIEND: avatar=%p\n", avatar); @@ -1543,15 +1542,15 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnFriendConfirm(R->getTrack(), R->getResult(), avatar, R->getUser()); } break; - case RESPONSE_CONFIRMFRIEND_RECIPROCATE: + case RESPONSE_CONFIRMFRIEND_RECIPROCATE: { ResFriendConfirmReciprocate *R = static_cast(res); ChatAvatar *avatar = nullptr; - if(R->getResult() == CHATRESULT_SUCCESS) + if (R->getResult() == CHATRESULT_SUCCESS) { avatar = getAvatar(R->getAvatarID()); } - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_CONFIRMFRIEND_RECIPROCATE: avatar=%p\n", avatar); @@ -1559,20 +1558,20 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnFriendConfirmReciprocate(R->getTrack(), R->getResult(), avatar, R->getUser()); } break; - case RESPONSE_REGISTRAR_GETCHATSERVER: + case RESPONSE_REGISTRAR_GETCHATSERVER: { ResRegistrarGetChatServer *R = static_cast(res); - + m_rcvdRegistrarResponse = true; if (R->getResult() == CHATRESULT_SUCCESS) { m_assignedServerHost = wideToNarrow(R->getHostname()).c_str(); - m_assignedServerPort = (short) R->getPort(); + m_assignedServerPort = (short)R->getPort(); } } break; - case RESPONSE_SETAPIVERSION: + case RESPONSE_SETAPIVERSION: { ResSendApiVersion *R = static_cast(res); @@ -1613,15 +1612,15 @@ void ChatAPICore::responseCallback(GenericResponse *res) } } break; - case RESPONSE_ADDSNOOPAVATAR: + case RESPONSE_ADDSNOOPAVATAR: { ResAddSnoopAvatar *R = static_cast(res); ChatAvatar *avatar = nullptr; - if(R->getResult() == CHATRESULT_SUCCESS) + if (R->getResult() == CHATRESULT_SUCCESS) { avatar = getAvatar(R->getSrcAvatarID()); } - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_ADDSNOOPAVATAR: avatar=%p\n", avatar); @@ -1629,15 +1628,15 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnBeginSnoopingAvatar(R->getTrack(), R->getResult(), avatar, ChatUnicodeString(R->getDestAvatarName()), ChatUnicodeString(R->getDestAvatarAddress()), R->getUser()); } break; - case RESPONSE_REMOVESNOOPAVATAR: + case RESPONSE_REMOVESNOOPAVATAR: { ResRemoveSnoopAvatar *R = static_cast(res); ChatAvatar *avatar = nullptr; - if(R->getResult() == CHATRESULT_SUCCESS) + if (R->getResult() == CHATRESULT_SUCCESS) { avatar = getAvatar(R->getSrcAvatarID()); } - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_REMOVESNOOPAVATAR: avatar=%p\n", avatar); @@ -1645,15 +1644,15 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnStopSnoopingAvatar(R->getTrack(), R->getResult(), avatar, ChatUnicodeString(R->getDestAvatarName()), ChatUnicodeString(R->getDestAvatarAddress()), R->getUser()); } break; - case RESPONSE_ADDSNOOPROOM: + case RESPONSE_ADDSNOOPROOM: { ResAddSnoopRoom *R = static_cast(res); ChatAvatar *avatar = nullptr; - if(R->getResult() == CHATRESULT_SUCCESS) + if (R->getResult() == CHATRESULT_SUCCESS) { avatar = getAvatar(R->getSrcAvatarID()); } - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_ADDSNOOPROOM: avatar=%p\n", avatar); @@ -1661,15 +1660,15 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnBeginSnoopingRoom(R->getTrack(), R->getResult(), avatar, ChatUnicodeString(R->getRoomAddress()), R->getUser()); } break; - case RESPONSE_REMOVESNOOPROOM: + case RESPONSE_REMOVESNOOPROOM: { ResRemoveSnoopRoom *R = static_cast(res); ChatAvatar *avatar = nullptr; - if(R->getResult() == CHATRESULT_SUCCESS) + if (R->getResult() == CHATRESULT_SUCCESS) { avatar = getAvatar(R->getSrcAvatarID()); } - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_REMOVESNOOPROOM: avatar=%p\n", avatar); @@ -1677,15 +1676,15 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnStopSnoopingRoom(R->getTrack(), R->getResult(), avatar, ChatUnicodeString(R->getRoomAddress()), R->getUser()); } break; - case RESPONSE_GETSNOOPLIST: + case RESPONSE_GETSNOOPLIST: { ResGetSnoopList *R = static_cast(res); ChatAvatar *avatar = nullptr; - if(R->getResult() == CHATRESULT_SUCCESS) + if (R->getResult() == CHATRESULT_SUCCESS) { avatar = getAvatar(R->getSrcAvatarID()); } - if (!avatar && R->getResult()==CHATRESULT_SUCCESS) + if (!avatar && R->getResult() == CHATRESULT_SUCCESS) { R->setResult(CHATRESULT_SUCCESSBADDATA); _chatdebug_("ChatAPI:BadData: RESPONSE_REMOVESNOOPROOM: avatar=%p\n", avatar); @@ -1693,11 +1692,11 @@ void ChatAPICore::responseCallback(GenericResponse *res) AvatarSnoopPair **avatarList = nullptr; ChatUnicodeString **roomList = nullptr; - + unsigned numAvatars = R->getAvatarSnoopListLength(); unsigned numRooms = R->getRoomSnoopListLength(); - if(R->getResult() == CHATRESULT_SUCCESS) + if (R->getResult() == CHATRESULT_SUCCESS) { avatarList = R->getAvatarSnoopList(); roomList = R->getRoomSnoopList(); @@ -1706,7 +1705,7 @@ void ChatAPICore::responseCallback(GenericResponse *res) m_api->OnGetSnoopList(R->getTrack(), R->getResult(), avatar, numAvatars, avatarList, numRooms, roomList, R->getUser()); } break; - case RESPONSE_TRANSFERAVATAR: + case RESPONSE_TRANSFERAVATAR: { ResTransferAvatar *R = static_cast(res); @@ -1714,51 +1713,51 @@ void ChatAPICore::responseCallback(GenericResponse *res) } break; - default: - fprintf(stderr, "[ChatAPICore.cpp] default (response) responseCallback(GenericResponse *), type = %u\n", res->getType()); + default: + fprintf(stderr, "[ChatAPICore.cpp] default (response) responseCallback(GenericResponse *), type = %u\n", res->getType()); + } } -} -void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) -{ - switch(type) + void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) { - case MESSAGE_INSTANTMESSAGE: + switch (type) + { + case MESSAGE_INSTANTMESSAGE: { MInstantMessage M(iter); ChatAvatar *destAvatar = getAvatar(M.getDestAvatarID()); if (!M.getSrcAvatar()) { _chatdebug_("ChatAPI:BadData: MESSAGE_INSTANTMESSAGE: M.getSrcAvatar()=%p\n", M.getSrcAvatar()); - break; + break; } ChatAvatar *srcAvatar = M.getSrcAvatar()->getNewChatAvatar(); if (!destAvatar || !srcAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_INSTANTMESSAGE: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); - delete srcAvatar; - break; + delete srcAvatar; + break; } m_api->OnReceiveInstantMessage(srcAvatar, destAvatar, ChatUnicodeString(M.getMsg().data(), M.getMsg().size()), ChatUnicodeString(M.getOOB().data(), M.getOOB().size())); delete srcAvatar; } break; - case MESSAGE_ROOMMESSAGE: + case MESSAGE_ROOMMESSAGE: { MRoomMessage M(iter); ChatRoom *destRoom = getRoom(M.getRoomID()); if (!M.getSrcAvatar() || !destRoom) { _chatdebug_("ChatAPI:BadData: MESSAGE_ROOMMESSAGE: M.getSrcAvatar()=%p, destRoom=%p\n", M.getSrcAvatar(), destRoom); - break; + break; } ChatAvatar *srcAvatar = M.getSrcAvatar()->getNewChatAvatar(); if (!srcAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_ROOMMESSAGE: srcAvatar=%p\n", srcAvatar); - break; + break; } - for(unsigned i = 0; i < M.getListLength(); i++) + for (unsigned i = 0; i < M.getListLength(); i++) { ChatAvatar *destAvatar = getAvatar(M.getDestList()[i]); if (!destAvatar) @@ -1778,24 +1777,24 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) delete srcAvatar; } break; - case MESSAGE_BROADCASTMESSAGE: + case MESSAGE_BROADCASTMESSAGE: { MBroadcastMessage M(iter); if (!M.getSrcAvatar()) { _chatdebug_("ChatAPI:BadData: MESSAGE_BROADCASTMESSAGE: M.getSrcAvatar()=%p\n", M.getSrcAvatar()); - break; + break; } ChatAvatar *srcAvatar = M.getSrcAvatar()->getNewChatAvatar(); if (!srcAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_BROADCASTMESSAGE: srcAvatar=%p\n", srcAvatar); - break; + break; } - for(unsigned i = 0; i < M.getListLength(); i++) + for (unsigned i = 0; i < M.getListLength(); i++) { ChatAvatar *destAvatar = getAvatar(M.getDestList()[i]); - if (!destAvatar) + if (!destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_BROADCASTMESSAGE: destAvatar[%i]=nullptr\n", i); continue; @@ -1805,73 +1804,73 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) delete srcAvatar; } break; - case MESSAGE_FILTERMESSAGE: + case MESSAGE_FILTERMESSAGE: { MFilterMessage M(iter); m_api->OnReceiveFilterMessage(ChatUnicodeString(M.getMsg().data(), M.getMsg().size())); } break; - case MESSAGE_FRIENDLOGIN: + case MESSAGE_FRIENDLOGIN: { MFriendLogin M(iter); ChatAvatar *destAvatar = getAvatar(M.getDestAvatarID()); if (!M.getFriendAvatar() || !destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_FRIENDLOGIN: M.getFriendAvatar()=%p, destAvatar=%p\n", M.getFriendAvatar(), destAvatar); - break; + break; } ChatAvatar *friendAvatar = M.getFriendAvatar()->getNewChatAvatar(); if (!friendAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_FRIENDLOGIN: friendAvatar=%p\n", friendAvatar); - break; + break; } - - friendAvatar->setStatusMessage( M.getFriendStatusMessage() ); + + friendAvatar->setStatusMessage(M.getFriendStatusMessage()); m_api->OnReceiveFriendLogin(friendAvatar, ChatUnicodeString(M.getFriendAddress().data(), M.getFriendAddress().size()), destAvatar); delete friendAvatar; } break; - case MESSAGE_FRIENDLOGOUT: + case MESSAGE_FRIENDLOGOUT: { MFriendLogout M(iter); ChatAvatar *destAvatar = getAvatar(M.getDestAvatarID()); if (!M.getFriendAvatar() || !destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_FRIENDLOGOUT: M.getFriendAvatar()=%p, destAvatar=%p\n", M.getFriendAvatar(), destAvatar); - break; + break; } ChatAvatar *friendAvatar = M.getFriendAvatar()->getNewChatAvatar(); if (!friendAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_FRIENDLOGOUT: friendAvatar=%p\n", friendAvatar); - break; + break; } m_api->OnReceiveFriendLogout(friendAvatar, ChatUnicodeString(M.getFriendAddress().data(), M.getFriendAddress().size()), destAvatar); delete friendAvatar; } break; - case MESSAGE_FRIENDSTATUS: - { - MFriendStatus M(iter); - ChatAvatar *destAvatar = getAvatar(M.getDestAvatarID()); - if (!M.getFriendAvatar() || !destAvatar) - { - _chatdebug_("ChatAPI:BadData: MESSAGE_FRIENDSTATUS: M.getFriendAvatar()=%p, destAvatar=%p\n", M.getFriendAvatar(), destAvatar); - break; - } - ChatAvatar *friendAvatar = M.getFriendAvatar()->getNewChatAvatar(); - if (!friendAvatar) - { - _chatdebug_("ChatAPI:BadData: MESSAGE_FRIENDSTATUS: friendAvatar=%p\n", friendAvatar); - break; - } - friendAvatar->setStatusMessage( M.getFriendStatusMessage() ); - m_api->OnReceiveFriendStatusChange(friendAvatar, ChatUnicodeString(M.getFriendAddress().data(), M.getFriendAddress().size()), destAvatar); - delete friendAvatar; - } - break; - case MESSAGE_KICKROOM: + case MESSAGE_FRIENDSTATUS: + { + MFriendStatus M(iter); + ChatAvatar *destAvatar = getAvatar(M.getDestAvatarID()); + if (!M.getFriendAvatar() || !destAvatar) + { + _chatdebug_("ChatAPI:BadData: MESSAGE_FRIENDSTATUS: M.getFriendAvatar()=%p, destAvatar=%p\n", M.getFriendAvatar(), destAvatar); + break; + } + ChatAvatar *friendAvatar = M.getFriendAvatar()->getNewChatAvatar(); + if (!friendAvatar) + { + _chatdebug_("ChatAPI:BadData: MESSAGE_FRIENDSTATUS: friendAvatar=%p\n", friendAvatar); + break; + } + friendAvatar->setStatusMessage(M.getFriendStatusMessage()); + m_api->OnReceiveFriendStatusChange(friendAvatar, ChatUnicodeString(M.getFriendAddress().data(), M.getFriendAddress().size()), destAvatar); + delete friendAvatar; + } + break; + case MESSAGE_KICKROOM: { MKickRoom M(iter); ChatRoomCore *destRoomCore = getRoomCore(M.getRoomID()); @@ -1884,21 +1883,25 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) if (!M.getSrcAvatar() || !M.getDestAvatar()) { _chatdebug_("ChatAPI:BadData: MESSAGE_KICKROOM: M.getSrcAvatar()=%p, M.getDestAvatar()=%p\n", M.getSrcAvatar(), M.getDestAvatar()); - break; + break; } ChatAvatar *destAvatar = M.getDestAvatar()->getNewChatAvatar(); ChatAvatar *srcAvatar = M.getSrcAvatar()->getNewChatAvatar(); - ChatAvatarCore *kickedAvatar = destRoomCore ? destRoomCore->removeAvatar(destAvatar->getAvatarID()) : nullptr; - + ChatAvatarCore *kickedAvatar = nullptr; + + if (destAvatar != nullptr) { + kickedAvatar = destRoomCore ? destRoomCore->removeAvatar(destAvatar->getAvatarID()) : nullptr; + } + ChatRoom *destRoom = getRoom(M.getRoomID()); - if (!srcAvatar || !destAvatar || !kickedAvatar || !destRoom) + if (!srcAvatar || !destAvatar || !kickedAvatar || !destRoom) { _chatdebug_("ChatAPI:BadData: MESSAGE_KICKROOM: srcAvatar=%p, destAvatar=%p, kickedAvatar=%p, destRoom=%p\n", srcAvatar, destAvatar, kickedAvatar, destRoom); - delete srcAvatar; - delete destAvatar; + delete srcAvatar; + delete destAvatar; delete kickedAvatar; - break; + break; } m_api->OnReceiveKickRoom(srcAvatar, destAvatar, destRoom); @@ -1907,7 +1910,7 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) delete srcAvatar; } break; - case MESSAGE_ADDMODERATORROOM: + case MESSAGE_ADDMODERATORROOM: { MAddModeratorRoom M(iter); ChatRoomCore *destRoomCore = getRoomCore(M.getRoomID()); @@ -1918,32 +1921,32 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) delete M.getDestAvatar(); break; } - + const ChatAvatar *srcAvatar = destRoomCore->getAvatar(M.getSrcAvatarID()); ChatAvatarCore *destAvatarCore = M.getDestAvatar(); if (!srcAvatar || !destAvatarCore) { _chatdebug_("ChatAPI:BadData: MESSAGE_ADDMODERATORROOM: srcAvatar=%p, destAvatarCore=%p\n", srcAvatar, destAvatarCore); delete M.getDestAvatar(); - break; + break; } ChatAvatar *destAvatar = destAvatarCore->getNewChatAvatar(); if (!destRoomCore->addModerator(destAvatarCore)) { - delete M.getDestAvatar(); + delete M.getDestAvatar(); } if (!destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_ADDMODERATORROOM: destAvatar=%p\n", destAvatar); - break; + break; } m_api->OnReceiveAddModeratorRoom(srcAvatar, destAvatar, destRoom); delete destAvatar; } break; - case MESSAGE_REMOVEMODERATORROOM: + case MESSAGE_REMOVEMODERATORROOM: { MRemoveModeratorRoom M(iter); ChatRoomCore *destRoomCore = getRoomCore(M.getRoomID()); @@ -1951,7 +1954,7 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) if (!destRoomCore || !destRoom) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVEMODERATORROOM: destRoomCore=%p, destRoom=%p\n", destRoomCore, destRoom); - break; + break; } ChatAvatarCore *destAvatarCore = destRoomCore->removeModerator(M.getDestAvatarName(), M.getDestAvatarAddress()); @@ -1959,16 +1962,16 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) const ChatAvatar *srcAvatar = destRoomCore->getAvatar(M.getSrcAvatarID()); if (!destAvatarCore) { - _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVEMODERATORROOM: destAvatarCore=%p\n", destAvatarCore); - delete destAvatarCore; - break; + _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVEMODERATORROOM: destAvatarCore=%p\n", destAvatarCore); + delete destAvatarCore; + break; } ChatAvatar *destAvatar = destAvatarCore->getNewChatAvatar(); if (!srcAvatar || !destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVEMODERATORROOM: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); - delete destAvatar; - break; + delete destAvatar; + break; } m_api->OnReceiveRemoveModeratorRoom(srcAvatar, destAvatar, destRoom); @@ -1976,13 +1979,13 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) delete destAvatar; } break; - case MESSAGE_REMOVEMODERATORAVATAR: + case MESSAGE_REMOVEMODERATORAVATAR: { MRemoveModeratorAvatar M(iter); if (!M.getSrcAvatar() || !M.getDestAvatar()) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVEMODERATORAVATAR: M.getSrcAvatar()=%p, M.getDestAvatar()=%p\n", M.getSrcAvatar(), M.getDestAvatar()); - break; + break; } ChatAvatar *srcAvatar = M.getSrcAvatar()->getNewChatAvatar(); @@ -1990,16 +1993,16 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) if (!srcAvatar || !destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVEMODERATORAVATAR: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); - delete srcAvatar; - delete destAvatar; - break; + delete srcAvatar; + delete destAvatar; + break; } m_api->OnReceiveRemoveModeratorAvatar(srcAvatar, destAvatar, ChatUnicodeString(M.getRoomName().data(), M.getRoomName().size()), ChatUnicodeString(M.getRoomAddress().data(), M.getRoomAddress().size())); delete srcAvatar; delete destAvatar; } break; - case MESSAGE_ADDTEMPORARYMODERATORROOM: + case MESSAGE_ADDTEMPORARYMODERATORROOM: { MAddTemporaryModeratorRoom M(iter); ChatRoomCore *destRoomCore = getRoomCore(M.getRoomID()); @@ -2010,32 +2013,32 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) delete M.getDestAvatar(); break; } - + const ChatAvatar *srcAvatar = destRoomCore->getAvatar(M.getSrcAvatarID()); ChatAvatarCore *destAvatarCore = M.getDestAvatar(); if (!srcAvatar || !destAvatarCore) { _chatdebug_("ChatAPI:BadData: MESSAGE_ADDTEMPORARYMODERATORROOM: srcAvatar=%p, destAvatarCore=%p\n", srcAvatar, destAvatarCore); delete M.getDestAvatar(); - break; + break; } ChatAvatar *destAvatar = destAvatarCore->getNewChatAvatar(); if (!destRoomCore->addTempModerator(destAvatarCore)) { - delete M.getDestAvatar(); + delete M.getDestAvatar(); } if (!destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_ADDTEMPORARYMODERATORROOM: destAvatar=%p\n", destAvatar); - break; + break; } m_api->OnReceiveAddTemporaryModeratorRoom(srcAvatar, destAvatar, destRoom); delete destAvatar; } break; - case MESSAGE_REMOVETEMPORARYMODERATORROOM: + case MESSAGE_REMOVETEMPORARYMODERATORROOM: { MRemoveTemporaryModeratorRoom M(iter); ChatRoomCore *destRoomCore = getRoomCore(M.getRoomID()); @@ -2043,7 +2046,7 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) if (!destRoomCore || !destRoom) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVETEMPORARYMODERATORROOM: destRoomCore=%p, destRoom=%p\n", destRoomCore, destRoom); - break; + break; } ChatAvatarCore *destAvatarCore = destRoomCore->removeTempModerator(M.getDestAvatarName(), M.getDestAvatarAddress()); @@ -2052,15 +2055,15 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) if (!destAvatarCore) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVETEMPORARYMODERATORROOM: destAvatarCore=%p\n", destAvatarCore); - delete destAvatarCore; - break; + delete destAvatarCore; + break; } ChatAvatar *destAvatar = destAvatarCore->getNewChatAvatar(); if (!srcAvatar || !destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVETEMPORARYMODERATORROOM: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); - delete destAvatar; - break; + delete destAvatar; + break; } m_api->OnReceiveRemoveTemporaryModeratorRoom(srcAvatar, destAvatar, destRoom); @@ -2068,13 +2071,13 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) delete destAvatar; } break; - case MESSAGE_REMOVETEMPORARYMODERATORAVATAR: + case MESSAGE_REMOVETEMPORARYMODERATORAVATAR: { MRemoveTemporaryModeratorAvatar M(iter); if (!M.getSrcAvatar() || !M.getDestAvatar()) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVETEMPORARYMODERATORAVATAR: M.getSrcAvatar()=%p, M.getDestAvatar()=%p\n", M.getSrcAvatar(), M.getDestAvatar()); - break; + break; } ChatAvatar *srcAvatar = M.getSrcAvatar()->getNewChatAvatar(); @@ -2082,16 +2085,16 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) if (!srcAvatar || !destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVETEMPORARYMODERATORAVATAR: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); - delete srcAvatar; - delete destAvatar; - break; + delete srcAvatar; + delete destAvatar; + break; } m_api->OnReceiveRemoveTemporaryModeratorAvatar(srcAvatar, destAvatar, ChatUnicodeString(M.getRoomName().data(), M.getRoomName().size()), ChatUnicodeString(M.getRoomAddress().data(), M.getRoomAddress().size())); delete srcAvatar; delete destAvatar; } break; - case MESSAGE_ADDBANROOM: + case MESSAGE_ADDBANROOM: { MAddBanRoom M(iter); ChatRoomCore *destRoomCore = getRoomCore(M.getRoomID()); @@ -2107,22 +2110,22 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) { _chatdebug_("ChatAPI:BadData: MESSAGE_ADDBANAVATAR: M.getSrcAvatar()=%p, M.getDestAvatar()=%p\n", M.getSrcAvatar(), M.getDestAvatar()); delete M.getSrcAvatar(); - break; + break; } ChatAvatar *destAvatar = M.getDestAvatar()->getNewChatAvatar(); ChatAvatar *srcAvatar = M.getSrcAvatar()->getNewChatAvatar(); - if (!destRoomCore->addBan(M.getDestAvatar())) + if (destRoomCore && !destRoomCore->addBan(M.getDestAvatar())) { - delete M.getSrcAvatar(); + delete M.getSrcAvatar(); } - if (!destRoomCore || !destRoom) + if (destRoomCore && !destRoomCore || !destRoom) { _chatdebug_("ChatAPI:BadData: MESSAGE_ADDBANAVATAR: destRoom=%p, destRoomCore=%p\n", destRoom, destRoomCore); - delete srcAvatar; - delete destAvatar; - break; + delete srcAvatar; + delete destAvatar; + break; } ChatAvatarCore *removedAvatar = destRoomCore->removeAvatar(destAvatar->getAvatarID()); @@ -2134,7 +2137,7 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) delete srcAvatar; } break; - case MESSAGE_REMOVEBANROOM: + case MESSAGE_REMOVEBANROOM: { MRemoveBanRoom M(iter); ChatRoomCore *destRoomCore = getRoomCore(M.getRoomID()); @@ -2143,54 +2146,54 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) if (!destRoom || !destRoomCore) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVEBANROOM: destRoom=%p, destRoomCore=%p\n", destRoom, destRoomCore); - break; + break; } - ChatAvatarCore *destAvatarCore = destRoomCore->removeBan(M.getDestAvatarName(), M.getDestAvatarAddress()); + ChatAvatarCore *destAvatarCore = destRoomCore->removeBan(M.getDestAvatarName(), M.getDestAvatarAddress()); if (!destAvatarCore) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVEBANROOM: destAvatarCore=%p\n", destAvatarCore); - break; + break; } - + const ChatAvatar *srcAvatar = destRoomCore->getAvatar(M.getSrcAvatarID()); ChatAvatar *destAvatar = destAvatarCore->getNewChatAvatar(); if (!srcAvatar || !destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVEBANROOM: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); - delete destAvatar; - break; + delete destAvatar; + break; } - + m_api->OnReceiveRemoveBanRoom(srcAvatar, destAvatar, destRoom); delete destAvatarCore; delete destAvatar; } break; - case MESSAGE_REMOVEBANAVATAR: + case MESSAGE_REMOVEBANAVATAR: { MRemoveBanAvatar M(iter); if (!M.getSrcAvatar() || !M.getDestAvatar()) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVEBANAVATAR: M.getSrcAvatar=()%p, M.getDestAvatar()=%p\n", M.getSrcAvatar(), M.getDestAvatar()); - break; + break; } ChatAvatar *srcAvatar = M.getSrcAvatar()->getNewChatAvatar(); ChatAvatar *destAvatar = M.getDestAvatar()->getNewChatAvatar(); - + if (!srcAvatar || !destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVEBANAVATAR: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); - delete srcAvatar; - delete destAvatar; - break; + delete srcAvatar; + delete destAvatar; + break; } m_api->OnReceiveRemoveBanAvatar(srcAvatar, destAvatar, ChatUnicodeString(M.getRoomName().data(), M.getRoomName().size()), ChatUnicodeString(M.getRoomAddress().data(), M.getRoomAddress().size())); delete srcAvatar; delete destAvatar; } break; - case MESSAGE_ADDINVITEROOM: + case MESSAGE_ADDINVITEROOM: { MAddInviteRoom M(iter); ChatRoomCore *destRoomCore = getRoomCore(M.getRoomID()); @@ -2214,9 +2217,9 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) if (!srcAvatar || !destAvatar || !destRoom) { _chatdebug_("ChatAPI:BadData: MESSAGE_ADDINVITEROOM: srcAvatar=%p, destAvatar=%p, destRoom=%p\n", srcAvatar, destAvatar, destRoom); - delete srcAvatar; - delete destAvatar; - break; + delete srcAvatar; + delete destAvatar; + break; } m_api->OnReceiveAddInviteRoom(srcAvatar, destAvatar, destRoom); @@ -2224,13 +2227,13 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) delete destAvatar; } break; - case MESSAGE_ADDINVITEAVATAR: + case MESSAGE_ADDINVITEAVATAR: { MAddInviteAvatar M(iter); if (!M.getSrcAvatar() || !M.getDestAvatar()) { _chatdebug_("ChatAPI:BadData: MESSAGE_ADDINVITEAVATAR: M.getSrcAvatar()=%p, M.getDestAvatar()=%p\n", M.getSrcAvatar(), M.getDestAvatar()); - break; + break; } ChatAvatar *srcAvatar = M.getSrcAvatar()->getNewChatAvatar(); @@ -2239,16 +2242,16 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) if (!srcAvatar || !destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_ADDINVITEAVATAR: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); - delete srcAvatar; - delete destAvatar; - break; + delete srcAvatar; + delete destAvatar; + break; } m_api->OnReceiveAddInviteAvatar(srcAvatar, destAvatar, ChatUnicodeString(M.getRoomName().data(), M.getRoomName().size()), ChatUnicodeString(M.getRoomAddress().data(), M.getRoomAddress().size())); delete srcAvatar; delete destAvatar; } break; - case MESSAGE_REMOVEINVITEROOM: + case MESSAGE_REMOVEINVITEROOM: { MRemoveInviteRoom M(iter); ChatRoomCore *destRoomCore = getRoomCore(M.getRoomID()); @@ -2256,25 +2259,25 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) if (!destRoomCore || !destRoom) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVEINVITEROOM: destRoomCore=%p, destRoom=%p\n", destRoomCore, destRoom); - break; + break; } ChatAvatarCore *destAvatarCore = destRoomCore->removeInvite(M.getDestAvatarName(), M.getDestAvatarAddress()); if (!destAvatarCore) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVEINVITEROOM: destAvatarCore=%p\n", destAvatarCore); - break; + break; } - + const ChatAvatar *srcAvatar = destRoomCore->getAvatar(M.getSrcAvatarID()); ChatAvatar *destAvatar = destAvatarCore->getNewChatAvatar(); if (!srcAvatar || !destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVEINVITEROOM: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); - delete destAvatarCore; - delete destAvatar; - break; + delete destAvatarCore; + delete destAvatar; + break; } m_api->OnReceiveRemoveInviteRoom(srcAvatar, destAvatar, destRoom); @@ -2282,11 +2285,11 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) delete destAvatar; } break; - case MESSAGE_REMOVEINVITEAVATAR: + case MESSAGE_REMOVEINVITEAVATAR: { MRemoveInviteAvatar M(iter); - if (!M.getSrcAvatar() || !M.getDestAvatar()) + if (!M.getSrcAvatar() || !M.getDestAvatar()) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVEINVITEAVATAR: M.getSrcAvatar=%p, M.getDestAvatar=%p\n", M.getSrcAvatar(), M.getDestAvatar()); break; @@ -2297,16 +2300,16 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) if (!srcAvatar || !destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_REMOVEINVITEAVATAR: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); - delete srcAvatar; - delete destAvatar; - break; + delete srcAvatar; + delete destAvatar; + break; } m_api->OnReceiveRemoveInviteAvatar(srcAvatar, destAvatar, ChatUnicodeString(M.getRoomName().data(), M.getRoomName().size()), ChatUnicodeString(M.getRoomAddress().data(), M.getRoomAddress().size())); delete srcAvatar; delete destAvatar; } break; - case MESSAGE_GRANTVOICEROOM: + case MESSAGE_GRANTVOICEROOM: { MGrantVoiceRoom M(iter); ChatRoomCore *destRoomCore = getRoomCore(M.getRoomID()); @@ -2330,9 +2333,9 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) if (!srcAvatar || !destAvatar || !destRoom) { _chatdebug_("ChatAPI:BadData: MESSAGE_GRANTVOICEROOM: srcAvatar=%p, destAvatar=%p, destRoom=%p\n", srcAvatar, destAvatar, destRoom); - delete srcAvatar; - delete destAvatar; - break; + delete srcAvatar; + delete destAvatar; + break; } m_api->OnReceiveGrantVoiceRoom(srcAvatar, destAvatar, destRoom); @@ -2340,13 +2343,13 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) delete destAvatar; } break; - case MESSAGE_GRANTVOICEAVATAR: + case MESSAGE_GRANTVOICEAVATAR: { MGrantVoiceAvatar M(iter); if (!M.getSrcAvatar() || !M.getDestAvatar()) { _chatdebug_("ChatAPI:BadData: MESSAGE_GRANTVOICEAVATAR: M.getSrcAvatar()=%p, M.getDestAvatar()=%p\n", M.getSrcAvatar(), M.getDestAvatar()); - break; + break; } ChatAvatar *srcAvatar = M.getSrcAvatar()->getNewChatAvatar(); @@ -2355,16 +2358,16 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) if (!srcAvatar || !destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_GRANTVOICEAVATAR: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); - delete srcAvatar; - delete destAvatar; - break; + delete srcAvatar; + delete destAvatar; + break; } m_api->OnReceiveGrantVoiceAvatar(srcAvatar, destAvatar, ChatUnicodeString(M.getRoomName().data(), M.getRoomName().size()), ChatUnicodeString(M.getRoomAddress().data(), M.getRoomAddress().size())); delete srcAvatar; delete destAvatar; } break; - case MESSAGE_REVOKEVOICEROOM: + case MESSAGE_REVOKEVOICEROOM: { MRevokeVoiceRoom M(iter); ChatRoomCore *destRoomCore = getRoomCore(M.getRoomID()); @@ -2372,25 +2375,25 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) if (!destRoomCore || !destRoom) { _chatdebug_("ChatAPI:BadData: MESSAGE_REVOKEVOICEROOM: destRoomCore=%p, destRoom=%p\n", destRoomCore, destRoom); - break; + break; } ChatAvatarCore *destAvatarCore = destRoomCore->removeVoice(M.getDestAvatarName(), M.getDestAvatarAddress()); if (!destAvatarCore) { _chatdebug_("ChatAPI:BadData: MESSAGE_REVOKEVOICEROOM: destAvatarCore=%p\n", destAvatarCore); - break; + break; } - + const ChatAvatar *srcAvatar = destRoomCore->getAvatar(M.getSrcAvatarID()); ChatAvatar *destAvatar = destAvatarCore->getNewChatAvatar(); if (!srcAvatar || !destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_REVOKEVOICEROOM: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); - delete destAvatarCore; - delete destAvatar; - break; + delete destAvatarCore; + delete destAvatar; + break; } m_api->OnReceiveRevokeVoiceRoom(srcAvatar, destAvatar, destRoom); @@ -2398,11 +2401,11 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) delete destAvatar; } break; - case MESSAGE_REVOKEVOICEAVATAR: + case MESSAGE_REVOKEVOICEAVATAR: { MRevokeVoiceAvatar M(iter); - if (!M.getSrcAvatar() || !M.getDestAvatar()) + if (!M.getSrcAvatar() || !M.getDestAvatar()) { _chatdebug_("ChatAPI:BadData: MESSAGE_REVOKEVOICEAVATAR: M.getSrcAvatar=%p, M.getDestAvatar=%p\n", M.getSrcAvatar(), M.getDestAvatar()); break; @@ -2413,21 +2416,21 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) if (!srcAvatar || !destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_REVOKEVOICEAVATAR: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); - delete srcAvatar; - delete destAvatar; - break; + delete srcAvatar; + delete destAvatar; + break; } m_api->OnReceiveRevokeVoiceAvatar(srcAvatar, destAvatar, ChatUnicodeString(M.getRoomName().data(), M.getRoomName().size()), ChatUnicodeString(M.getRoomAddress().data(), M.getRoomAddress().size())); delete srcAvatar; delete destAvatar; } break; - case MESSAGE_ENTERROOM: + case MESSAGE_ENTERROOM: { MEnterRoom M(iter); ChatRoomCore *destRoomCore = getRoomCore(M.getRoomID()); - + ChatRoom *destRoom = getRoom(M.getRoomID()); if (!destRoomCore || !destRoom || !M.getSrcAvatar()) { @@ -2445,16 +2448,16 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) } bool isLocalAvatar = (getAvatar(srcAvatar->getAvatarID()) != nullptr); - if(!destRoomCore->addAvatar(M.getSrcAvatar(),isLocalAvatar)) + if (!destRoomCore->addAvatar(M.getSrcAvatar(), isLocalAvatar)) { - delete M.getSrcAvatar(); + delete M.getSrcAvatar(); } - + m_api->OnReceiveEnterRoom(srcAvatar, destRoom); delete srcAvatar; } break; - case MESSAGE_LEAVEROOM: + case MESSAGE_LEAVEROOM: { MLeaveRoom M(iter); ChatRoomCore *destRoomCore = getRoomCore(M.getRoomID()); @@ -2483,7 +2486,7 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) delete srcAvatar; } break; - case MESSAGE_DESTROYROOM: + case MESSAGE_DESTROYROOM: { MDestroyRoom M(iter); @@ -2521,11 +2524,11 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) } } break; - case MESSAGE_SETROOMPARAMS: + case MESSAGE_SETROOMPARAMS: { MSetRoomParams M(iter); ChatRoomCore *destRoomCore = getRoomCore(M.getRoomID()); - if (!destRoomCore) + if (!destRoomCore) { _chatdebug_("ChatAPI:BadData: MESSAGE_SETROOMPARAMS: destRoomCore=nullptr\n"); break; @@ -2541,7 +2544,7 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) destRoomCore->setName(M.getRoomName()); destRoomCore->setTopic(M.getRoomTopic()); destRoomCore->setPassword(M.getRoomPassword()); - + if (!M.getSrcAvatar()) { _chatdebug_("ChatAPI:BadData: MESSAGE_SETROOMPARAMS: M.getSrcAvatar=nullptr\n"); @@ -2554,13 +2557,13 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) { _chatdebug_("ChatAPI:BadData: MESSAGE_SETROOMPARAMS: srcAvatar=%p, destRoom=%p\n", srcAvatar, destRoom); delete srcAvatar; - break; + break; } m_api->OnReceiveRoomParams(srcAvatar, destRoom, ¶ms, &oldParams); delete srcAvatar; } break; - case MESSAGE_PERSISTENTMESSAGE: + case MESSAGE_PERSISTENTMESSAGE: { MPersistentMessage M(iter); ChatAvatar *avatar = getAvatar(M.getDestAvatarID()); @@ -2568,7 +2571,7 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) m_api->OnReceivePersistentMessage(avatar, M.getHeader()); } break; - case MESSAGE_FORCEDLOGOUT: + case MESSAGE_FORCEDLOGOUT: { MForcedLogout M(iter); ChatAvatar *avatar = getAvatar(M.getAvatarID()); @@ -2578,7 +2581,7 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) delete core; } break; - case MESSAGE_UNREGISTERROOMREADY: + case MESSAGE_UNREGISTERROOMREADY: { MUnregisterRoomReady M(iter); @@ -2590,13 +2593,13 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) } } break; - case MESSAGE_KICKAVATAR: + case MESSAGE_KICKAVATAR: { MKickAvatar M(iter); if (!M.getSrcAvatar() || !M.getDestAvatar()) { _chatdebug_("ChatAPI:BadData: MESSAGE_KICKAVATAR: M.getSrcAvatar=%p, M.getDestAvatar=%p\n", M.getSrcAvatar(), M.getDestAvatar()); - break; + break; } ChatAvatar *srcAvatar = M.getSrcAvatar()->getNewChatAvatar(); ChatAvatar *destAvatar = M.getDestAvatar()->getNewChatAvatar(); @@ -2606,20 +2609,20 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) _chatdebug_("ChatAPI:BadData: MESSAGE_KICKAVATAR: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); delete srcAvatar; delete destAvatar; - break; + break; } m_api->OnReceiveKickAvatar(srcAvatar, destAvatar, ChatUnicodeString(M.getRoomName().data(), M.getRoomName().size()), ChatUnicodeString(M.getRoomAddress().data(), M.getRoomAddress().size())); delete srcAvatar; delete destAvatar; } break; - case MESSAGE_ADDMODERATORAVATAR: + case MESSAGE_ADDMODERATORAVATAR: { MAddModeratorAvatar M(iter); if (!M.getSrcAvatar() || !M.getDestAvatar()) { _chatdebug_("ChatAPI:BadData: MESSAGE_ADDMODERATORAVATAR: M.getSrcAvatar=%p, M.getDestAvatar=%p\n", M.getSrcAvatar(), M.getDestAvatar()); - break; + break; } ChatAvatar *srcAvatar = M.getSrcAvatar()->getNewChatAvatar(); ChatAvatar *destAvatar = M.getDestAvatar()->getNewChatAvatar(); @@ -2629,20 +2632,20 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) _chatdebug_("ChatAPI:BadData: MESSAGE_ADDMODERATORAVATAR: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); delete srcAvatar; delete destAvatar; - break; + break; } m_api->OnReceiveAddModeratorAvatar(srcAvatar, destAvatar, ChatUnicodeString(M.getRoomName().data(), M.getRoomName().size()), ChatUnicodeString(M.getRoomAddress().data(), M.getRoomAddress().size())); delete srcAvatar; delete destAvatar; } break; - case MESSAGE_ADDTEMPORARYMODERATORAVATAR: + case MESSAGE_ADDTEMPORARYMODERATORAVATAR: { MAddTemporaryModeratorAvatar M(iter); if (!M.getSrcAvatar() || !M.getDestAvatar()) { _chatdebug_("ChatAPI:BadData: MESSAGE_ADDTEMPORARYMODERATORAVATAR: M.getSrcAvatar=%p, M.getDestAvatar=%p\n", M.getSrcAvatar(), M.getDestAvatar()); - break; + break; } ChatAvatar *srcAvatar = M.getSrcAvatar()->getNewChatAvatar(); ChatAvatar *destAvatar = M.getDestAvatar()->getNewChatAvatar(); @@ -2652,20 +2655,20 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) _chatdebug_("ChatAPI:BadData: MESSAGE_ADDTEMPORARYMODERATORAVATAR: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); delete srcAvatar; delete destAvatar; - break; + break; } m_api->OnReceiveAddTemporaryModeratorAvatar(srcAvatar, destAvatar, ChatUnicodeString(M.getRoomName().data(), M.getRoomName().size()), ChatUnicodeString(M.getRoomAddress().data(), M.getRoomAddress().size())); delete srcAvatar; delete destAvatar; } break; - case MESSAGE_ADDBANAVATAR: + case MESSAGE_ADDBANAVATAR: { MAddBanAvatar M(iter); if (!M.getSrcAvatar() || !M.getDestAvatar()) { _chatdebug_("ChatAPI:BadData: MESSAGE_ADDBANAVATAR: M.getSrcAvatar=%p, M.getDestAvatar=%p\n", M.getSrcAvatar(), M.getDestAvatar()); - break; + break; } ChatAvatar *srcAvatar = M.getSrcAvatar()->getNewChatAvatar(); ChatAvatar *destAvatar = M.getDestAvatar()->getNewChatAvatar(); @@ -2675,14 +2678,14 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) _chatdebug_("ChatAPI:BadData: MESSAGE_ADDBANAVATAR: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); delete srcAvatar; delete destAvatar; - break; + break; } m_api->OnReceiveAddBanAvatar(srcAvatar, destAvatar, ChatUnicodeString(M.getRoomName().data(), M.getRoomName().size()), ChatUnicodeString(M.getRoomAddress().data(), M.getRoomAddress().size())); delete srcAvatar; delete destAvatar; } break; - case MESSAGE_ADDADMIN: + case MESSAGE_ADDADMIN: { MAddAdmin M(iter); ChatRoomCore *destRoomCore = getRoomCore(M.getRoomID()); @@ -2692,7 +2695,7 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) } } break; - case MESSAGE_REMOVEADMIN: + case MESSAGE_REMOVEADMIN: { MRemoveAdmin M(iter); ChatRoomCore *destRoomCore = getRoomCore(M.getRoomID()); @@ -2702,7 +2705,7 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) delete admin; } break; - case MESSAGE_FRIENDCONFIRMREQUEST: + case MESSAGE_FRIENDCONFIRMREQUEST: { MFriendConfirmRequest M(iter); if (!M.getSrcAvatar()) @@ -2713,22 +2716,22 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) ChatAvatar *srcAvatar = M.getSrcAvatar()->getNewChatAvatar(); ChatAvatar *destAvatar = getAvatar(M.getDestAvatarID()); - if (!srcAvatar || !destAvatar) + if (!srcAvatar || !destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_FRIENDCONFIRMREQUEST: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); - delete srcAvatar; - break; + delete srcAvatar; + break; } m_api->OnReceiveFriendConfirmRequest(srcAvatar, destAvatar); delete srcAvatar; } break; - case MESSAGE_FRIENDCONFIRMRESPONSE: + case MESSAGE_FRIENDCONFIRMRESPONSE: { MFriendConfirmResponse M(iter); - if (!M.getSrcAvatar()) + if (!M.getSrcAvatar()) { _chatdebug_("ChatAPI:BadData: MESSAGE_FRIENDCONFIRMRESPONSE: M.getSrcAvatar=nullptr\n"); break; @@ -2736,18 +2739,18 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) ChatAvatar *srcAvatar = M.getSrcAvatar()->getNewChatAvatar(); ChatAvatar *destAvatar = getAvatar(M.getDestAvatarID()); - if (!srcAvatar || !destAvatar) + if (!srcAvatar || !destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_FRIENDCONFIRMRESPONSE: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); - delete srcAvatar; - break; + delete srcAvatar; + break; } m_api->OnReceiveFriendConfirmResponse(srcAvatar, destAvatar, M.getConfirm()); delete srcAvatar; } break; - case MESSAGE_FRIENDCONFIRMRECIPROCATE_REQUEST: + case MESSAGE_FRIENDCONFIRMRECIPROCATE_REQUEST: { MFriendConfirmReciprocateRequest M(iter); if (!M.getSrcAvatar()) @@ -2758,22 +2761,22 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) ChatAvatar *srcAvatar = M.getSrcAvatar()->getNewChatAvatar(); ChatAvatar *destAvatar = getAvatar(M.getDestAvatarID()); - if (!srcAvatar || !destAvatar) + if (!srcAvatar || !destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_FRIENDCONFIRMRECIPROCATE_REQUEST: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); - delete srcAvatar; - break; + delete srcAvatar; + break; } m_api->OnReceiveFriendConfirmReciprocateRequest(srcAvatar, destAvatar); delete srcAvatar; } break; - case MESSAGE_FRIENDCONFIRMRECIPROCATE_RESPONSE: + case MESSAGE_FRIENDCONFIRMRECIPROCATE_RESPONSE: { MFriendConfirmReciprocateResponse M(iter); - if (!M.getSrcAvatar()) + if (!M.getSrcAvatar()) { _chatdebug_("ChatAPI:BadData: MESSAGE_FRIENDCONFIRMRECIPROCATE_RESPONSE: M.getSrcAvatar=nullptr\n"); break; @@ -2781,23 +2784,23 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) ChatAvatar *srcAvatar = M.getSrcAvatar()->getNewChatAvatar(); ChatAvatar *destAvatar = getAvatar(M.getDestAvatarID()); - if (!srcAvatar || !destAvatar) + if (!srcAvatar || !destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_FRIENDCONFIRMRECIPROCATE_RESPONSE: srcAvatar=%p, destAvatar=%p\n", srcAvatar, destAvatar); - delete srcAvatar; - break; + delete srcAvatar; + break; } m_api->OnReceiveFriendConfirmReciprocateResponse(srcAvatar, destAvatar, M.getConfirm()); delete srcAvatar; } break; - case MESSAGE_CHANGEROOMOWNER: + case MESSAGE_CHANGEROOMOWNER: { MChangeRoomOwner M(iter); - + ChatRoomCore *destRoomCore = getRoomCore(M.getDestRoomID()); - if (!destRoomCore) + if (!destRoomCore) { _chatdebug_("ChatAPI:BadData: MESSAGE_CHANGEROOMOWNER: destRoomCore=nullptr\n"); break; @@ -2810,17 +2813,17 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) if (!destRoom) { _chatdebug_("ChatAPI:BadData: MESSAGE_CHANGEROOMOWNER: destRoom=%p\n", destRoom); - break; + break; } - + m_api->OnReceiveRoomOwnerChange(destRoom); } break; - case MESSAGE_REQUESTROOMENTRY: + case MESSAGE_REQUESTROOMENTRY: { MRoomEntryRequest M(iter); - if (!M.getRequestorAvatar()) + if (!M.getRequestorAvatar()) { _chatdebug_("ChatAPI:BadData: MESSAGE_REQUESTROOMENTRY: M.getRequestorAvatar=nullptr\n"); break; @@ -2828,11 +2831,11 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) ChatAvatar *srcAvatar = M.getRequestorAvatar()->getNewChatAvatar(); ChatAvatar *destAvatar = getAvatar(M.getRoomOwnerID()); - if (!destAvatar) + if (!destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_REQUESTROOMENTRY: destAvatar=%p\n", destAvatar); delete srcAvatar; - break; + break; } m_api->OnReceiveRoomEntryRequest(srcAvatar, destAvatar, M.getRequestedRoomAddress()); @@ -2840,7 +2843,7 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) delete srcAvatar; } break; - case MESSAGE_DELAYEDROOMENTRY: + case MESSAGE_DELAYEDROOMENTRY: { MDelayedRoomEntry M(iter); @@ -2873,22 +2876,22 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) m_api->OnReceiveDelayedRoomEntry(avatar, room); } break; - case MESSAGE_DENIEDROOMENTRY: + case MESSAGE_DENIEDROOMENTRY: { MDeniedRoomEntry M(iter); ChatAvatar *destAvatar = getAvatar(M.getRequestorID()); - if (!destAvatar) + if (!destAvatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_DENIEDROOMENTRY: destAvatar=%p\n", destAvatar); - break; + break; } m_api->OnReceiveDeniedRoomEntry(destAvatar, M.getRequestedRoomAddress()); } break; - case MESSAGE_FORCEROOMFAILOVER: + case MESSAGE_FORCEROOMFAILOVER: { MForceRoomFailover M(iter); @@ -2902,7 +2905,7 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) { ChatRoomCore *room = (*roomIter).second; const String &roomAddress = room->getAddress(); - + // compare room address against aid string, it is a match // if aid string is found at index 0 (start of roomAddr string) String::size_type index; @@ -2923,7 +2926,7 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) } } break; - case MESSAGE_FAILOVER_AVATAR_LIST: + case MESSAGE_FAILOVER_AVATAR_LIST: { unsigned numWorlds = 0; @@ -2937,16 +2940,16 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) get(iter, world); worldVec.push_back(world); } - + map::iterator avatarIter; if (m_avatarCoreCache.size() > 0) { for (avatarIter = m_avatarCoreCache.begin(); avatarIter != m_avatarCoreCache.end(); ++avatarIter) { - for(i = 0; i < worldVec.size(); ++i) + for (i = 0; i < worldVec.size(); ++i) { - if (caseInsensitiveCompare((*avatarIter).second->getAddress(),worldVec[i])) + if (caseInsensitiveCompare((*avatarIter).second->getAddress(), worldVec[i])) { failoverReloginOneAvatar((*avatarIter).second); break; // break out of world loop into avatar loop @@ -2956,311 +2959,114 @@ void ChatAPICore::responseCallback(short type, ByteStream::ReadIterator &iter) } } break; - case MESSAGE_SNOOP: + case MESSAGE_SNOOP: { MSnoop M(iter); m_api->OnReceiveSnoopMessage(M.getSnoopType(), - ChatUnicodeString(M.getSnooperName()), - ChatUnicodeString(M.getSnooperAddr()), - ChatUnicodeString(M.getSrcName()), - ChatUnicodeString(M.getSrcAddr()), - ChatUnicodeString(M.getDestName()), - ChatUnicodeString(M.getDestAddr()), - ChatUnicodeString(M.getMessage())); + ChatUnicodeString(M.getSnooperName()), + ChatUnicodeString(M.getSnooperAddr()), + ChatUnicodeString(M.getSrcName()), + ChatUnicodeString(M.getSrcAddr()), + ChatUnicodeString(M.getDestName()), + ChatUnicodeString(M.getDestAddr()), + ChatUnicodeString(M.getMessage())); } break; - case MESSAGE_UIDLIST: + case MESSAGE_UIDLIST: { MUIDList M(iter); m_uidSet = M.getUIDList(); } break; - case MESSAGE_NOTIFY_FRIEND_IS_REMOVED: + case MESSAGE_NOTIFY_FRIEND_IS_REMOVED: { MNotifyFriendIsRemoved M(iter); ChatAvatar *avatar = getAvatar(M.getAvatarID()); - if (!avatar) + if (!avatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_NOTIFY_FRIEND_IS_REMOVED: avatar=%p avatarID(%d)\n", avatar, M.getAvatarID()); - break; + break; } m_api->OnReceiveNotifyFriendIsRemoved(avatar, M.getDestName(), M.getDestAddress()); } break; - case MESSAGE_NOTIFY_FRIENDS_LIST_CHANGE: + case MESSAGE_NOTIFY_FRIENDS_LIST_CHANGE: { MNotifyFriendsListChange M(iter); ChatAvatar *avatar = getAvatar(M.getAvatarID()); - if (!avatar) + if (!avatar) { _chatdebug_("ChatAPI:BadData: MESSAGE_NOTIFY_FRIENDS_LIST_CHANGE: avatar=%p avatarID(%d)\n", avatar, M.getAvatarID()); - break; + break; } - m_api->OnReceiveNotifyFriendsListChange(avatar,M.getOriginalName(), M.getOriginalAddress(), M.getNewName(), M.getNewAddress()); + m_api->OnReceiveNotifyFriendsListChange(avatar, M.getOriginalName(), M.getOriginalAddress(), M.getNewName(), M.getNewAddress()); } break; - default: - fprintf(stderr, "[ChatAPICore.cpp] default (message) responseCallback(ByteStream::ReadIterator &), type = %u\n", type); + default: + fprintf(stderr, "[ChatAPICore.cpp] default (message) responseCallback(ByteStream::ReadIterator &), type = %u\n", type); + } } -} -void ChatAPICore::processAPI() -{ - // if we are connected to the registrar and we got the - // ResRegistrarGetChatServer callback, then we disconnect - // and connect to the assigned ChatServer - if (m_connected && - m_setToRegistrar && - m_rcvdRegistrarResponse) + void ChatAPICore::processAPI() { - // disconnect from the Registrar - m_serverConnections[0]->disconnect(); + // if we are connected to the registrar and we got the + // ResRegistrarGetChatServer callback, then we disconnect + // and connect to the assigned ChatServer + if (m_connected && + m_setToRegistrar && + m_rcvdRegistrarResponse) + { + // disconnect from the Registrar + m_serverConnections[0]->disconnect(); + } + // if we've been disconnected for at least a minute... + else if (!m_connected && + time(nullptr) - m_timeSinceLastDisconnect >= 60) + { + if (m_setToRegistrar) + { + // ...and we can't connect to the registrar, then + // connect to lastAssigned Chat Server host and port + // (which on the first attempt would be the same as default) + changeHostPort(0, m_assignedServerHost.c_str(), m_assignedServerPort); + m_setToRegistrar = false; + } + else + { + // ...and we can't connect to the Chat Server, then + // connect to the registrar and ask again for direction + changeHostPort(0, m_registrarHost.c_str(), m_registrarPort); + m_setToRegistrar = true; + } + + m_timeSinceLastDisconnect = time(nullptr); + } + + // call GenericAPICore::process() + process(); } - // if we've been disconnected for at least a minute... - else if (!m_connected && - time(nullptr) - m_timeSinceLastDisconnect >= 60) + + void ChatAPICore::OnConnect(const char *host, short port) { + m_connected = true; + + // act on connection depending on if we are connected to + // registrar or chatserver if (m_setToRegistrar) { - // ...and we can't connect to the registrar, then - // connect to lastAssigned Chat Server host and port - // (which on the first attempt would be the same as default) - changeHostPort(0, m_assignedServerHost.c_str(), m_assignedServerPort); - m_setToRegistrar = false; - } - else - { - // ...and we can't connect to the Chat Server, then - // connect to the registrar and ask again for direction - changeHostPort(0, m_registrarHost.c_str(), m_registrarPort); - m_setToRegistrar = true; - } - - m_timeSinceLastDisconnect = time(nullptr); - } - - - // call GenericAPICore::process() - process(); -} - -void ChatAPICore::OnConnect(const char *host, short port) -{ - m_connected = true; - - // act on connection depending on if we are connected to - // registrar or chatserver - if (m_setToRegistrar) - { - // negotiate chat server host/port with the Registrar - Base::ByteStream msg; - RRegistrarGetChatServer *req = new RRegistrarGetChatServer(m_defaultServerHost, m_defaultServerPort); - ResRegistrarGetChatServer *res = new ResRegistrarGetChatServer(); - - if(m_currTrack == 0) - { - m_currTrack++; - } - req->setTrack(m_currTrack); - res->setTrack(m_currTrack); - m_currTrack++; - - time_t timeout = time(nullptr) + m_requestTimeout; - req->setTimeout(timeout); - res->setTimeout(timeout); - - m_pending.insert(pair(res->getTrack(), res)); - m_pendingCount++; - - // submit request directly (the exception, not using submitRequest()) - req->pack(msg); - m_serverConnections[0]->Send(msg); - delete req; - - m_rcvdRegistrarResponse = false; - m_serverConnections[0]->process(); - } - else if (!m_sentVersion && - m_shouldSendVersion) // always true, except ChatAdminAPICore can override - { - // send the version to the chat server - Base::ByteStream msg; - RSendApiVersion *req = new RSendApiVersion(kChatApiVersion); - ResSendApiVersion *res = new ResSendApiVersion(); - - if(m_currTrack == 0) - { - m_currTrack++; - } - req->setTrack(m_currTrack); - res->setTrack(m_currTrack); - m_currTrack++; - - time_t timeout = time(nullptr) + m_requestTimeout; - req->setTimeout(timeout); - res->setTimeout(timeout); - - m_pending.insert(pair(res->getTrack(), res)); - m_pendingCount++; - - // submit request directly (the exception, not using submitRequest()) - req->pack(msg); - m_serverConnections[0]->Send(msg); - delete req; - - m_serverConnections[0]->process(); - } - else if (m_shouldSendVersion == false) - { - if (m_inFailoverMode) - { - // reconnect to server succeeded, proceed with failover procedures. - // The failover procs will make the resumeProcessing() call. - m_api->OnFailoverBegin(); - failoverReloginAvatars(); - } - else - { - // first time connecting, allow user requests to go through - resumeProcessing(); - m_api->OnConnect(); - } - } -} - -void ChatAPICore::OnDisconnect(const char *host, short port) -{ - // we may get OnDisconnect even when we're already disconnected, - // so protect against unnecessary OnDisconnects by checking m_connected - if (m_connected) - { - m_connected = false; - m_sentVersion = false; - - // stop processing immediately - suspendProcessing(); - - m_timeSinceLastDisconnect = time(nullptr); - - // determine who we disconnected from and take appropriate action - if (strcmp(host, m_registrarHost.c_str()) == 0 && - port == m_registrarPort) - { - // we finished communication to the registrar - // change connection to the assigned host and port - changeHostPort(0, m_assignedServerHost.c_str(), m_assignedServerPort); - m_setToRegistrar = false; - } - else - { - // we disconnected from a Chat Server - // consider ourselves in failover mode, meaning next connection to - // a Chat Server will induce API failure procedure. First we will - // attempt to connect to Registrar again. - m_inFailoverMode = true; - m_failoverAvatarResRemain = 0; - m_failoverRoomResRemain = 0; - - changeHostPort(0, m_registrarHost.c_str(), m_registrarPort); - m_setToRegistrar = true; - - // indicate disconnect state - m_api->OnDisconnect(); - } - } -} - -void ChatAPICore::failoverReloginAvatars() -{ - map::iterator avatarIter; - - if (m_avatarCoreCache.size() > 0) - { - for (avatarIter = m_avatarCoreCache.begin(); avatarIter != m_avatarCoreCache.end(); ++avatarIter) - { - // build failover-login request for avatar - failoverReloginOneAvatar(avatarIter->second); - } - } - else - { - // no avatars to relogin, so directly proceed to failover rooms - failoverRecreateRooms(); - } -} - - -void ChatAPICore::failoverReloginOneAvatar(ChatAvatarCore * avatarCore) -{ - if (avatarCore) - { - // build failover-login request for avatar - Base::ByteStream msg; - RFailoverReloginAvatar *req = new RFailoverReloginAvatar(avatarCore); - ResFailoverReloginAvatar *res = new ResFailoverReloginAvatar(avatarCore->getAvatarID()); - - if(m_currTrack == 0) - { - m_currTrack++; - } - req->setTrack(m_currTrack); - res->setTrack(m_currTrack); - m_currTrack++; - - time_t timeout = time(nullptr) + m_requestTimeout; - req->setTimeout(timeout); - res->setTimeout(timeout); - - m_pending.insert(pair(res->getTrack(), res)); - m_pendingCount++; - - // submit request directly (the exception, not using submitRequest()) - req->pack(msg); - m_serverConnections[0]->Send(msg); - delete req; - - m_failoverAvatarResRemain++; - m_serverConnections[0]->process(false); - } -} - - -void ChatAPICore::failoverRecreateRooms() -{ - map::iterator roomIter; - multimap::iterator roomMultiIter; - - if (m_roomCoreCache.size() > 0) - { - // first build multimap of rooms keyed by their node level (ascending order is default). - multimap levelMap; - ChatRoomCore *roomCore = nullptr; - for (roomIter = m_roomCoreCache.begin(); roomIter != m_roomCoreCache.end(); ++roomIter) - { - roomCore = (*roomIter).second; - if (roomCore->getNodeLevel() != 0) - { - levelMap.insert(pair(roomCore->getNodeLevel(), roomCore)); - } - } - - for (roomMultiIter = levelMap.begin(); roomMultiIter != levelMap.end(); ++roomMultiIter) - { - roomCore = (*roomMultiIter).second; - - // build failover-room-create request for room + // negotiate chat server host/port with the Registrar Base::ByteStream msg; - RFailoverRecreateRoom *req = new RFailoverRecreateRoom(roomCore); - ResFailoverRecreateRoom *res = new ResFailoverRecreateRoom(roomCore->getRoomID()); + RRegistrarGetChatServer *req = new RRegistrarGetChatServer(m_defaultServerHost, m_defaultServerPort); + ResRegistrarGetChatServer *res = new ResRegistrarGetChatServer(); - if(m_currTrack == 0) + if (m_currTrack == 0) { m_currTrack++; } @@ -3271,91 +3077,284 @@ void ChatAPICore::failoverRecreateRooms() time_t timeout = time(nullptr) + m_requestTimeout; req->setTimeout(timeout); res->setTimeout(timeout); - + m_pending.insert(pair(res->getTrack(), res)); m_pendingCount++; - + // submit request directly (the exception, not using submitRequest()) req->pack(msg); m_serverConnections[0]->Send(msg); delete req; - m_failoverRoomResRemain++; - m_serverConnections[0]->process(false); + m_rcvdRegistrarResponse = false; + m_serverConnections[0]->process(); } - } - else - { - // no rooms to recreate, so resume processing and - // indicate it's ok to send new requests. - m_inFailoverMode = false; - m_api->OnFailoverComplete(); - resumeProcessing(); - } -} - -ChatAvatar *ChatAPICore::getAvatar(const ChatUnicodeString &avatarName, const ChatUnicodeString &avatarAddress) -{ - ChatAvatar *returnVal = nullptr; - - map::iterator iter = m_avatarCache.begin(); - - for (; iter != m_avatarCache.end(); ++iter) - { - ChatAvatar *avatar = (*iter).second; - - if (areEqualChatStrings(avatarName, avatar->getName()) && - areEqualChatStrings(avatarAddress, avatar->getAddress())) + else if (!m_sentVersion && + m_shouldSendVersion) // always true, except ChatAdminAPICore can override { - returnVal = avatar; - break; - } - } + // send the version to the chat server + Base::ByteStream msg; + RSendApiVersion *req = new RSendApiVersion(kChatApiVersion); + ResSendApiVersion *res = new ResSendApiVersion(); - return returnVal; -} - -ChatRoom *ChatAPICore::getRoom(const ChatUnicodeString &roomAddress) -{ - ChatRoom *returnVal = nullptr; - - map::iterator iter = m_roomCache.begin(); - - for (; iter != m_roomCache.end(); ++iter) - { - ChatRoom *room = (*iter).second; - - if (areEqualChatStrings(roomAddress, room->getAddress())) - { - returnVal = room; - break; - } - } - - return returnVal; -} - -bool ChatAPICore::areEqualChatStrings(const ChatUnicodeString &str1, const ChatUnicodeString &str2) -{ - bool returnVal = true; - - if (str1.string_length != str2.string_length) - { - returnVal = false; - } - else - { - for (unsigned i = 0; i != str1.string_length; i++) - { - if (trueLower(str1.string_data[i]) != trueLower(str2.string_data[i])) + if (m_currTrack == 0) { - returnVal = false; - break; + m_currTrack++; + } + req->setTrack(m_currTrack); + res->setTrack(m_currTrack); + m_currTrack++; + + time_t timeout = time(nullptr) + m_requestTimeout; + req->setTimeout(timeout); + res->setTimeout(timeout); + + m_pending.insert(pair(res->getTrack(), res)); + m_pendingCount++; + + // submit request directly (the exception, not using submitRequest()) + req->pack(msg); + m_serverConnections[0]->Send(msg); + delete req; + + m_serverConnections[0]->process(); + } + else if (m_shouldSendVersion == false) + { + if (m_inFailoverMode) + { + // reconnect to server succeeded, proceed with failover procedures. + // The failover procs will make the resumeProcessing() call. + m_api->OnFailoverBegin(); + failoverReloginAvatars(); + } + else + { + // first time connecting, allow user requests to go through + resumeProcessing(); + m_api->OnConnect(); } } } - return returnVal; -} + void ChatAPICore::OnDisconnect(const char *host, short port) + { + // we may get OnDisconnect even when we're already disconnected, + // so protect against unnecessary OnDisconnects by checking m_connected + if (m_connected) + { + m_connected = false; + m_sentVersion = false; -}; + // stop processing immediately + suspendProcessing(); + + m_timeSinceLastDisconnect = time(nullptr); + + // determine who we disconnected from and take appropriate action + if (strcmp(host, m_registrarHost.c_str()) == 0 && + port == m_registrarPort) + { + // we finished communication to the registrar + // change connection to the assigned host and port + changeHostPort(0, m_assignedServerHost.c_str(), m_assignedServerPort); + m_setToRegistrar = false; + } + else + { + // we disconnected from a Chat Server + // consider ourselves in failover mode, meaning next connection to + // a Chat Server will induce API failure procedure. First we will + // attempt to connect to Registrar again. + m_inFailoverMode = true; + m_failoverAvatarResRemain = 0; + m_failoverRoomResRemain = 0; + + changeHostPort(0, m_registrarHost.c_str(), m_registrarPort); + m_setToRegistrar = true; + + // indicate disconnect state + m_api->OnDisconnect(); + } + } + } + + void ChatAPICore::failoverReloginAvatars() + { + map::iterator avatarIter; + + if (m_avatarCoreCache.size() > 0) + { + for (avatarIter = m_avatarCoreCache.begin(); avatarIter != m_avatarCoreCache.end(); ++avatarIter) + { + // build failover-login request for avatar + failoverReloginOneAvatar(avatarIter->second); + } + } + else + { + // no avatars to relogin, so directly proceed to failover rooms + failoverRecreateRooms(); + } + } + + void ChatAPICore::failoverReloginOneAvatar(ChatAvatarCore * avatarCore) + { + if (avatarCore) + { + // build failover-login request for avatar + Base::ByteStream msg; + RFailoverReloginAvatar *req = new RFailoverReloginAvatar(avatarCore); + ResFailoverReloginAvatar *res = new ResFailoverReloginAvatar(avatarCore->getAvatarID()); + + if (m_currTrack == 0) + { + m_currTrack++; + } + req->setTrack(m_currTrack); + res->setTrack(m_currTrack); + m_currTrack++; + + time_t timeout = time(nullptr) + m_requestTimeout; + req->setTimeout(timeout); + res->setTimeout(timeout); + + m_pending.insert(pair(res->getTrack(), res)); + m_pendingCount++; + + // submit request directly (the exception, not using submitRequest()) + req->pack(msg); + m_serverConnections[0]->Send(msg); + delete req; + + m_failoverAvatarResRemain++; + m_serverConnections[0]->process(false); + } + } + + void ChatAPICore::failoverRecreateRooms() + { + map::iterator roomIter; + multimap::iterator roomMultiIter; + + if (m_roomCoreCache.size() > 0) + { + // first build multimap of rooms keyed by their node level (ascending order is default). + multimap levelMap; + ChatRoomCore *roomCore = nullptr; + for (roomIter = m_roomCoreCache.begin(); roomIter != m_roomCoreCache.end(); ++roomIter) + { + roomCore = (*roomIter).second; + if (roomCore->getNodeLevel() != 0) + { + levelMap.insert(pair(roomCore->getNodeLevel(), roomCore)); + } + } + + for (roomMultiIter = levelMap.begin(); roomMultiIter != levelMap.end(); ++roomMultiIter) + { + roomCore = (*roomMultiIter).second; + + // build failover-room-create request for room + Base::ByteStream msg; + RFailoverRecreateRoom *req = new RFailoverRecreateRoom(roomCore); + ResFailoverRecreateRoom *res = new ResFailoverRecreateRoom(roomCore->getRoomID()); + + if (m_currTrack == 0) + { + m_currTrack++; + } + req->setTrack(m_currTrack); + res->setTrack(m_currTrack); + m_currTrack++; + + time_t timeout = time(nullptr) + m_requestTimeout; + req->setTimeout(timeout); + res->setTimeout(timeout); + + m_pending.insert(pair(res->getTrack(), res)); + m_pendingCount++; + + // submit request directly (the exception, not using submitRequest()) + req->pack(msg); + m_serverConnections[0]->Send(msg); + delete req; + + m_failoverRoomResRemain++; + m_serverConnections[0]->process(false); + } + } + else + { + // no rooms to recreate, so resume processing and + // indicate it's ok to send new requests. + m_inFailoverMode = false; + m_api->OnFailoverComplete(); + resumeProcessing(); + } + } + + ChatAvatar *ChatAPICore::getAvatar(const ChatUnicodeString &avatarName, const ChatUnicodeString &avatarAddress) + { + ChatAvatar *returnVal = nullptr; + + map::iterator iter = m_avatarCache.begin(); + + for (; iter != m_avatarCache.end(); ++iter) + { + ChatAvatar *avatar = (*iter).second; + + if (areEqualChatStrings(avatarName, avatar->getName()) && + areEqualChatStrings(avatarAddress, avatar->getAddress())) + { + returnVal = avatar; + break; + } + } + + return returnVal; + } + + ChatRoom *ChatAPICore::getRoom(const ChatUnicodeString &roomAddress) + { + ChatRoom *returnVal = nullptr; + + map::iterator iter = m_roomCache.begin(); + + for (; iter != m_roomCache.end(); ++iter) + { + ChatRoom *room = (*iter).second; + + if (areEqualChatStrings(roomAddress, room->getAddress())) + { + returnVal = room; + break; + } + } + + return returnVal; + } + + bool ChatAPICore::areEqualChatStrings(const ChatUnicodeString &str1, const ChatUnicodeString &str2) + { + bool returnVal = true; + + if (str1.string_length != str2.string_length) + { + returnVal = false; + } + else + { + for (unsigned i = 0; i != str1.string_length; i++) + { + if (trueLower(str1.string_data[i]) != trueLower(str2.string_data[i])) + { + returnVal = false; + break; + } + } + } + + return returnVal; + } +}; \ No newline at end of file diff --git a/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/ChatAvatarCore.cpp b/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/ChatAvatarCore.cpp index 25e2e8f0..871f63d7 100755 --- a/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/ChatAvatarCore.cpp +++ b/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/ChatAvatarCore.cpp @@ -1,186 +1,184 @@ #include "ChatAvatarCore.h" #include "ChatAvatar.h" -namespace ChatSystem +namespace ChatSystem { + using namespace Plat_Unicode; + using namespace Base; -using namespace Plat_Unicode; -using namespace Base; + ChatAvatarCore::ChatAvatarCore() + : m_inboxLimit(0), + m_loginPriority(0), + m_userID(0), + m_avatarID(0), + m_serverID(0), + m_gatewayID(0), + m_attributes(0) + { + } -ChatAvatarCore::ChatAvatarCore() -: m_inboxLimit(0), - m_loginPriority(0), - m_userID(0), - m_avatarID(0), - m_serverID(0), - m_gatewayID(0) -{ -} + ChatAvatarCore::ChatAvatarCore(unsigned avatarID, unsigned userID, const unsigned short *name, const unsigned short *address, const unsigned short *gateway, const unsigned short *server, unsigned gatewayID, unsigned serverID, const unsigned short *loginLocation, unsigned attributes) + : m_name(name), + m_address(address), + m_server(server), + m_gateway(gateway), + m_loginLocation(loginLocation), + m_attributes(attributes), + m_inboxLimit(0), + m_loginPriority(0), + m_userID(userID), + m_avatarID(avatarID), + m_serverID(serverID), + m_gatewayID(gatewayID) + { + } -ChatAvatarCore::ChatAvatarCore(unsigned avatarID, unsigned userID, const unsigned short *name, const unsigned short *address, const unsigned short *gateway, const unsigned short *server, unsigned gatewayID, unsigned serverID, const unsigned short *loginLocation, unsigned attributes) -: m_name(name), - m_address(address), - m_server(server), - m_gateway(gateway), - m_loginLocation(loginLocation), - m_attributes(attributes), - m_inboxLimit(0), - m_loginPriority(0), - m_userID(userID), - m_avatarID(avatarID), - m_serverID(serverID), - m_gatewayID(gatewayID) -{ -} + ChatAvatarCore::ChatAvatarCore(unsigned avatarID, unsigned userID, const ChatUnicodeString &name, const ChatUnicodeString &address, const ChatUnicodeString &gateway, const ChatUnicodeString &server, unsigned gatewayID, unsigned serverID, const ChatUnicodeString &loginLocation, unsigned attributes) + : m_name(name.string_data, name.string_length), + m_address(address.string_data, address.string_length), + m_server(server.string_data, server.string_length), + m_gateway(gateway.string_data, gateway.string_length), + m_loginLocation(loginLocation.string_data, loginLocation.string_length), + m_attributes(attributes), + m_inboxLimit(0), + m_loginPriority(0), + m_userID(userID), + m_avatarID(avatarID), + m_serverID(serverID), + m_gatewayID(gatewayID) + { + } -ChatAvatarCore::ChatAvatarCore(unsigned avatarID, unsigned userID, const ChatUnicodeString &name, const ChatUnicodeString &address, const ChatUnicodeString &gateway, const ChatUnicodeString &server, unsigned gatewayID, unsigned serverID, const ChatUnicodeString &loginLocation, unsigned attributes) -: m_name(name.string_data, name.string_length), - m_address(address.string_data, address.string_length), - m_server(server.string_data, server.string_length), - m_gateway(gateway.string_data, gateway.string_length), - m_loginLocation(loginLocation.string_data, loginLocation.string_length), - m_attributes(attributes), - m_inboxLimit(0), - m_loginPriority(0), - m_userID(userID), - m_avatarID(avatarID), - m_serverID(serverID), - m_gatewayID(gatewayID) -{ -} + ChatAvatarCore::ChatAvatarCore(unsigned avatarID, unsigned userID, const String &name, const String &address, const String &gateway, const String &server, unsigned gatewayID, unsigned serverID, const Plat_Unicode::String &loginLocation, unsigned attributes) + : m_name(name), + m_address(address), + m_server(server), + m_gateway(gateway), + m_loginLocation(loginLocation), + m_attributes(attributes), + m_inboxLimit(0), + m_loginPriority(0), + m_userID(userID), + m_avatarID(avatarID), + m_serverID(serverID), + m_gatewayID(gatewayID) + { + } -ChatAvatarCore::ChatAvatarCore(unsigned avatarID, unsigned userID, const String &name, const String &address, const String &gateway, const String &server, unsigned gatewayID, unsigned serverID, const Plat_Unicode::String &loginLocation, unsigned attributes) -: m_name(name), - m_address(address), - m_server(server), - m_gateway(gateway), - m_loginLocation(loginLocation), - m_attributes(attributes), - m_inboxLimit(0), - m_loginPriority(0), - m_userID(userID), - m_avatarID(avatarID), - m_serverID(serverID), - m_gatewayID(gatewayID) -{ -} + ChatAvatarCore::ChatAvatarCore(ByteStream::ReadIterator &iter) + { + get(iter, m_avatarID); + get(iter, m_userID); + ASSERT_VALID_STRING_LENGTH(get(iter, m_name)); + ASSERT_VALID_STRING_LENGTH(get(iter, m_address)); + get(iter, (uint32 &)m_attributes); + ASSERT_VALID_STRING_LENGTH(get(iter, m_loginLocation)); + ASSERT_VALID_STRING_LENGTH(get(iter, m_server)); + ASSERT_VALID_STRING_LENGTH(get(iter, m_gateway)); + get(iter, m_serverID); + get(iter, m_gatewayID); + m_loginPriority = 0; + m_inboxLimit = 0; + } -ChatAvatarCore::ChatAvatarCore(ByteStream::ReadIterator &iter) -{ - get(iter, m_avatarID); - get(iter, m_userID); - ASSERT_VALID_STRING_LENGTH(get(iter, m_name)); - ASSERT_VALID_STRING_LENGTH(get(iter, m_address)); - get(iter, (uint32 &)m_attributes); - ASSERT_VALID_STRING_LENGTH(get(iter, m_loginLocation)); - ASSERT_VALID_STRING_LENGTH(get(iter, m_server)); - ASSERT_VALID_STRING_LENGTH(get(iter, m_gateway)); - get(iter, m_serverID); - get(iter, m_gatewayID); + ChatAvatarCore::ChatAvatarCore(const ChatAvatarCore &rhs) + : m_name(rhs.m_name), + m_address(rhs.m_address), + m_server(rhs.m_server), + m_gateway(rhs.m_gateway), + m_loginLocation(rhs.m_loginLocation), + m_email(rhs.m_email), + m_statusMessage(rhs.m_statusMessage), + m_attributes(rhs.m_attributes), + m_inboxLimit(rhs.m_inboxLimit), + m_loginPriority(rhs.m_loginPriority), + m_userID(rhs.m_userID), + m_avatarID(rhs.m_avatarID), + m_serverID(rhs.m_serverID), + m_gatewayID(rhs.m_gatewayID) + { + } - m_loginPriority = 0; - m_inboxLimit = 0; -} + ChatAvatarCore &ChatAvatarCore::operator=(const ChatAvatarCore &rhs) + { + m_name = rhs.m_name; + m_address = rhs.m_address; + m_userID = rhs.m_userID; + m_avatarID = rhs.m_avatarID; + m_server = rhs.m_server; + m_gateway = rhs.m_gateway; + m_serverID = rhs.m_serverID; + m_gatewayID = rhs.m_gatewayID; + m_attributes = rhs.m_attributes; + m_inboxLimit = rhs.m_inboxLimit; + m_loginPriority = rhs.m_loginPriority; + m_loginLocation = rhs.m_loginLocation; + m_email = rhs.m_email; + m_inboxLimit = rhs.m_inboxLimit; + m_statusMessage = rhs.m_statusMessage; -ChatAvatarCore::ChatAvatarCore(const ChatAvatarCore &rhs) -: m_name(rhs.m_name), - m_address(rhs.m_address), - m_server(rhs.m_server), - m_gateway(rhs.m_gateway), - m_loginLocation(rhs.m_loginLocation), - m_email(rhs.m_email), - m_statusMessage(rhs.m_statusMessage), - m_attributes(rhs.m_attributes), - m_inboxLimit(rhs.m_inboxLimit), - m_loginPriority(rhs.m_loginPriority), - m_userID(rhs.m_userID), - m_avatarID(rhs.m_avatarID), - m_serverID(rhs.m_serverID), - m_gatewayID(rhs.m_gatewayID) -{ -} + return(*this); + } -ChatAvatarCore &ChatAvatarCore::operator=(const ChatAvatarCore &rhs) -{ - m_name = rhs.m_name; - m_address = rhs.m_address; - m_userID = rhs.m_userID; - m_avatarID = rhs.m_avatarID; - m_server = rhs.m_server; - m_gateway = rhs.m_gateway; - m_serverID = rhs.m_serverID; - m_gatewayID = rhs.m_gatewayID; - m_attributes = rhs.m_attributes; - m_inboxLimit = rhs.m_inboxLimit; - m_loginPriority = rhs.m_loginPriority; - m_loginLocation = rhs.m_loginLocation; - m_email = rhs.m_email; - m_inboxLimit = rhs.m_inboxLimit; - m_statusMessage = rhs.m_statusMessage; + ChatAvatar *ChatAvatarCore::getNewChatAvatar() const + { + ChatUnicodeString addr(m_address.data(), m_address.size()); + ChatUnicodeString name(m_name.data(), m_name.size()); + ChatUnicodeString gateway(m_gateway.data(), m_gateway.size()); + ChatUnicodeString server(m_server.data(), m_server.size()); - return(*this); -} + ChatAvatar *newChatAvatar = new ChatAvatar(m_avatarID, + m_userID, + name, + addr, + gateway, + server, + m_gatewayID, + m_serverID, + m_loginLocation, + m_attributes); -ChatAvatar *ChatAvatarCore::getNewChatAvatar() const -{ - ChatUnicodeString addr(m_address.data(), m_address.size()); - ChatUnicodeString name(m_name.data(), m_name.size()); - ChatUnicodeString gateway(m_gateway.data(), m_gateway.size()); - ChatUnicodeString server(m_server.data(), m_server.size()); + newChatAvatar->setLoginPriority(m_loginPriority); + newChatAvatar->setInboxLimit(m_inboxLimit); + newChatAvatar->setForwardingEmail(m_email); + newChatAvatar->setStatusMessage(m_statusMessage); - ChatAvatar *newChatAvatar = new ChatAvatar(m_avatarID, - m_userID, - name, - addr, - gateway, - server, - m_gatewayID, - m_serverID, - m_loginLocation, - m_attributes); + return (newChatAvatar); + } - newChatAvatar->setLoginPriority(m_loginPriority); - newChatAvatar->setInboxLimit(m_inboxLimit); - newChatAvatar->setForwardingEmail(m_email); - newChatAvatar->setStatusMessage(m_statusMessage); + void ChatAvatarCore::serialize(Base::ByteStream &msg) + { + put(msg, m_avatarID); + put(msg, m_userID); + put(msg, m_name); + put(msg, m_address); + put(msg, (uint32)m_attributes); + put(msg, m_loginLocation); + } - return (newChatAvatar); -} + void ChatAvatarCore::setAttributes(unsigned long attributes) + { + m_attributes = attributes; + } -void ChatAvatarCore::serialize(Base::ByteStream &msg) -{ - put(msg, m_avatarID); - put(msg, m_userID); - put(msg, m_name); - put(msg, m_address); - put(msg, (uint32)m_attributes); - put(msg, m_loginLocation); -} + void ChatAvatarCore::setLoginPriority(int loginPriority) + { + m_loginPriority = loginPriority; + } -void ChatAvatarCore::setAttributes(unsigned long attributes) -{ - m_attributes = attributes; -} + void ChatAvatarCore::setEmail(const Plat_Unicode::String email) + { + m_email = email; + } -void ChatAvatarCore::setLoginPriority(int loginPriority) -{ - m_loginPriority = loginPriority; -} + void ChatAvatarCore::setInboxLimit(unsigned inboxLimit) + { + m_inboxLimit = inboxLimit; + } -void ChatAvatarCore::setEmail(const Plat_Unicode::String email) -{ - m_email = email; -} - -void ChatAvatarCore::setInboxLimit(unsigned inboxLimit) -{ - m_inboxLimit = inboxLimit; -} - -void ChatAvatarCore::setStatusMessage(const Plat_Unicode::String &statusMessage) -{ - m_statusMessage = statusMessage; -} - -}; + void ChatAvatarCore::setStatusMessage(const Plat_Unicode::String &statusMessage) + { + m_statusMessage = statusMessage; + } +}; \ No newline at end of file diff --git a/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/ChatRoomCore.cpp b/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/ChatRoomCore.cpp index d0c70f68..ee6c1a32 100755 --- a/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/ChatRoomCore.cpp +++ b/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/ChatRoomCore.cpp @@ -3,592 +3,248 @@ #include "ChatAvatarCore.h" #include "AvatarIteratorCore.h" -namespace ChatSystem +namespace ChatSystem { + using namespace std; + using namespace Base; + using namespace Plat_Unicode; -using namespace std; -using namespace Base; -using namespace Plat_Unicode; - -ChatRoomCore::ChatRoomCore() -: m_creatorID(0), - m_roomAttributes(0), - m_maxRoomSize(0), - m_roomID(0), - m_createTime(0), - m_nodeLevel(0) -{ -} - -ChatRoomCore::ChatRoomCore(ByteStream::ReadIterator &iter) -{ - unsigned avatarCount; - unsigned administratorCount; - unsigned moderatorCount; - unsigned tempModeratorCount; - unsigned bannedCount; - unsigned invitedCount; - unsigned voiceCount; - ChatAvatarCore *avatar; - unsigned i; - - ASSERT_VALID_STRING_LENGTH(get(iter, m_creatorName)); - ASSERT_VALID_STRING_LENGTH(get(iter, m_creatorAddress)); - get(iter, m_creatorID); - ASSERT_VALID_STRING_LENGTH(get(iter, m_roomName)); - ASSERT_VALID_STRING_LENGTH(get(iter, m_roomTopic)); - ASSERT_VALID_STRING_LENGTH(get(iter, m_roomPrefix)); - ASSERT_VALID_STRING_LENGTH(get(iter, m_roomAddress)); - ASSERT_VALID_STRING_LENGTH(get(iter, m_roomPassword)); - get(iter, m_roomAttributes); - get(iter, m_maxRoomSize); - get(iter, m_roomID); - get(iter, m_createTime); - get(iter, m_nodeLevel); - - get(iter, avatarCount); - for (i = 0; i != avatarCount; i++) + ChatRoomCore::ChatRoomCore() + : m_creatorID(0), + m_roomAttributes(0), + m_maxRoomSize(0), + m_roomID(0), + m_createTime(0), + m_nodeLevel(0), + m_roomMessageID(0) { - avatar = new ChatAvatarCore(iter); - this->addAvatar(avatar, false); } - get(iter, administratorCount); - for (i = 0; i != administratorCount; i++) + ChatRoomCore::ChatRoomCore(ByteStream::ReadIterator &iter) { - avatar = new ChatAvatarCore(iter); - this->addAdministrator(avatar); - } - - get(iter, moderatorCount); - for (i = 0; i != moderatorCount; i++) - { - avatar = new ChatAvatarCore(iter); - this->addModerator(avatar); - } - - get(iter, tempModeratorCount); - for (i = 0; i != tempModeratorCount; i++) - { - avatar = new ChatAvatarCore(iter); - this->addTempModerator(avatar); - } + unsigned avatarCount; + unsigned administratorCount; + unsigned moderatorCount; + unsigned tempModeratorCount; + unsigned bannedCount; + unsigned invitedCount; + unsigned voiceCount; + ChatAvatarCore *avatar; + unsigned i; - get(iter, bannedCount); - for (i = 0; i != bannedCount; i++) - { - avatar = new ChatAvatarCore(iter); - this->addBan(avatar); - } - - get(iter, invitedCount); - for (i = 0; i != invitedCount; i++) - { - avatar = new ChatAvatarCore(iter); - this->addInvite(avatar); - } - - get(iter, voiceCount); - for (i = 0; i != voiceCount; i++) - { - avatar = new ChatAvatarCore(iter); - this->addVoice(avatar); - } -} + ASSERT_VALID_STRING_LENGTH(get(iter, m_creatorName)); + ASSERT_VALID_STRING_LENGTH(get(iter, m_creatorAddress)); + get(iter, m_creatorID); + ASSERT_VALID_STRING_LENGTH(get(iter, m_roomName)); + ASSERT_VALID_STRING_LENGTH(get(iter, m_roomTopic)); + ASSERT_VALID_STRING_LENGTH(get(iter, m_roomPrefix)); + ASSERT_VALID_STRING_LENGTH(get(iter, m_roomAddress)); + ASSERT_VALID_STRING_LENGTH(get(iter, m_roomPassword)); + get(iter, m_roomAttributes); + get(iter, m_maxRoomSize); + get(iter, m_roomID); + get(iter, m_createTime); + get(iter, m_nodeLevel); -ChatRoomCore::ChatRoomCore(const String &name, const String &address, const String &topic, const unsigned attributes, const unsigned maxSize) -: m_roomName(name), - m_roomTopic(topic), - m_roomAddress(address), - m_creatorID(0), - m_roomAttributes(attributes), - m_maxRoomSize(maxSize), - m_roomID(0) -{ -} - -ChatRoomCore::~ChatRoomCore() -{ - map::iterator iterCore; - map::iterator iter; - - set::iterator setIterCore; - set::iterator setIter; - - for (iterCore = m_inroomAvatarsCore.begin(); iterCore != m_inroomAvatarsCore.end(); ++iterCore) - { - delete (iterCore->second); - } - - for (iter = m_inroomAvatars.begin(); iter != m_inroomAvatars.end(); ++iter) - { - delete (iter->second); - } - - for (iterCore = m_adminAvatarsCore.begin(); iterCore != m_adminAvatarsCore.end(); ++iterCore) - { - delete (iterCore->second); - } - - for (iter = m_adminAvatars.begin(); iter != m_adminAvatars.end(); ++iter) - { - delete (iter->second); - } - - for (setIterCore = m_moderatorAvatarsCore.begin(); setIterCore != m_moderatorAvatarsCore.end(); ++setIterCore) - { - delete (*setIterCore); - } - - for (setIter = m_moderatorAvatars.begin(); setIter != m_moderatorAvatars.end(); ++setIter) - { - delete (*setIter); - } - - for (setIterCore = m_tempModeratorAvatarsCore.begin(); setIterCore != m_tempModeratorAvatarsCore.end(); ++setIterCore) - { - delete (*setIterCore); - } - - for (setIter = m_tempModeratorAvatars.begin(); setIter != m_tempModeratorAvatars.end(); ++setIter) - { - delete (*setIter); - } - - for (setIterCore = m_banAvatarsCore.begin(); setIterCore != m_banAvatarsCore.end(); ++setIterCore) - { - delete (*setIterCore); - } - - for (setIter = m_banAvatars.begin(); setIter != m_banAvatars.end(); ++setIter) - { - delete (*setIter); - } - - for (setIterCore = m_inviteAvatarsCore.begin(); setIterCore != m_inviteAvatarsCore.end(); ++setIterCore) - { - delete (*setIterCore); - } - - for (setIter = m_inviteAvatars.begin(); setIter != m_inviteAvatars.end(); ++setIter) - { - delete (*setIter); - } - - for (setIterCore = m_voiceAvatarsCore.begin(); setIterCore != m_voiceAvatarsCore.end(); ++setIterCore) - { - delete (*setIterCore); - } - - for (setIter = m_voiceAvatars.begin(); setIter != m_voiceAvatars.end(); ++setIter) - { - delete (*setIter); - } - -} - -ChatAvatarCore *ChatRoomCore::getAvatarCore(unsigned avatarID) -{ - ChatAvatarCore *returnAvatar = nullptr; - - map::iterator iterCore = m_inroomAvatarsCore.find(avatarID); - - if(iterCore != m_inroomAvatarsCore.end()) - { - returnAvatar = (*iterCore).second; - } - return(returnAvatar); -} - -ChatAvatar *ChatRoomCore::getAvatar(unsigned avatarID) -{ - ChatAvatar *returnAvatar = nullptr; - - map::iterator iter = m_inroomAvatars.find(avatarID); - - if(iter != m_inroomAvatars.end()) - { - returnAvatar = (*iter).second; - } - return(returnAvatar); -} - -ChatAvatarCore *ChatRoomCore::getModeratorCore(const Plat_Unicode::String &name, const Plat_Unicode::String &address) -{ - ChatAvatarCore *returnAvatar = nullptr; - - set::iterator iterCore = m_moderatorAvatarsCore.begin(); - - for(; iterCore != m_moderatorAvatarsCore.end(); ++iterCore) - { - ChatAvatarCore *avatarCore = (*iterCore); - if (caseInsensitiveCompare(name, avatarCore->getName()) && - caseInsensitiveCompare(address, avatarCore->getAddress(), true)) + get(iter, avatarCount); + for (i = 0; i != avatarCount; i++) { - break; + avatar = new ChatAvatarCore(iter); + this->addAvatar(avatar, false); + } + + get(iter, administratorCount); + for (i = 0; i != administratorCount; i++) + { + avatar = new ChatAvatarCore(iter); + this->addAdministrator(avatar); + } + + get(iter, moderatorCount); + for (i = 0; i != moderatorCount; i++) + { + avatar = new ChatAvatarCore(iter); + this->addModerator(avatar); + } + + get(iter, tempModeratorCount); + for (i = 0; i != tempModeratorCount; i++) + { + avatar = new ChatAvatarCore(iter); + this->addTempModerator(avatar); + } + + get(iter, bannedCount); + for (i = 0; i != bannedCount; i++) + { + avatar = new ChatAvatarCore(iter); + this->addBan(avatar); + } + + get(iter, invitedCount); + for (i = 0; i != invitedCount; i++) + { + avatar = new ChatAvatarCore(iter); + this->addInvite(avatar); + } + + get(iter, voiceCount); + for (i = 0; i != voiceCount; i++) + { + avatar = new ChatAvatarCore(iter); + this->addVoice(avatar); } } - if(iterCore != m_moderatorAvatarsCore.end()) + ChatRoomCore::ChatRoomCore(const String &name, const String &address, const String &topic, const unsigned attributes, const unsigned maxSize) + : m_roomName(name), + m_roomTopic(topic), + m_roomAddress(address), + m_creatorID(0), + m_roomAttributes(attributes), + m_maxRoomSize(maxSize), + m_roomID(0), + m_createTime(0), + m_nodeLevel(0), + m_roomMessageID(0) { - returnAvatar = (*iterCore); } - return(returnAvatar); -} -ChatAvatar *ChatRoomCore::getModerator(const Plat_Unicode::String &name, const Plat_Unicode::String &address) -{ - ChatAvatar *returnAvatar = nullptr; - - set::iterator iter = m_moderatorAvatars.begin(); - - for(; iter != m_moderatorAvatars.end(); ++iter) + ChatRoomCore::~ChatRoomCore() { - ChatAvatar *avatar = (*iter); - Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); - Plat_Unicode::String avatarAddress(avatar->getAddress().string_data, avatar->getAddress().string_length); - if (caseInsensitiveCompare(name, avatarName) && - caseInsensitiveCompare(address, avatarAddress, true)) + map::iterator iterCore; + map::iterator iter; + + set::iterator setIterCore; + set::iterator setIter; + + for (iterCore = m_inroomAvatarsCore.begin(); iterCore != m_inroomAvatarsCore.end(); ++iterCore) { - break; + delete (iterCore->second); + } + + for (iter = m_inroomAvatars.begin(); iter != m_inroomAvatars.end(); ++iter) + { + delete (iter->second); + } + + for (iterCore = m_adminAvatarsCore.begin(); iterCore != m_adminAvatarsCore.end(); ++iterCore) + { + delete (iterCore->second); + } + + for (iter = m_adminAvatars.begin(); iter != m_adminAvatars.end(); ++iter) + { + delete (iter->second); + } + + for (setIterCore = m_moderatorAvatarsCore.begin(); setIterCore != m_moderatorAvatarsCore.end(); ++setIterCore) + { + delete (*setIterCore); + } + + for (setIter = m_moderatorAvatars.begin(); setIter != m_moderatorAvatars.end(); ++setIter) + { + delete (*setIter); + } + + for (setIterCore = m_tempModeratorAvatarsCore.begin(); setIterCore != m_tempModeratorAvatarsCore.end(); ++setIterCore) + { + delete (*setIterCore); + } + + for (setIter = m_tempModeratorAvatars.begin(); setIter != m_tempModeratorAvatars.end(); ++setIter) + { + delete (*setIter); + } + + for (setIterCore = m_banAvatarsCore.begin(); setIterCore != m_banAvatarsCore.end(); ++setIterCore) + { + delete (*setIterCore); + } + + for (setIter = m_banAvatars.begin(); setIter != m_banAvatars.end(); ++setIter) + { + delete (*setIter); + } + + for (setIterCore = m_inviteAvatarsCore.begin(); setIterCore != m_inviteAvatarsCore.end(); ++setIterCore) + { + delete (*setIterCore); + } + + for (setIter = m_inviteAvatars.begin(); setIter != m_inviteAvatars.end(); ++setIter) + { + delete (*setIter); + } + + for (setIterCore = m_voiceAvatarsCore.begin(); setIterCore != m_voiceAvatarsCore.end(); ++setIterCore) + { + delete (*setIterCore); + } + + for (setIter = m_voiceAvatars.begin(); setIter != m_voiceAvatars.end(); ++setIter) + { + delete (*setIter); } } - if(iter != m_moderatorAvatars.end()) + ChatAvatarCore *ChatRoomCore::getAvatarCore(unsigned avatarID) { - returnAvatar = (*iter); - } - return(returnAvatar); -} + ChatAvatarCore *returnAvatar = nullptr; -ChatAvatarCore *ChatRoomCore::getBannedCore(const Plat_Unicode::String &name, const Plat_Unicode::String &address) -{ - ChatAvatarCore *returnAvatar = nullptr; + map::iterator iterCore = m_inroomAvatarsCore.find(avatarID); - set::iterator iterCore = m_banAvatarsCore.begin(); - - for(; iterCore != m_banAvatarsCore.end(); ++iterCore) - { - ChatAvatarCore *avatarCore = (*iterCore); - if (caseInsensitiveCompare(name, avatarCore->getName()) && - caseInsensitiveCompare(address, avatarCore->getAddress(), true)) + if (iterCore != m_inroomAvatarsCore.end()) { - break; + returnAvatar = (*iterCore).second; } + return(returnAvatar); } - if(iterCore != m_banAvatarsCore.end()) + ChatAvatar *ChatRoomCore::getAvatar(unsigned avatarID) { - returnAvatar = (*iterCore); - } - return(returnAvatar); -} + ChatAvatar *returnAvatar = nullptr; -ChatAvatar *ChatRoomCore::getBanned(const Plat_Unicode::String &name, const Plat_Unicode::String &address) -{ - ChatAvatar *returnAvatar = nullptr; + map::iterator iter = m_inroomAvatars.find(avatarID); - set::iterator iter = m_banAvatars.begin(); - - for(; iter != m_banAvatars.end(); ++iter) - { - ChatAvatar *avatar = (*iter); - Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); - Plat_Unicode::String avatarAddress(avatar->getAddress().string_data, avatar->getAddress().string_length); - if (caseInsensitiveCompare(name, avatarName) && - caseInsensitiveCompare(address, avatarAddress, true)) + if (iter != m_inroomAvatars.end()) { - break; + returnAvatar = (*iter).second; } + return(returnAvatar); } - if(iter != m_banAvatars.end()) + ChatAvatarCore *ChatRoomCore::getModeratorCore(const Plat_Unicode::String &name, const Plat_Unicode::String &address) { - returnAvatar = (*iter); - } - return(returnAvatar); -} + ChatAvatarCore *returnAvatar = nullptr; -ChatAvatarCore *ChatRoomCore::getInvitedCore(const Plat_Unicode::String &name, const Plat_Unicode::String &address) -{ - ChatAvatarCore *returnAvatar = nullptr; + set::iterator iterCore = m_moderatorAvatarsCore.begin(); - set::iterator iterCore = m_inviteAvatarsCore.begin(); - - for(; iterCore != m_inviteAvatarsCore.end(); ++iterCore) - { - ChatAvatarCore *avatarCore = (*iterCore); - if (caseInsensitiveCompare(name, avatarCore->getName()) && - caseInsensitiveCompare(address, avatarCore->getAddress(), true)) + for (; iterCore != m_moderatorAvatarsCore.end(); ++iterCore) { - break; - } - } - - if(iterCore != m_inviteAvatarsCore.end()) - { - returnAvatar = (*iterCore); - } - return(returnAvatar); -} - -ChatAvatar *ChatRoomCore::getInvited(const Plat_Unicode::String &name, const Plat_Unicode::String &address) -{ - ChatAvatar *returnAvatar = nullptr; - - set::iterator iter = m_inviteAvatars.begin(); - - for(; iter != m_inviteAvatars.end(); ++iter) - { - ChatAvatar *avatar = (*iter); - Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); - Plat_Unicode::String avatarAddress(avatar->getAddress().string_data, avatar->getAddress().string_length); - if (caseInsensitiveCompare(name, avatarName) && - caseInsensitiveCompare(address, avatarAddress, true)) - { - break; - } - } - - if(iter != m_inviteAvatars.end()) - { - returnAvatar = (*iter); - } - return(returnAvatar); -} - -ChatAvatarCore *ChatRoomCore::addAvatar(ChatAvatarCore *newAvatar, bool local) -{ - ChatAvatarCore *returnAvatar = nullptr; - - if(newAvatar) - { - pair< map::iterator, bool > result; - - result = m_inroomAvatarsCore.insert(pair(newAvatar->getAvatarID(), newAvatar)); - - // if add of ChatAvatarCore works, add a new ChatAvatar also. - if (result.second == true) - { - ChatAvatar *avatar = newAvatar->getNewChatAvatar(); - - m_inroomAvatars.insert(pair(avatar->getAvatarID(), avatar)); - - // keep track of avatars connected to this API that are in room - if (local) - { - m_inroomAvatarsLocal.insert(newAvatar->getAvatarID()); - } - - returnAvatar = newAvatar; - } - } - - return returnAvatar; -} - -void ChatRoomCore::addLocalAvatar(unsigned avatarID) -{ - m_inroomAvatarsLocal.insert(avatarID); -} - -ChatAvatarCore *ChatRoomCore::removeAvatar(unsigned avatarID) -{ - ChatAvatarCore *returnAvatar = nullptr; - - map::iterator iterCore = m_inroomAvatarsCore.find(avatarID); - - if(iterCore != m_inroomAvatarsCore.end()) - { - // remove ChatAvatarCore and ChatAvatar objects. - returnAvatar = (*iterCore).second; - - m_inroomAvatarsCore.erase(iterCore); - - // because the addAvatar() made the ChatAvatar, removeAvatar() deletes it. - map::iterator iter = m_inroomAvatars.find(avatarID); - delete (*iter).second; - m_inroomAvatars.erase(avatarID); - - // remove from cache of local API avatars logged into this room, if nec. - std::set::iterator localIter = m_inroomAvatarsLocal.find(avatarID); - if (localIter != m_inroomAvatarsLocal.end()) - m_inroomAvatarsLocal.erase(localIter); - } - - // pass back the ChatAvatarCore and let caller delete it (b/c he created it). - return(returnAvatar); -} - -ChatAvatarCore *ChatRoomCore::addBan(ChatAvatarCore *newAvatar) -{ - ChatAvatarCore *returnAvatar = nullptr; - - if(newAvatar) - { - pair< set::iterator, bool > result; - - result = m_banAvatarsCore.insert(newAvatar); - - // if add of ChatAvatarCore works, add a new ChatAvatar also. - if (result.second == true) - { - ChatAvatar *avatar = newAvatar->getNewChatAvatar(); - - m_banAvatars.insert(avatar); - - returnAvatar = newAvatar; - } - } - - return returnAvatar; -} - -ChatAvatarCore *ChatRoomCore::removeBan(const Plat_Unicode::String &name, const Plat_Unicode::String &address) -{ - ChatAvatarCore *returnAvatar = nullptr; - - set::iterator iterCore = m_banAvatarsCore.begin(); - - for(; iterCore != m_banAvatarsCore.end(); ++iterCore) - { - ChatAvatarCore *avatarCore = (*iterCore); - if (caseInsensitiveCompare(name, avatarCore->getName()) && - caseInsensitiveCompare(address, avatarCore->getAddress(), true)) - { - break; - } - } - - if(iterCore != m_banAvatarsCore.end()) - { - // remove ChatAvatarCore and ChatAvatar objects. - returnAvatar = (*iterCore); - m_banAvatarsCore.erase(iterCore); - - // because the addBan() made the ChatAvatar, removeBan() deletes it. - set::iterator iter = m_banAvatars.begin(); - - for(; iter != m_banAvatars.end(); ++iter) - { - ChatAvatar *avatar = (*iter); - Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); - Plat_Unicode::String avatarAddress(avatar->getAddress().string_data, avatar->getAddress().string_length); - if (caseInsensitiveCompare(name, avatarName) && - caseInsensitiveCompare(address, avatarAddress, true)) + ChatAvatarCore *avatarCore = (*iterCore); + if (caseInsensitiveCompare(name, avatarCore->getName()) && + caseInsensitiveCompare(address, avatarCore->getAddress(), true)) { break; } } - if(iter != m_banAvatars.end()) + if (iterCore != m_moderatorAvatarsCore.end()) { - delete (*iter); - m_banAvatars.erase(iter); + returnAvatar = (*iterCore); } + return(returnAvatar); } - // pass back the ChatAvatarCore and let caller delete it (b/c he created it). - return(returnAvatar); -} - -ChatAvatarCore *ChatRoomCore::addAdministrator(ChatAvatarCore *newAvatar) -{ - ChatAvatarCore *returnAvatar = nullptr; - - if(newAvatar) + ChatAvatar *ChatRoomCore::getModerator(const Plat_Unicode::String &name, const Plat_Unicode::String &address) { - pair< map::iterator, bool > result; + ChatAvatar *returnAvatar = nullptr; - result = this->m_adminAvatarsCore.insert(pair(newAvatar->getAvatarID(), newAvatar)); - - // if add of ChatAvatarCore works, add a new ChatAvatar also. - if (result.second == true) - { - ChatAvatar *avatar = newAvatar->getNewChatAvatar(); - - m_adminAvatars.insert(pair(avatar->getAvatarID(), avatar)); - - returnAvatar = newAvatar; - } - } - - return returnAvatar; -} - -ChatAvatarCore *ChatRoomCore::removeAdministrator(unsigned avatarID) -{ - ChatAvatarCore *returnAvatar = nullptr; - - map::iterator iterCore = m_adminAvatarsCore.find(avatarID); - - if(iterCore != m_adminAvatarsCore.end()) - { - // remove ChatAvatarCore and ChatAvatar objects. - returnAvatar = (*iterCore).second; - - m_adminAvatarsCore.erase(iterCore); - - // because the addAvatar() made the ChatAvatar, removeAvatar() deletes it. - map::iterator iter = m_adminAvatars.find(avatarID); - delete (*iter).second; - m_adminAvatars.erase(avatarID); - } - - // pass back the ChatAvatarCore and let caller delete it (b/c he created it). - return(returnAvatar); -} - -ChatAvatarCore *ChatRoomCore::addModerator(ChatAvatarCore *newAvatar) -{ - ChatAvatarCore *returnAvatar = nullptr; - - if(newAvatar) - { - pair< set::iterator, bool > result; - - result = this->m_moderatorAvatarsCore.insert(newAvatar); - - // if add of ChatAvatarCore works, add a new ChatAvatar also. - if (result.second == true) - { - ChatAvatar *avatar = newAvatar->getNewChatAvatar(); - - m_moderatorAvatars.insert(avatar); - - returnAvatar = newAvatar; - } - } - - return returnAvatar; -} - -ChatAvatarCore *ChatRoomCore::removeModerator(const Plat_Unicode::String &name, const Plat_Unicode::String &address) -{ - ChatAvatarCore *returnAvatar = nullptr; - - set::iterator iterCore = m_moderatorAvatarsCore.begin(); - - for(; iterCore != m_moderatorAvatarsCore.end(); ++iterCore) - { - ChatAvatarCore *avatarCore = (*iterCore); - if (caseInsensitiveCompare(name, avatarCore->getName()) && - caseInsensitiveCompare(address, avatarCore->getAddress(), true)) - { - break; - } - } - - if(iterCore != m_moderatorAvatarsCore.end()) - { - // remove ChatAvatarCore and ChatAvatar objects. - returnAvatar = (*iterCore); - m_moderatorAvatarsCore.erase(iterCore); - - // because the addBan() made the ChatAvatar, removeBan() deletes it. set::iterator iter = m_moderatorAvatars.begin(); - for(; iter != m_moderatorAvatars.end(); ++iter) + for (; iter != m_moderatorAvatars.end(); ++iter) { ChatAvatar *avatar = (*iter); Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); @@ -600,67 +256,43 @@ ChatAvatarCore *ChatRoomCore::removeModerator(const Plat_Unicode::String &name, } } - if(iter != m_moderatorAvatars.end()) + if (iter != m_moderatorAvatars.end()) { - delete (*iter); - m_moderatorAvatars.erase(iter); + returnAvatar = (*iter); } + return(returnAvatar); } - // pass back the ChatAvatarCore and let caller delete it (b/c he created it). - return(returnAvatar); -} - -ChatAvatarCore *ChatRoomCore::addTempModerator(ChatAvatarCore *newAvatar) -{ - ChatAvatarCore *returnAvatar = nullptr; - - if(newAvatar) + ChatAvatarCore *ChatRoomCore::getBannedCore(const Plat_Unicode::String &name, const Plat_Unicode::String &address) { - pair< set::iterator, bool > result; + ChatAvatarCore *returnAvatar = nullptr; - result = this->m_tempModeratorAvatarsCore.insert(newAvatar); - - // if add of ChatAvatarCore works, add a new ChatAvatar also. - if (result.second == true) + set::iterator iterCore = m_banAvatarsCore.begin(); + + for (; iterCore != m_banAvatarsCore.end(); ++iterCore) { - ChatAvatar *avatar = newAvatar->getNewChatAvatar(); - - m_tempModeratorAvatars.insert(avatar); - - returnAvatar = newAvatar; + ChatAvatarCore *avatarCore = (*iterCore); + if (caseInsensitiveCompare(name, avatarCore->getName()) && + caseInsensitiveCompare(address, avatarCore->getAddress(), true)) + { + break; + } } - } - - return returnAvatar; -} -ChatAvatarCore *ChatRoomCore::removeTempModerator(const Plat_Unicode::String &name, const Plat_Unicode::String &address) -{ - ChatAvatarCore *returnAvatar = nullptr; - - set::iterator iterCore = m_tempModeratorAvatarsCore.begin(); - - for(; iterCore != m_tempModeratorAvatarsCore.end(); ++iterCore) - { - ChatAvatarCore *avatarCore = (*iterCore); - if (caseInsensitiveCompare(name, avatarCore->getName()) && - caseInsensitiveCompare(address, avatarCore->getAddress(), true)) + if (iterCore != m_banAvatarsCore.end()) { - break; + returnAvatar = (*iterCore); } + return(returnAvatar); } - if(iterCore != m_tempModeratorAvatarsCore.end()) + ChatAvatar *ChatRoomCore::getBanned(const Plat_Unicode::String &name, const Plat_Unicode::String &address) { - // remove ChatAvatarCore and ChatAvatar objects. - returnAvatar = (*iterCore); - m_tempModeratorAvatarsCore.erase(iterCore); + ChatAvatar *returnAvatar = nullptr; - // because the addBan() made the ChatAvatar, removeBan() deletes it. - set::iterator iter = m_tempModeratorAvatars.begin(); + set::iterator iter = m_banAvatars.begin(); - for(; iter != m_tempModeratorAvatars.end(); ++iter) + for (; iter != m_banAvatars.end(); ++iter) { ChatAvatar *avatar = (*iter); Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); @@ -672,67 +304,43 @@ ChatAvatarCore *ChatRoomCore::removeTempModerator(const Plat_Unicode::String &na } } - if(iter != m_tempModeratorAvatars.end()) + if (iter != m_banAvatars.end()) { - delete (*iter); - m_tempModeratorAvatars.erase(iter); + returnAvatar = (*iter); } + return(returnAvatar); } - // pass back the ChatAvatarCore and let caller delete it (b/c he created it). - return(returnAvatar); -} - -ChatAvatarCore *ChatRoomCore::addInvite(ChatAvatarCore* newAvatar) -{ - ChatAvatarCore *returnAvatar = nullptr; - - if(newAvatar) + ChatAvatarCore *ChatRoomCore::getInvitedCore(const Plat_Unicode::String &name, const Plat_Unicode::String &address) { - pair< set::iterator, bool > result; + ChatAvatarCore *returnAvatar = nullptr; - result = m_inviteAvatarsCore.insert(newAvatar); - - // if add of ChatAvatarCore works, add a new ChatAvatar also. - if (result.second == true) + set::iterator iterCore = m_inviteAvatarsCore.begin(); + + for (; iterCore != m_inviteAvatarsCore.end(); ++iterCore) { - ChatAvatar *avatar = newAvatar->getNewChatAvatar(); - - m_inviteAvatars.insert(avatar); - - returnAvatar = newAvatar; + ChatAvatarCore *avatarCore = (*iterCore); + if (caseInsensitiveCompare(name, avatarCore->getName()) && + caseInsensitiveCompare(address, avatarCore->getAddress(), true)) + { + break; + } } - } - - return returnAvatar; -} -ChatAvatarCore *ChatRoomCore::removeInvite(const Plat_Unicode::String &name, const Plat_Unicode::String &address) -{ - ChatAvatarCore *returnAvatar = nullptr; - - set::iterator iterCore = m_inviteAvatarsCore.begin(); - - for(; iterCore != m_inviteAvatarsCore.end(); ++iterCore) - { - ChatAvatarCore *avatarCore = (*iterCore); - if (caseInsensitiveCompare(name, avatarCore->getName()) && - caseInsensitiveCompare(address, avatarCore->getAddress(), true)) + if (iterCore != m_inviteAvatarsCore.end()) { - break; + returnAvatar = (*iterCore); } + return(returnAvatar); } - if(iterCore != m_inviteAvatarsCore.end()) + ChatAvatar *ChatRoomCore::getInvited(const Plat_Unicode::String &name, const Plat_Unicode::String &address) { - // remove ChatAvatarCore and ChatAvatar objects. - returnAvatar = (*iterCore); - m_inviteAvatarsCore.erase(iterCore); + ChatAvatar *returnAvatar = nullptr; - // because the addBan() made the ChatAvatar, removeBan() deletes it. set::iterator iter = m_inviteAvatars.begin(); - for(; iter != m_inviteAvatars.end(); ++iter) + for (; iter != m_inviteAvatars.end(); ++iter) { ChatAvatar *avatar = (*iter); Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); @@ -744,67 +352,551 @@ ChatAvatarCore *ChatRoomCore::removeInvite(const Plat_Unicode::String &name, con } } - if(iter != m_inviteAvatars.end()) + if (iter != m_inviteAvatars.end()) { - delete (*iter); - m_inviteAvatars.erase(iter); + returnAvatar = (*iter); } + return(returnAvatar); } - // pass back the ChatAvatarCore and let caller delete it (b/c he created it). - return(returnAvatar); -} - -ChatAvatarCore *ChatRoomCore::addVoice(ChatAvatarCore* newAvatar) -{ - ChatAvatarCore *returnAvatar = nullptr; - - if(newAvatar) + ChatAvatarCore *ChatRoomCore::addAvatar(ChatAvatarCore *newAvatar, bool local) { - pair< set::iterator, bool > result; + ChatAvatarCore *returnAvatar = nullptr; - result = m_voiceAvatarsCore.insert(newAvatar); - - // if add of ChatAvatarCore works, add a new ChatAvatar also. - if (result.second == true) + if (newAvatar) { - ChatAvatar *avatar = newAvatar->getNewChatAvatar(); + pair< map::iterator, bool > result; - m_voiceAvatars.insert(avatar); + result = m_inroomAvatarsCore.insert(pair(newAvatar->getAvatarID(), newAvatar)); - returnAvatar = newAvatar; + // if add of ChatAvatarCore works, add a new ChatAvatar also. + if (result.second == true) + { + ChatAvatar *avatar = newAvatar->getNewChatAvatar(); + + m_inroomAvatars.insert(pair(avatar->getAvatarID(), avatar)); + + // keep track of avatars connected to this API that are in room + if (local) + { + m_inroomAvatarsLocal.insert(newAvatar->getAvatarID()); + } + + returnAvatar = newAvatar; + } } - } - - return returnAvatar; -} -ChatAvatarCore *ChatRoomCore::removeVoice(const Plat_Unicode::String &name, const Plat_Unicode::String &address) -{ - ChatAvatarCore *returnAvatar = nullptr; - - set::iterator iterCore = m_voiceAvatarsCore.begin(); - - for(; iterCore != m_voiceAvatarsCore.end(); ++iterCore) - { - ChatAvatarCore *avatarCore = (*iterCore); - if (caseInsensitiveCompare(name, avatarCore->getName()) && - caseInsensitiveCompare(address, avatarCore->getAddress(), true)) - { - break; - } + return returnAvatar; } - if(iterCore != m_voiceAvatarsCore.end()) + void ChatRoomCore::addLocalAvatar(unsigned avatarID) { - // remove ChatAvatarCore and ChatAvatar objects. - returnAvatar = (*iterCore); - m_voiceAvatarsCore.erase(iterCore); + m_inroomAvatarsLocal.insert(avatarID); + } - // because the addBan() made the ChatAvatar, removeBan() deletes it. - set::iterator iter = m_voiceAvatars.begin(); + ChatAvatarCore *ChatRoomCore::removeAvatar(unsigned avatarID) + { + ChatAvatarCore *returnAvatar = nullptr; - for(; iter != m_voiceAvatars.end(); ++iter) + map::iterator iterCore = m_inroomAvatarsCore.find(avatarID); + + if (iterCore != m_inroomAvatarsCore.end()) + { + // remove ChatAvatarCore and ChatAvatar objects. + returnAvatar = (*iterCore).second; + + m_inroomAvatarsCore.erase(iterCore); + + // because the addAvatar() made the ChatAvatar, removeAvatar() deletes it. + map::iterator iter = m_inroomAvatars.find(avatarID); + delete (*iter).second; + m_inroomAvatars.erase(avatarID); + + // remove from cache of local API avatars logged into this room, if nec. + std::set::iterator localIter = m_inroomAvatarsLocal.find(avatarID); + if (localIter != m_inroomAvatarsLocal.end()) + m_inroomAvatarsLocal.erase(localIter); + } + + // pass back the ChatAvatarCore and let caller delete it (b/c he created it). + return(returnAvatar); + } + + ChatAvatarCore *ChatRoomCore::addBan(ChatAvatarCore *newAvatar) + { + ChatAvatarCore *returnAvatar = nullptr; + + if (newAvatar) + { + pair< set::iterator, bool > result; + + result = m_banAvatarsCore.insert(newAvatar); + + // if add of ChatAvatarCore works, add a new ChatAvatar also. + if (result.second == true) + { + ChatAvatar *avatar = newAvatar->getNewChatAvatar(); + + m_banAvatars.insert(avatar); + + returnAvatar = newAvatar; + } + } + + return returnAvatar; + } + + ChatAvatarCore *ChatRoomCore::removeBan(const Plat_Unicode::String &name, const Plat_Unicode::String &address) + { + ChatAvatarCore *returnAvatar = nullptr; + + set::iterator iterCore = m_banAvatarsCore.begin(); + + for (; iterCore != m_banAvatarsCore.end(); ++iterCore) + { + ChatAvatarCore *avatarCore = (*iterCore); + if (caseInsensitiveCompare(name, avatarCore->getName()) && + caseInsensitiveCompare(address, avatarCore->getAddress(), true)) + { + break; + } + } + + if (iterCore != m_banAvatarsCore.end()) + { + // remove ChatAvatarCore and ChatAvatar objects. + returnAvatar = (*iterCore); + m_banAvatarsCore.erase(iterCore); + + // because the addBan() made the ChatAvatar, removeBan() deletes it. + set::iterator iter = m_banAvatars.begin(); + + for (; iter != m_banAvatars.end(); ++iter) + { + ChatAvatar *avatar = (*iter); + Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); + Plat_Unicode::String avatarAddress(avatar->getAddress().string_data, avatar->getAddress().string_length); + if (caseInsensitiveCompare(name, avatarName) && + caseInsensitiveCompare(address, avatarAddress, true)) + { + break; + } + } + + if (iter != m_banAvatars.end()) + { + delete (*iter); + m_banAvatars.erase(iter); + } + } + + // pass back the ChatAvatarCore and let caller delete it (b/c he created it). + return(returnAvatar); + } + + ChatAvatarCore *ChatRoomCore::addAdministrator(ChatAvatarCore *newAvatar) + { + ChatAvatarCore *returnAvatar = nullptr; + + if (newAvatar) + { + pair< map::iterator, bool > result; + + result = this->m_adminAvatarsCore.insert(pair(newAvatar->getAvatarID(), newAvatar)); + + // if add of ChatAvatarCore works, add a new ChatAvatar also. + if (result.second == true) + { + ChatAvatar *avatar = newAvatar->getNewChatAvatar(); + + m_adminAvatars.insert(pair(avatar->getAvatarID(), avatar)); + + returnAvatar = newAvatar; + } + } + + return returnAvatar; + } + + ChatAvatarCore *ChatRoomCore::removeAdministrator(unsigned avatarID) + { + ChatAvatarCore *returnAvatar = nullptr; + + map::iterator iterCore = m_adminAvatarsCore.find(avatarID); + + if (iterCore != m_adminAvatarsCore.end()) + { + // remove ChatAvatarCore and ChatAvatar objects. + returnAvatar = (*iterCore).second; + + m_adminAvatarsCore.erase(iterCore); + + // because the addAvatar() made the ChatAvatar, removeAvatar() deletes it. + map::iterator iter = m_adminAvatars.find(avatarID); + delete (*iter).second; + m_adminAvatars.erase(avatarID); + } + + // pass back the ChatAvatarCore and let caller delete it (b/c he created it). + return(returnAvatar); + } + + ChatAvatarCore *ChatRoomCore::addModerator(ChatAvatarCore *newAvatar) + { + ChatAvatarCore *returnAvatar = nullptr; + + if (newAvatar) + { + pair< set::iterator, bool > result; + + result = this->m_moderatorAvatarsCore.insert(newAvatar); + + // if add of ChatAvatarCore works, add a new ChatAvatar also. + if (result.second == true) + { + ChatAvatar *avatar = newAvatar->getNewChatAvatar(); + + m_moderatorAvatars.insert(avatar); + + returnAvatar = newAvatar; + } + } + + return returnAvatar; + } + + ChatAvatarCore *ChatRoomCore::removeModerator(const Plat_Unicode::String &name, const Plat_Unicode::String &address) + { + ChatAvatarCore *returnAvatar = nullptr; + + set::iterator iterCore = m_moderatorAvatarsCore.begin(); + + for (; iterCore != m_moderatorAvatarsCore.end(); ++iterCore) + { + ChatAvatarCore *avatarCore = (*iterCore); + if (caseInsensitiveCompare(name, avatarCore->getName()) && + caseInsensitiveCompare(address, avatarCore->getAddress(), true)) + { + break; + } + } + + if (iterCore != m_moderatorAvatarsCore.end()) + { + // remove ChatAvatarCore and ChatAvatar objects. + returnAvatar = (*iterCore); + m_moderatorAvatarsCore.erase(iterCore); + + // because the addBan() made the ChatAvatar, removeBan() deletes it. + set::iterator iter = m_moderatorAvatars.begin(); + + for (; iter != m_moderatorAvatars.end(); ++iter) + { + ChatAvatar *avatar = (*iter); + Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); + Plat_Unicode::String avatarAddress(avatar->getAddress().string_data, avatar->getAddress().string_length); + if (caseInsensitiveCompare(name, avatarName) && + caseInsensitiveCompare(address, avatarAddress, true)) + { + break; + } + } + + if (iter != m_moderatorAvatars.end()) + { + delete (*iter); + m_moderatorAvatars.erase(iter); + } + } + + // pass back the ChatAvatarCore and let caller delete it (b/c he created it). + return(returnAvatar); + } + + ChatAvatarCore *ChatRoomCore::addTempModerator(ChatAvatarCore *newAvatar) + { + ChatAvatarCore *returnAvatar = nullptr; + + if (newAvatar) + { + pair< set::iterator, bool > result; + + result = this->m_tempModeratorAvatarsCore.insert(newAvatar); + + // if add of ChatAvatarCore works, add a new ChatAvatar also. + if (result.second == true) + { + ChatAvatar *avatar = newAvatar->getNewChatAvatar(); + + m_tempModeratorAvatars.insert(avatar); + + returnAvatar = newAvatar; + } + } + + return returnAvatar; + } + + ChatAvatarCore *ChatRoomCore::removeTempModerator(const Plat_Unicode::String &name, const Plat_Unicode::String &address) + { + ChatAvatarCore *returnAvatar = nullptr; + + set::iterator iterCore = m_tempModeratorAvatarsCore.begin(); + + for (; iterCore != m_tempModeratorAvatarsCore.end(); ++iterCore) + { + ChatAvatarCore *avatarCore = (*iterCore); + if (caseInsensitiveCompare(name, avatarCore->getName()) && + caseInsensitiveCompare(address, avatarCore->getAddress(), true)) + { + break; + } + } + + if (iterCore != m_tempModeratorAvatarsCore.end()) + { + // remove ChatAvatarCore and ChatAvatar objects. + returnAvatar = (*iterCore); + m_tempModeratorAvatarsCore.erase(iterCore); + + // because the addBan() made the ChatAvatar, removeBan() deletes it. + set::iterator iter = m_tempModeratorAvatars.begin(); + + for (; iter != m_tempModeratorAvatars.end(); ++iter) + { + ChatAvatar *avatar = (*iter); + Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); + Plat_Unicode::String avatarAddress(avatar->getAddress().string_data, avatar->getAddress().string_length); + if (caseInsensitiveCompare(name, avatarName) && + caseInsensitiveCompare(address, avatarAddress, true)) + { + break; + } + } + + if (iter != m_tempModeratorAvatars.end()) + { + delete (*iter); + m_tempModeratorAvatars.erase(iter); + } + } + + // pass back the ChatAvatarCore and let caller delete it (b/c he created it). + return(returnAvatar); + } + + ChatAvatarCore *ChatRoomCore::addInvite(ChatAvatarCore* newAvatar) + { + ChatAvatarCore *returnAvatar = nullptr; + + if (newAvatar) + { + pair< set::iterator, bool > result; + + result = m_inviteAvatarsCore.insert(newAvatar); + + // if add of ChatAvatarCore works, add a new ChatAvatar also. + if (result.second == true) + { + ChatAvatar *avatar = newAvatar->getNewChatAvatar(); + + m_inviteAvatars.insert(avatar); + + returnAvatar = newAvatar; + } + } + + return returnAvatar; + } + + ChatAvatarCore *ChatRoomCore::removeInvite(const Plat_Unicode::String &name, const Plat_Unicode::String &address) + { + ChatAvatarCore *returnAvatar = nullptr; + + set::iterator iterCore = m_inviteAvatarsCore.begin(); + + for (; iterCore != m_inviteAvatarsCore.end(); ++iterCore) + { + ChatAvatarCore *avatarCore = (*iterCore); + if (caseInsensitiveCompare(name, avatarCore->getName()) && + caseInsensitiveCompare(address, avatarCore->getAddress(), true)) + { + break; + } + } + + if (iterCore != m_inviteAvatarsCore.end()) + { + // remove ChatAvatarCore and ChatAvatar objects. + returnAvatar = (*iterCore); + m_inviteAvatarsCore.erase(iterCore); + + // because the addBan() made the ChatAvatar, removeBan() deletes it. + set::iterator iter = m_inviteAvatars.begin(); + + for (; iter != m_inviteAvatars.end(); ++iter) + { + ChatAvatar *avatar = (*iter); + Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); + Plat_Unicode::String avatarAddress(avatar->getAddress().string_data, avatar->getAddress().string_length); + if (caseInsensitiveCompare(name, avatarName) && + caseInsensitiveCompare(address, avatarAddress, true)) + { + break; + } + } + + if (iter != m_inviteAvatars.end()) + { + delete (*iter); + m_inviteAvatars.erase(iter); + } + } + + // pass back the ChatAvatarCore and let caller delete it (b/c he created it). + return(returnAvatar); + } + + ChatAvatarCore *ChatRoomCore::addVoice(ChatAvatarCore* newAvatar) + { + ChatAvatarCore *returnAvatar = nullptr; + + if (newAvatar) + { + pair< set::iterator, bool > result; + + result = m_voiceAvatarsCore.insert(newAvatar); + + // if add of ChatAvatarCore works, add a new ChatAvatar also. + if (result.second == true) + { + ChatAvatar *avatar = newAvatar->getNewChatAvatar(); + + m_voiceAvatars.insert(avatar); + + returnAvatar = newAvatar; + } + } + + return returnAvatar; + } + + ChatAvatarCore *ChatRoomCore::removeVoice(const Plat_Unicode::String &name, const Plat_Unicode::String &address) + { + ChatAvatarCore *returnAvatar = nullptr; + + set::iterator iterCore = m_voiceAvatarsCore.begin(); + + for (; iterCore != m_voiceAvatarsCore.end(); ++iterCore) + { + ChatAvatarCore *avatarCore = (*iterCore); + if (caseInsensitiveCompare(name, avatarCore->getName()) && + caseInsensitiveCompare(address, avatarCore->getAddress(), true)) + { + break; + } + } + + if (iterCore != m_voiceAvatarsCore.end()) + { + // remove ChatAvatarCore and ChatAvatar objects. + returnAvatar = (*iterCore); + m_voiceAvatarsCore.erase(iterCore); + + // because the addBan() made the ChatAvatar, removeBan() deletes it. + set::iterator iter = m_voiceAvatars.begin(); + + for (; iter != m_voiceAvatars.end(); ++iter) + { + ChatAvatar *avatar = (*iter); + Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); + Plat_Unicode::String avatarAddress(avatar->getAddress().string_data, avatar->getAddress().string_length); + if (caseInsensitiveCompare(name, avatarName) && + caseInsensitiveCompare(address, avatarAddress, true)) + { + break; + } + } + + if (iter != m_voiceAvatars.end()) + { + delete (*iter); + m_voiceAvatars.erase(iter); + } + } + + // pass back the ChatAvatarCore and let caller delete it (b/c he created it). + return(returnAvatar); + } + + // ------- ChatRoom class support functions + + unsigned ChatRoomCore::getAvatarCount() const + { + return m_inroomAvatarsCore.size(); + } + + unsigned ChatRoomCore::getBanCount() const + { + return m_banAvatarsCore.size(); + } + + unsigned ChatRoomCore::getInviteCount() const + { + return m_inviteAvatarsCore.size(); + } + + unsigned ChatRoomCore::getModeratorCount() const + { + return m_moderatorAvatarsCore.size(); + } + + unsigned ChatRoomCore::getTemporaryModeratorCount() const + { + return m_tempModeratorAvatarsCore.size(); + } + + unsigned ChatRoomCore::getVoiceCount() const + { + return m_voiceAvatarsCore.size(); + } + + AvatarIteratorCore ChatRoomCore::getFirstAvatar() + { + return (AvatarIteratorCore(&m_inroomAvatars, m_inroomAvatars.begin())); + } + + AvatarIteratorCore ChatRoomCore::findAvatar(unsigned avatarID) + { + return (AvatarIteratorCore(&m_inroomAvatars, m_inroomAvatars.find(avatarID))); + } + + AvatarIteratorCore ChatRoomCore::findAvatar(const String &name, const String &address) + { + map::iterator iter; + + for (iter = m_inroomAvatars.begin(); iter != m_inroomAvatars.end(); ++iter) + { + if (String((*iter).second->getName().string_data, (*iter).second->getName().string_length) == name && + String((*iter).second->getAddress().string_data, (*iter).second->getAddress().string_length) == address) + { + break; + } + } + + return (AvatarIteratorCore(&m_inroomAvatars, iter)); + } + + ModeratorIteratorCore ChatRoomCore::getFirstModerator() + { + return (ModeratorIteratorCore(&m_moderatorAvatars, m_moderatorAvatars.begin())); + } + + ModeratorIteratorCore ChatRoomCore::findModerator(const String &name, const String &address) + { + set::iterator iter; + + for (iter = m_moderatorAvatars.begin(); iter != m_moderatorAvatars.end(); ++iter) { ChatAvatar *avatar = (*iter); Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); @@ -816,328 +908,235 @@ ChatAvatarCore *ChatRoomCore::removeVoice(const Plat_Unicode::String &name, cons } } - if(iter != m_voiceAvatars.end()) + return (ModeratorIteratorCore(&m_moderatorAvatars, iter)); + } + + TemporaryModeratorIteratorCore ChatRoomCore::getFirstTemporaryModerator() + { + return (TemporaryModeratorIteratorCore(&m_tempModeratorAvatars, m_tempModeratorAvatars.begin())); + } + + TemporaryModeratorIteratorCore ChatRoomCore::findTemporaryModerator(const String &name, const String &address) + { + set::iterator iter; + + for (iter = m_tempModeratorAvatars.begin(); iter != m_tempModeratorAvatars.end(); ++iter) { - delete (*iter); - m_voiceAvatars.erase(iter); + ChatAvatar *avatar = (*iter); + Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); + Plat_Unicode::String avatarAddress(avatar->getAddress().string_data, avatar->getAddress().string_length); + if (caseInsensitiveCompare(name, avatarName) && + caseInsensitiveCompare(address, avatarAddress, true)) + { + break; + } } + + return (TemporaryModeratorIteratorCore(&m_tempModeratorAvatars, iter)); } - // pass back the ChatAvatarCore and let caller delete it (b/c he created it). - return(returnAvatar); -} - -// ------- ChatRoom class support functions - - -unsigned ChatRoomCore::getAvatarCount() const -{ - return m_inroomAvatarsCore.size(); -} - -unsigned ChatRoomCore::getBanCount() const -{ - return m_banAvatarsCore.size(); -} - -unsigned ChatRoomCore::getInviteCount() const -{ - return m_inviteAvatarsCore.size(); -} - -unsigned ChatRoomCore::getModeratorCount() const -{ - return m_moderatorAvatarsCore.size(); -} - -unsigned ChatRoomCore::getTemporaryModeratorCount() const -{ - return m_tempModeratorAvatarsCore.size(); -} - -unsigned ChatRoomCore::getVoiceCount() const -{ - return m_voiceAvatarsCore.size(); -} - -AvatarIteratorCore ChatRoomCore::getFirstAvatar() -{ - return (AvatarIteratorCore(&m_inroomAvatars, m_inroomAvatars.begin())); -} - -AvatarIteratorCore ChatRoomCore::findAvatar(unsigned avatarID) -{ - return (AvatarIteratorCore(&m_inroomAvatars, m_inroomAvatars.find(avatarID))); -} - -AvatarIteratorCore ChatRoomCore::findAvatar(const String &name, const String &address) -{ - map::iterator iter; - - for (iter = m_inroomAvatars.begin(); iter != m_inroomAvatars.end(); ++iter) + BanIteratorCore ChatRoomCore::getFirstBanned() { - if(String((*iter).second->getName().string_data, (*iter).second->getName().string_length) == name && - String((*iter).second->getAddress().string_data, (*iter).second->getAddress().string_length) == address) + return (BanIteratorCore(&m_banAvatars, m_banAvatars.begin())); + } + + BanIteratorCore ChatRoomCore::findBanned(const String &name, const String &address) + { + set::iterator iter; + + for (iter = m_banAvatars.begin(); iter != m_banAvatars.end(); ++iter) { - break; + ChatAvatar *avatar = (*iter); + Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); + Plat_Unicode::String avatarAddress(avatar->getAddress().string_data, avatar->getAddress().string_length); + if (caseInsensitiveCompare(name, avatarName) && + caseInsensitiveCompare(address, avatarAddress, true)) + { + break; + } } + + return (BanIteratorCore(&m_banAvatars, iter)); } - return (AvatarIteratorCore(&m_inroomAvatars, iter)); -} - -ModeratorIteratorCore ChatRoomCore::getFirstModerator() -{ - return (ModeratorIteratorCore(&m_moderatorAvatars, m_moderatorAvatars.begin())); -} - -ModeratorIteratorCore ChatRoomCore::findModerator(const String &name, const String &address) -{ - set::iterator iter; - - for (iter = m_moderatorAvatars.begin(); iter != m_moderatorAvatars.end(); ++iter) + InviteIteratorCore ChatRoomCore::getFirstInvited() { - ChatAvatar *avatar = (*iter); - Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); - Plat_Unicode::String avatarAddress(avatar->getAddress().string_data, avatar->getAddress().string_length); - if (caseInsensitiveCompare(name, avatarName) && - caseInsensitiveCompare(address, avatarAddress, true)) + return (InviteIteratorCore(&m_inviteAvatars, m_inviteAvatars.begin())); + } + + InviteIteratorCore ChatRoomCore::findInvited(const String &name, const String &address) + { + set::iterator iter; + + for (iter = m_inviteAvatars.begin(); iter != m_inviteAvatars.end(); ++iter) { - break; + ChatAvatar *avatar = (*iter); + Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); + Plat_Unicode::String avatarAddress(avatar->getAddress().string_data, avatar->getAddress().string_length); + if (caseInsensitiveCompare(name, avatarName) && + caseInsensitiveCompare(address, avatarAddress, true)) + { + break; + } } + + return (InviteIteratorCore(&m_inviteAvatars, iter)); } - return (ModeratorIteratorCore(&m_moderatorAvatars, iter)); -} - -TemporaryModeratorIteratorCore ChatRoomCore::getFirstTemporaryModerator() -{ - return (TemporaryModeratorIteratorCore(&m_tempModeratorAvatars, m_tempModeratorAvatars.begin())); -} - -TemporaryModeratorIteratorCore ChatRoomCore::findTemporaryModerator(const String &name, const String &address) -{ - set::iterator iter; - - for (iter = m_tempModeratorAvatars.begin(); iter != m_tempModeratorAvatars.end(); ++iter) + VoiceIteratorCore ChatRoomCore::getFirstVoice() { - ChatAvatar *avatar = (*iter); - Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); - Plat_Unicode::String avatarAddress(avatar->getAddress().string_data, avatar->getAddress().string_length); - if (caseInsensitiveCompare(name, avatarName) && - caseInsensitiveCompare(address, avatarAddress, true)) + return (VoiceIteratorCore(&m_voiceAvatars, m_voiceAvatars.begin())); + } + + VoiceIteratorCore ChatRoomCore::findVoice(const String &name, const String &address) + { + set::iterator iter; + + for (iter = m_voiceAvatars.begin(); iter != m_voiceAvatars.end(); ++iter) { - break; + ChatAvatar *avatar = (*iter); + Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); + Plat_Unicode::String avatarAddress(avatar->getAddress().string_data, avatar->getAddress().string_length); + if (caseInsensitiveCompare(name, avatarName) && + caseInsensitiveCompare(address, avatarAddress, true)) + { + break; + } } + + return (VoiceIteratorCore(&m_voiceAvatars, iter)); } - return (TemporaryModeratorIteratorCore(&m_tempModeratorAvatars, iter)); -} - -BanIteratorCore ChatRoomCore::getFirstBanned() -{ - return (BanIteratorCore(&m_banAvatars, m_banAvatars.begin())); -} - -BanIteratorCore ChatRoomCore::findBanned(const String &name, const String &address) -{ - set::iterator iter; - - for (iter = m_banAvatars.begin(); iter != m_banAvatars.end(); ++iter) + void ChatRoomCore::serializeWithLocalAvatarsOnly(Base::ByteStream &msg) { - ChatAvatar *avatar = (*iter); - Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); - Plat_Unicode::String avatarAddress(avatar->getAddress().string_data, avatar->getAddress().string_length); - if (caseInsensitiveCompare(name, avatarName) && - caseInsensitiveCompare(address, avatarAddress, true)) + // put creator name + put(msg, m_creatorName); + + // put creator address + put(msg, m_creatorAddress); + + // put creator ID + put(msg, m_creatorID); + + // put room name + put(msg, m_roomName); + + // put room topic + put(msg, m_roomTopic); + + // put room password + put(msg, m_roomPassword); + + // put room prefix + put(msg, m_roomPrefix); + + // put room address + put(msg, m_roomAddress); + + // put room attributes + put(msg, m_roomAttributes); + + // put room max size + put(msg, m_maxRoomSize); + + // put room ID + put(msg, m_roomID); + + // put room creation time + put(msg, m_createTime); + + // put in-room avatars + unsigned avatarCount = m_inroomAvatarsCore.size(); + + std::map::iterator avatarIter; + std::set avatarsToSend; + + for (avatarIter = m_inroomAvatarsCore.begin(); avatarIter != m_inroomAvatarsCore.end(); ++avatarIter) { - break; + // include only the avatars that are on this API + if (this->getAvatar((*avatarIter).second->getAvatarID()) != nullptr) + { + avatarsToSend.insert((*avatarIter).second); + } } - } - return (BanIteratorCore(&m_banAvatars, iter)); -} + // actually send avatars from this API *after* they have been counted + avatarCount = avatarsToSend.size(); + put(msg, avatarCount); -InviteIteratorCore ChatRoomCore::getFirstInvited() -{ - return (InviteIteratorCore(&m_inviteAvatars, m_inviteAvatars.begin())); -} - -InviteIteratorCore ChatRoomCore::findInvited(const String &name, const String &address) -{ - set::iterator iter; - - for (iter = m_inviteAvatars.begin(); iter != m_inviteAvatars.end(); ++iter) - { - ChatAvatar *avatar = (*iter); - Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); - Plat_Unicode::String avatarAddress(avatar->getAddress().string_data, avatar->getAddress().string_length); - if (caseInsensitiveCompare(name, avatarName) && - caseInsensitiveCompare(address, avatarAddress, true)) + std::set::iterator sendIter; + for (sendIter = avatarsToSend.begin(); sendIter != avatarsToSend.end(); ++sendIter) { - break; + (*sendIter)->serialize(msg); } - } - return (InviteIteratorCore(&m_inviteAvatars, iter)); -} + // put administrator avatars + unsigned administratorCount = m_adminAvatarsCore.size(); + put(msg, administratorCount); -VoiceIteratorCore ChatRoomCore::getFirstVoice() -{ - return (VoiceIteratorCore(&m_voiceAvatars, m_voiceAvatars.begin())); -} - -VoiceIteratorCore ChatRoomCore::findVoice(const String &name, const String &address) -{ - set::iterator iter; - - for (iter = m_voiceAvatars.begin(); iter != m_voiceAvatars.end(); ++iter) - { - ChatAvatar *avatar = (*iter); - Plat_Unicode::String avatarName(avatar->getName().string_data, avatar->getName().string_length); - Plat_Unicode::String avatarAddress(avatar->getAddress().string_data, avatar->getAddress().string_length); - if (caseInsensitiveCompare(name, avatarName) && - caseInsensitiveCompare(address, avatarAddress, true)) + std::map::iterator adminIter; + for (adminIter = m_adminAvatarsCore.begin(); adminIter != m_adminAvatarsCore.end(); ++adminIter) { - break; + (*adminIter).second->serialize(msg); } - } - return (VoiceIteratorCore(&m_voiceAvatars, iter)); -} + // put moderator avatars + unsigned moderatorCount = m_moderatorAvatarsCore.size(); + put(msg, moderatorCount); -void ChatRoomCore::serializeWithLocalAvatarsOnly(Base::ByteStream &msg) -{ - // put creator name - put(msg, m_creatorName); - - // put creator address - put(msg, m_creatorAddress); - - // put creator ID - put(msg, m_creatorID); - - // put room name - put(msg, m_roomName); - - // put room topic - put(msg, m_roomTopic); - - // put room password - put(msg, m_roomPassword); - - // put room prefix - put(msg, m_roomPrefix); - - // put room address - put(msg, m_roomAddress); - - // put room attributes - put(msg, m_roomAttributes); - - // put room max size - put(msg, m_maxRoomSize); - - // put room ID - put(msg, m_roomID); - - // put room creation time - put(msg, m_createTime); - - // put in-room avatars - unsigned avatarCount = m_inroomAvatarsCore.size(); - - std::map::iterator avatarIter; - std::set avatarsToSend; - - for (avatarIter = m_inroomAvatarsCore.begin(); avatarIter != m_inroomAvatarsCore.end(); ++avatarIter) - { - // include only the avatars that are on this API - if ( this->getAvatar((*avatarIter).second->getAvatarID()) != nullptr ) + std::set::iterator moderatorIter; + for (moderatorIter = m_moderatorAvatarsCore.begin(); moderatorIter != m_moderatorAvatarsCore.end(); ++moderatorIter) { - avatarsToSend.insert((*avatarIter).second); + (*moderatorIter)->serialize(msg); } + + // put temporary moderator avatars + unsigned tempModeratorCount = m_tempModeratorAvatarsCore.size(); + put(msg, tempModeratorCount); + + std::set::iterator tempModeratorIter; + for (tempModeratorIter = m_tempModeratorAvatarsCore.begin(); tempModeratorIter != m_tempModeratorAvatarsCore.end(); ++tempModeratorIter) + { + (*tempModeratorIter)->serialize(msg); + } + + // put banned avatars + unsigned bannedCount = m_banAvatarsCore.size(); + put(msg, bannedCount); + + std::set::iterator bannedIter; + for (bannedIter = m_banAvatarsCore.begin(); bannedIter != m_banAvatarsCore.end(); ++bannedIter) + { + (*bannedIter)->serialize(msg); + } + + // put invited avatars + unsigned invitedCount = m_inviteAvatarsCore.size(); + put(msg, invitedCount); + + std::set::iterator invitesIter; + for (invitesIter = m_inviteAvatarsCore.begin(); invitesIter != m_inviteAvatarsCore.end(); ++invitesIter) + { + (*invitesIter)->serialize(msg); + } + + // put voice avatars + unsigned voiceCount = m_voiceAvatarsCore.size(); + put(msg, voiceCount); + + std::set::iterator voicesIter; + for (voicesIter = m_voiceAvatarsCore.begin(); voicesIter != m_voiceAvatarsCore.end(); ++voicesIter) + { + (*voicesIter)->serialize(msg); + } + + put(msg, m_roomMessageID); } - // actually send avatars from this API *after* they have been counted - avatarCount = avatarsToSend.size(); - put(msg, avatarCount); - - std::set::iterator sendIter; - for (sendIter = avatarsToSend.begin(); sendIter != avatarsToSend.end(); ++sendIter) + void ChatRoomCore::setCreator(unsigned creatorID, const Plat_Unicode::String &creatorName, const Plat_Unicode::String &creatorAddress) { - (*sendIter)->serialize(msg); + m_creatorID = creatorID; + m_creatorName = creatorName; + m_creatorAddress = creatorAddress; } - - // put administrator avatars - unsigned administratorCount = m_adminAvatarsCore.size(); - put(msg, administratorCount); - - std::map::iterator adminIter; - for (adminIter = m_adminAvatarsCore.begin(); adminIter != m_adminAvatarsCore.end(); ++adminIter) - { - (*adminIter).second->serialize(msg); - } - - // put moderator avatars - unsigned moderatorCount = m_moderatorAvatarsCore.size(); - put(msg, moderatorCount); - - std::set::iterator moderatorIter; - for (moderatorIter = m_moderatorAvatarsCore.begin(); moderatorIter != m_moderatorAvatarsCore.end(); ++moderatorIter) - { - (*moderatorIter)->serialize(msg); - } - - // put temporary moderator avatars - unsigned tempModeratorCount = m_tempModeratorAvatarsCore.size(); - put(msg, tempModeratorCount); - - std::set::iterator tempModeratorIter; - for (tempModeratorIter = m_tempModeratorAvatarsCore.begin(); tempModeratorIter != m_tempModeratorAvatarsCore.end(); ++tempModeratorIter) - { - (*tempModeratorIter)->serialize(msg); - } - - // put banned avatars - unsigned bannedCount = m_banAvatarsCore.size(); - put(msg, bannedCount); - - std::set::iterator bannedIter; - for (bannedIter = m_banAvatarsCore.begin(); bannedIter != m_banAvatarsCore.end(); ++bannedIter) - { - (*bannedIter)->serialize(msg); - } - - // put invited avatars - unsigned invitedCount = m_inviteAvatarsCore.size(); - put(msg, invitedCount); - - std::set::iterator invitesIter; - for (invitesIter = m_inviteAvatarsCore.begin(); invitesIter != m_inviteAvatarsCore.end(); ++invitesIter) - { - (*invitesIter)->serialize(msg); - } - - // put voice avatars - unsigned voiceCount = m_voiceAvatarsCore.size(); - put(msg, voiceCount); - - std::set::iterator voicesIter; - for (voicesIter = m_voiceAvatarsCore.begin(); voicesIter != m_voiceAvatarsCore.end(); ++voicesIter) - { - (*voicesIter)->serialize(msg); - } - - put(msg, m_roomMessageID); -} - -void ChatRoomCore::setCreator(unsigned creatorID, const Plat_Unicode::String &creatorName, const Plat_Unicode::String &creatorAddress) -{ - m_creatorID = creatorID; - m_creatorName = creatorName; - m_creatorAddress = creatorAddress; -} - -}; - +}; \ No newline at end of file diff --git a/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/Request.cpp b/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/Request.cpp index 2f7600ac..06b643bd 100644 --- a/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/Request.cpp +++ b/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/Request.cpp @@ -4,1572 +4,1567 @@ #include "ChatRoomCore.h" #include "PersistentMessage.h" -namespace ChatSystem +namespace ChatSystem { + using namespace Base; + using namespace Plat_Unicode; -using namespace Base; -using namespace Plat_Unicode; - -RLoginAvatar::RLoginAvatar(unsigned userID, const ChatUnicodeString &name, const ChatUnicodeString &address, const ChatUnicodeString &avatarLoginLocation, int avatarLoginPriority, int avatarLoginAttributes) -: GenericRequest(REQUEST_LOGINAVATAR), - m_userID(userID), - m_name(name.string_data, name.string_length), - m_address(address.string_data, address.string_length), - m_loginLocation(avatarLoginLocation.string_data, avatarLoginLocation.string_length), - m_loginPriority(avatarLoginPriority), - m_loginAttributes(avatarLoginAttributes) -{ -} - -void RLoginAvatar::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_userID); - put(msg, m_name); - put(msg, m_address); - put(msg, m_loginLocation); - put(msg, m_loginPriority); - put(msg, m_loginAttributes); -} - -RTemporaryAvatar::RTemporaryAvatar(unsigned userID, const ChatUnicodeString &name, const ChatUnicodeString &address, const ChatUnicodeString &avatarLoginLocation ) -: GenericRequest(REQUEST_TEMPORARYAVATAR), -m_userID(userID), -m_name(name.string_data, name.string_length), -m_address(address.string_data, address.string_length), -m_loginLocation(avatarLoginLocation.string_data, avatarLoginLocation.string_length) -{ -} - -void RTemporaryAvatar::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_userID); - put(msg, m_name); - put(msg, m_address); - put(msg, m_loginLocation); -} - -RLogoutAvatar::RLogoutAvatar(unsigned avatarID, const ChatUnicodeString & address) -: GenericRequest(REQUEST_LOGOUTAVATAR) -, m_avatarID(avatarID) -, m_address(address.string_data, address.string_length) -{ -} - -void RLogoutAvatar::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_avatarID); - put(msg, m_address); -} - -RDestroyAvatar::RDestroyAvatar(unsigned avatarID, const ChatUnicodeString & address) -: GenericRequest(REQUEST_DESTROYAVATAR) -, m_avatarID(avatarID) -, m_address(address.string_data, address.string_length) -{ -} - -void RDestroyAvatar::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_avatarID); - put(msg, m_address); -} - -RSetAvatarKeywords::RSetAvatarKeywords(unsigned srcAvatarID, const ChatUnicodeString *keywordsList, unsigned keywordsLength) -: GenericRequest(REQUEST_SETAVATARKEYWORDS), - m_srcAvatarID(srcAvatarID), - m_keywordsLength(keywordsLength) -{ - m_keywordsList = new String[keywordsLength]; - for(unsigned i = 0; i < keywordsLength; i++) + RLoginAvatar::RLoginAvatar(unsigned userID, const ChatUnicodeString &name, const ChatUnicodeString &address, const ChatUnicodeString &avatarLoginLocation, int avatarLoginPriority, int avatarLoginAttributes) + : GenericRequest(REQUEST_LOGINAVATAR), + m_userID(userID), + m_name(name.string_data, name.string_length), + m_address(address.string_data, address.string_length), + m_loginLocation(avatarLoginLocation.string_data, avatarLoginLocation.string_length), + m_loginPriority(avatarLoginPriority), + m_loginAttributes(avatarLoginAttributes) { - m_keywordsList[i].assign(keywordsList[i].string_data, keywordsList[i].string_length); - } -} - -RSetAvatarKeywords::~RSetAvatarKeywords() -{ - delete[] m_keywordsList; -} - -void RSetAvatarKeywords::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_keywordsLength); - for(unsigned i = 0; i < m_keywordsLength; i++) - { - put(msg, m_keywordsList[i]); - } -} - -RGetAvatarKeywords::RGetAvatarKeywords(unsigned srcAvatarID) -: GenericRequest(REQUEST_GETAVATARKEYWORDS), - m_srcAvatarID(srcAvatarID) -{ -} - -void RGetAvatarKeywords::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); -} - -RSearchAvatarKeywords::RSearchAvatarKeywords(const ChatUnicodeString &nodeAddress, const ChatUnicodeString *keywordsList, unsigned keywordsLength) -: GenericRequest(REQUEST_SEARCHAVATARKEYWORDS), - m_keywordsLength(keywordsLength), - m_keywordsList(nullptr) -{ - m_nodeAddress.assign(nodeAddress.string_data); - m_keywordsList = new String[keywordsLength]; - for(unsigned i = 0; i < keywordsLength; i++) - { - m_keywordsList[i].assign(keywordsList[i].string_data, keywordsList[i].string_length); - } -} - -RSearchAvatarKeywords::~RSearchAvatarKeywords() -{ - delete[] m_keywordsList; -} - -void RSearchAvatarKeywords::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_nodeAddress); - put(msg, m_keywordsLength); - for(unsigned i = 0; i < m_keywordsLength; i++) - { - put(msg, m_keywordsList[i]); - } -} - -RGetAvatar::RGetAvatar(const ChatUnicodeString &destName, const ChatUnicodeString &destAddress) -: GenericRequest(REQUEST_GETAVATAR), - m_destName(destName.string_data, destName.string_length), - m_destAddress(destAddress.string_data, destAddress.string_length) -{ -} - -void RGetAvatar::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_destName); - put(msg, m_destAddress); -} - -RGetAnyAvatar::RGetAnyAvatar(const ChatUnicodeString& destName, const ChatUnicodeString& destAddress) - : GenericRequest(REQUEST_GETANYAVATAR) - , m_destName(destName.string_data, destName.string_length) - , m_destAddress(destAddress.string_data, destAddress.string_length ) -{ -} - -void RGetAnyAvatar::pack(Base::ByteStream& msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_destName); - put(msg, m_destAddress); -} - -RAvatarList::RAvatarList(unsigned userID) - : GenericRequest(REQUEST_AVATARLIST) - , m_userID( userID ) -{ -} - -void RAvatarList::pack(Base::ByteStream& msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_userID); -} - -RSetAvatarAttributes::RSetAvatarAttributes(unsigned avatarID, const ChatUnicodeString &srcAddress, unsigned long avatarAttributes, bool persistent) -: GenericRequest(REQUEST_SETAVATARATTRIBUTES), - m_avatarID(avatarID), - m_avatarAttributes(avatarAttributes), - m_persistent(persistent), - m_srcAddress(srcAddress.string_data, srcAddress.string_length) -{ -} - -void RSetAvatarAttributes::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_avatarID); - put(msg, (uint32)m_avatarAttributes); - put(msg, m_persistent); - put(msg, m_srcAddress); -} - -RSetAvatarStatusMessage::RSetAvatarStatusMessage(unsigned avatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString& statusMessage) -: GenericRequest(REQUEST_SETAVATARSTATUSMESSAGE), -m_avatarID(avatarID), -m_statusMessage(statusMessage.data(),statusMessage.length()), -m_srcAddress(srcAddress.string_data, srcAddress.string_length) -{ -} - -void RSetAvatarStatusMessage::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_avatarID); - put(msg, m_statusMessage); - put(msg, m_srcAddress); -} - -RSetAvatarForwardingEmail::RSetAvatarForwardingEmail(unsigned avatarID, const ChatUnicodeString &avatarForwardingEmail) -: GenericRequest(REQUEST_SETAVATAREMAIL), - m_avatarID(avatarID), - m_avatarForwardingEmail(avatarForwardingEmail.data(), avatarForwardingEmail.length()) -{ -} - -void RSetAvatarForwardingEmail::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_avatarID); - put(msg, m_avatarForwardingEmail); -} - -RSetAvatarInboxLimit::RSetAvatarInboxLimit(unsigned avatarID, unsigned long avatarInboxLimit) -: GenericRequest(REQUEST_SETAVATARINBOXLIMIT), - m_avatarID(avatarID), - m_avatarInboxLimit(avatarInboxLimit) -{ -} - -void RSetAvatarInboxLimit::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_avatarID); - put(msg, (uint32)m_avatarInboxLimit); -} - -RGetRoom::RGetRoom(const ChatUnicodeString &roomAddress) -: GenericRequest(REQUEST_GETROOM), - m_roomAddress(roomAddress.string_data, roomAddress.string_length) -{ -} - -void RGetRoom::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_roomAddress); -} - -RCreateRoom::RCreateRoom(unsigned avatarID, const ChatUnicodeString & srcAddress, const RoomParams ¶ms, const ChatUnicodeString &roomAddress) -: GenericRequest(REQUEST_CREATEROOM), - m_avatarID(avatarID), - m_roomName(params.getRoomName().string_data, params.getRoomName().string_length), - m_roomTopic(params.getRoomTopic().string_data, params.getRoomTopic().string_length), - m_roomPassword(params.getRoomPassword().string_data, params.getRoomPassword().string_length), - m_roomAttributes(params.getRoomAttributes()), - m_maxRoomSize(params.getRoomMaxSize()), - m_roomAddress(roomAddress.string_data, roomAddress.string_length), - m_srcAddress(srcAddress.string_data, srcAddress.string_length) -{ -} - -void RCreateRoom::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_avatarID); - put(msg, m_roomName); - put(msg, m_roomTopic); - put(msg, m_roomPassword); - put(msg, m_roomAttributes); - put(msg, m_maxRoomSize); - put(msg, m_roomAddress); - put(msg, m_srcAddress); -} - -RDestroyRoom::RDestroyRoom(unsigned avatarID, const ChatUnicodeString & srcAddress, const ChatUnicodeString &roomAddress) -: GenericRequest(REQUEST_DESTROYROOM), - m_avatarID(avatarID), - m_roomAddress(roomAddress.string_data, roomAddress.string_length), - m_srcAddress(srcAddress.string_data, srcAddress.string_length) -{ -} - -void RDestroyRoom::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_avatarID); - put(msg, m_roomAddress); - put(msg, m_srcAddress); -} - -RSendInstantMessage::RSendInstantMessage(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress, const ChatUnicodeString &msg, const ChatUnicodeString &oob) -: GenericRequest(REQUEST_SENDINSTANTMESSAGE), - m_srcAvatarID(srcAvatarID), - m_destName(destName.string_data, destName.string_length), - m_destAddress(destAddress.string_data, destAddress.string_length), - m_msg(msg.string_data, msg.string_length), - m_oob(oob.string_data, oob.string_length), - m_srcAddress(srcAddress.string_data, srcAddress.string_length) -{ -} - -void RSendInstantMessage::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destName); - put(msg, m_destAddress); - put(msg, m_msg); - put(msg, m_oob); - put(msg, m_srcAddress); -} - -RSendRoomMessage::RSendRoomMessage(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destRoomAddress, const ChatUnicodeString &msg, const ChatUnicodeString &oob) -: GenericRequest(REQUEST_SENDROOMMESSAGE), - m_srcAvatarID(srcAvatarID), - m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length), - m_msg(msg.string_data, msg.string_length), - m_oob(oob.string_data, oob.string_length), - m_srcAddress(srcAddress.string_data, srcAddress.string_length) -{ -} - -void RSendRoomMessage::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destRoomAddress); - put(msg, m_msg); - put(msg, m_oob); - put(msg, m_srcAddress); -} - -RSendBroadcastMessage::RSendBroadcastMessage(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAddress, const ChatUnicodeString &msg, const ChatUnicodeString &oob) -: GenericRequest(REQUEST_SENDBROADCASTMESSAGE), - m_srcAvatarID(srcAvatarID), - m_destAddress(destAddress.string_data, destAddress.string_length), - m_msg(msg.string_data, msg.string_length), - m_oob(oob.string_data, oob.string_length), - m_srcAddress(srcAddress.string_data, srcAddress.string_length) -{ -} - -void RSendBroadcastMessage::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destAddress); - put(msg, m_msg); - put(msg, m_oob); - put(msg, m_srcAddress); -} - -RFilterMessage::RFilterMessage(const ChatUnicodeString &msg) -: GenericRequest(REQUEST_FILTERMESSAGE), - m_msg(msg.string_data, msg.string_length) -{ -} - -void RFilterMessage::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_msg); -} - -RFilterMessageEx::RFilterMessageEx(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress, const ChatUnicodeString &msg) -: GenericRequest(REQUEST_FILTERMESSAGE_EX), - m_srcAvatarID(srcAvatarID), - m_destName(destName.string_data, destName.string_length), - m_destAddress(destAddress.string_data, destAddress.string_length), - m_msg(msg.string_data, msg.string_length) -{ -} - -void RFilterMessageEx::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destName); - put(msg, m_destAddress); - put(msg, m_msg); -} - -RAddFriend::RAddFriend(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress, const ChatUnicodeString &friendComment, bool confirm) -: GenericRequest(REQUEST_ADDFRIEND), - m_srcAvatarID(srcAvatarID), - m_srcAddress(srcAddress.string_data, srcAddress.string_length), - m_destName(destName.string_data, destName.string_length), - m_destAddress(destAddress.string_data, destAddress.string_length), - m_friendComment(friendComment.string_data, friendComment.string_length), - m_confirm(confirm) -{ -} - -void RAddFriend::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destName); - put(msg, m_destAddress); - put(msg, m_friendComment); - put(msg, m_confirm); - put(msg, m_srcAddress); -} - -RAddFriendReciprocate::RAddFriendReciprocate(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress, const ChatUnicodeString &friendComment, bool confirm) -: GenericRequest(REQUEST_ADDFRIEND_RECIPROCATE), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length), -m_destName(destName.string_data, destName.string_length), -m_destAddress(destAddress.string_data, destAddress.string_length), -m_friendComment(friendComment.string_data, friendComment.string_length), -m_confirm(confirm) -{ -} - -void RAddFriendReciprocate::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destName); - put(msg, m_destAddress); - put(msg, m_friendComment); - put(msg, m_confirm); - put(msg, m_srcAddress); -} - -RSetFriendComment::RSetFriendComment(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress, const ChatUnicodeString &friendComment) -: GenericRequest(REQUEST_SETFRIENDCOMMENT), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length), - m_destName(destName.string_data, destName.string_length), - m_destAddress(destAddress.string_data, destAddress.string_length), - m_friendComment(friendComment.string_data, friendComment.string_length) -{ -} - -void RSetFriendComment::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destName); - put(msg, m_destAddress); - put(msg, m_friendComment); - put(msg, m_srcAddress); -} - -RRemoveFriend::RRemoveFriend(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress) -: GenericRequest(REQUEST_REMOVEFRIEND), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length), - m_destName(destName.string_data, destName.string_length), - m_destAddress(destAddress.string_data, destAddress.string_length) -{ -} - -void RRemoveFriend::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destName); - put(msg, m_destAddress); - put(msg, m_srcAddress); -} -RRemoveFriendReciprocate::RRemoveFriendReciprocate(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress) -: GenericRequest(REQUEST_REMOVEFRIEND_RECIPROCATE), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length), -m_destName(destName.string_data, destName.string_length), -m_destAddress(destAddress.string_data, destAddress.string_length) -{ -} - -void RRemoveFriendReciprocate::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destName); - put(msg, m_destAddress); - put(msg, m_srcAddress); -} -RFriendStatus::RFriendStatus(unsigned srcAvatarID, const ChatUnicodeString &srcAddress) -: GenericRequest(REQUEST_FRIENDSTATUS), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length) -{ -} - -void RFriendStatus::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_srcAddress); -} - -RAddIgnore::RAddIgnore(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress) -: GenericRequest(REQUEST_ADDIGNORE), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length), - m_destName(destName.string_data, destName.string_length), - m_destAddress(destAddress.string_data, destAddress.string_length) -{ -} - -void RAddIgnore::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destName); - put(msg, m_destAddress); - put(msg, m_srcAddress); -} - -RRemoveIgnore::RRemoveIgnore(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress) -: GenericRequest(REQUEST_REMOVEIGNORE), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length), - m_destName(destName.string_data, destName.string_length), - m_destAddress(destAddress.string_data, destAddress.string_length) -{ -} - -void RRemoveIgnore::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destName); - put(msg, m_destAddress); - put(msg, m_srcAddress); -} - - -REnterRoom::REnterRoom(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &roomAddress, const ChatUnicodeString &roomPassword, const RoomParams *roomParams, bool requestingEntry) -: GenericRequest(REQUEST_ENTERROOM), - m_srcAvatarID(srcAvatarID), - m_roomAddress(roomAddress.string_data, roomAddress.string_length), - m_roomPassword(roomPassword.string_data, roomPassword.string_length), - m_requestingEntry(requestingEntry), - m_srcAddress(srcAddress.string_data, srcAddress.string_length) -{ - if (roomParams) - { - // passive room creation if room address does not exist IS enabled - m_passiveCreate = true; - m_paramRoomTopic.assign(roomParams->getRoomTopic().string_data, roomParams->getRoomTopic().string_length); - m_paramRoomAttributes = roomParams->getRoomAttributes(); - m_paramRoomMaxSize = roomParams->getRoomMaxSize(); - } - else - { - // passive room creation disabled - m_passiveCreate = false; - } -} - -void REnterRoom::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_roomAddress); - put(msg, m_roomPassword); - put(msg, m_passiveCreate); - - if (m_passiveCreate) - { - put(msg, m_paramRoomTopic); - put(msg, m_paramRoomAttributes); - put(msg, m_paramRoomMaxSize); } - put(msg, m_requestingEntry); - put(msg, m_srcAddress); - -} - -RAllowRoomEntry::RAllowRoomEntry(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress, bool allow) -: GenericRequest(REQUEST_ALLOWROOMENTRY), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length), - m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), - m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), - m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length), - m_allow(allow) -{ -} - -void RAllowRoomEntry::pack(Base::ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destAvatarName); - put(msg, m_destAvatarAddress); - put(msg, m_destRoomAddress); - put(msg, m_allow); - put(msg, m_srcAddress); -} - -RLeaveRoom::RLeaveRoom(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &roomAddress) -: GenericRequest(REQUEST_LEAVEROOM), - m_srcAvatarID(srcAvatarID), - m_roomAddress(roomAddress.string_data, roomAddress.string_length), - m_srcAddress(srcAddress.string_data, srcAddress.string_length) -{ -} - -void RLeaveRoom::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_roomAddress); - put(msg, m_srcAddress); -} - -RAddModerator::RAddModerator(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) -: GenericRequest(REQUEST_ADDMODERATOR), - m_srcAvatarID(srcAvatarID), - m_srcAddress(srcAddress.string_data, srcAddress.string_length), - m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), - m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), - m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) -{ -} - -void RAddModerator::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destAvatarName); - put(msg, m_destAvatarAddress); - put(msg, m_destRoomAddress); - put(msg, m_srcAddress); -} - -RRemoveModerator::RRemoveModerator(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) -: GenericRequest(REQUEST_REMOVEMODERATOR), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length), - m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), - m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), - m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) -{ -} - -void RRemoveModerator::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destAvatarName); - put(msg, m_destAvatarAddress); - put(msg, m_destRoomAddress); - put(msg, m_srcAddress); -} - -RAddTemporaryModerator::RAddTemporaryModerator(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) -: GenericRequest(REQUEST_ADDTEMPORARYMODERATOR), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length), - m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), - m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), - m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) -{ -} - -void RAddTemporaryModerator::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destAvatarName); - put(msg, m_destAvatarAddress); - put(msg, m_destRoomAddress); - put(msg, m_srcAddress); -} - -RRemoveTemporaryModerator::RRemoveTemporaryModerator(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) -: GenericRequest(REQUEST_REMOVETEMPORARYMODERATOR), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length), - m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), - m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), - m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) -{ -} - -void RRemoveTemporaryModerator::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destAvatarName); - put(msg, m_destAvatarAddress); - put(msg, m_destRoomAddress); - put(msg, m_srcAddress); -} - - -RAddBan::RAddBan(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) -: GenericRequest(REQUEST_ADDBAN), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length), - m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), - m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), - m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) -{ -} - -void RAddBan::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destAvatarName); - put(msg, m_destAvatarAddress); - put(msg, m_destRoomAddress); - put(msg, m_srcAddress); -} - -RRemoveBan::RRemoveBan(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) -: GenericRequest(REQUEST_REMOVEBAN), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length), - m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), - m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), - m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) -{ -} - -void RRemoveBan::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destAvatarName); - put(msg, m_destAvatarAddress); - put(msg, m_destRoomAddress); - put(msg, m_srcAddress); -} - -RAddInvite::RAddInvite(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) -: GenericRequest(REQUEST_ADDINVITE), - m_srcAvatarID(srcAvatarID), - m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), - m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), - m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length), - m_srcAddress(srcAddress.string_data, srcAddress.string_length) -{ -} - -void RAddInvite::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destAvatarName); - put(msg, m_destAvatarAddress); - put(msg, m_destRoomAddress); - put(msg, m_srcAddress); -} - -RRemoveInvite::RRemoveInvite(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) -: GenericRequest(REQUEST_REMOVEINVITE), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length), - m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), - m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), - m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) -{ -} - -void RRemoveInvite::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destAvatarName); - put(msg, m_destAvatarAddress); - put(msg, m_destRoomAddress); - put(msg, m_srcAddress); -} - -RGrantVoice::RGrantVoice(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) -: GenericRequest(REQUEST_GRANTVOICE), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length), - m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), - m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), - m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) -{ -} - -void RGrantVoice::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destAvatarName); - put(msg, m_destAvatarAddress); - put(msg, m_destRoomAddress); - put(msg, m_srcAddress); -} - -RRevokeVoice::RRevokeVoice(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) -: GenericRequest(REQUEST_REVOKEVOICE), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length), - m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), - m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), - m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) -{ -} - -void RRevokeVoice::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destAvatarName); - put(msg, m_destAvatarAddress); - put(msg, m_destRoomAddress); - put(msg, m_srcAddress); -} - -RKickAvatar::RKickAvatar(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) -: GenericRequest(REQUEST_KICKAVATAR), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length), - m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), - m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), - m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) -{ -} - -void RKickAvatar::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destAvatarName); - put(msg, m_destAvatarAddress); - put(msg, m_destRoomAddress); - put(msg, m_srcAddress); -} - -RSetRoomParams::RSetRoomParams(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destRoomAddress, const RoomParams *params) - -: GenericRequest(REQUEST_SETROOMPARAMS), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length), - m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) -{ - // we take in a const RoomParams, so make our own and guarantee - // nullptr-terminated char buffers. - m_newRoomName.assign(params->getRoomName().string_data, params->getRoomName().string_length); - m_newRoomTopic.assign(params->getRoomTopic().string_data, params->getRoomTopic().string_length); - m_newRoomPassword.assign(params->getRoomPassword().string_data, params->getRoomPassword().string_length); - m_newRoomAttributes = params->getRoomAttributes(); - m_newRoomSize = params->getRoomMaxSize(); -} - -void RSetRoomParams::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destRoomAddress); - put(msg, m_newRoomName); - put(msg, m_newRoomTopic); - put(msg, m_newRoomPassword); - put(msg, m_newRoomAttributes); - put(msg, m_newRoomSize); - put(msg, m_srcAddress); -} - -RChangeRoomOwner::RChangeRoomOwner(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destRoomAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress) -: GenericRequest(REQUEST_CHANGEROOMOWNER), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length), - m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length), - m_newRoomOwnerName(destAvatarName.data(), destAvatarName.length()), - m_newRoomOwnerAddress(destAvatarAddress.data(), destAvatarAddress.length()) -{ -} - -void RChangeRoomOwner::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destRoomAddress); - put(msg, m_newRoomOwnerName); - put(msg, m_newRoomOwnerAddress); - put(msg, m_srcAddress); -} - -RGetRoomSummaries::RGetRoomSummaries(const ChatUnicodeString &startNodeAddress, const ChatUnicodeString &roomFilter) -: GenericRequest(REQUEST_GETROOMSUMMARIES), - m_startNodeAddress(startNodeAddress.string_data, startNodeAddress.string_length), - m_roomFilter(roomFilter.string_data, roomFilter.string_length) -{ -} - -void RGetRoomSummaries::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_startNodeAddress); - put(msg, m_roomFilter); -} - -RSendPersistentMessage::RSendPersistentMessage(const ChatUnicodeString &src, const ChatUnicodeString &destAvatar, const ChatUnicodeString &destAddress, const ChatUnicodeString &subject, const ChatUnicodeString &msg, const ChatUnicodeString &oob, const ChatUnicodeString &category, bool enforceInboxLimit, unsigned categoryLimit) -: GenericRequest(REQUEST_SENDPERSISTENTMESSAGE), - m_avatarPresence(0), - m_srcName(src.string_data, src.string_length), - m_destAvatar(destAvatar.string_data, destAvatar.string_length), - m_destAddress(destAddress.string_data, destAddress.string_length), - m_subject(subject.string_data, subject.string_length), - m_msg(msg.string_data, msg.string_length), - m_oob(oob.string_data, oob.string_length), - m_category(category.string_data, category.string_length), - m_enforceInboxLimit(enforceInboxLimit), - m_categoryLimit(categoryLimit) -{ -} - -RSendPersistentMessage::RSendPersistentMessage(unsigned srcAvatarID, const ChatUnicodeString &destAvatar, const ChatUnicodeString &destAddress, const ChatUnicodeString &subject, const ChatUnicodeString &msg, const ChatUnicodeString &oob, const ChatUnicodeString &category, bool enforceInboxLimit, unsigned categoryLimit) -: GenericRequest(REQUEST_SENDPERSISTENTMESSAGE), - m_avatarPresence(1), - m_srcAvatarID(srcAvatarID), - m_destAvatar(destAvatar.string_data, destAvatar.string_length), - m_destAddress(destAddress.string_data, destAddress.string_length), - m_subject(subject.string_data, subject.string_length), - m_msg(msg.string_data, msg.string_length), - m_oob(oob.string_data, oob.string_length), - m_category(category.string_data, category.string_length), - m_enforceInboxLimit(enforceInboxLimit), - m_categoryLimit(categoryLimit) -{ -} - -void RSendPersistentMessage::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_avatarPresence); - if(m_avatarPresence) + void RLoginAvatar::pack(ByteStream &msg) { + put(msg, m_type); + put(msg, m_track); + put(msg, m_userID); + put(msg, m_name); + put(msg, m_address); + put(msg, m_loginLocation); + put(msg, m_loginPriority); + put(msg, m_loginAttributes); + } + + RTemporaryAvatar::RTemporaryAvatar(unsigned userID, const ChatUnicodeString &name, const ChatUnicodeString &address, const ChatUnicodeString &avatarLoginLocation) + : GenericRequest(REQUEST_TEMPORARYAVATAR), + m_userID(userID), + m_name(name.string_data, name.string_length), + m_address(address.string_data, address.string_length), + m_loginLocation(avatarLoginLocation.string_data, avatarLoginLocation.string_length) + { + } + + void RTemporaryAvatar::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_userID); + put(msg, m_name); + put(msg, m_address); + put(msg, m_loginLocation); + } + + RLogoutAvatar::RLogoutAvatar(unsigned avatarID, const ChatUnicodeString & address) + : GenericRequest(REQUEST_LOGOUTAVATAR) + , m_avatarID(avatarID) + , m_address(address.string_data, address.string_length) + { + } + + void RLogoutAvatar::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_avatarID); + put(msg, m_address); + } + + RDestroyAvatar::RDestroyAvatar(unsigned avatarID, const ChatUnicodeString & address) + : GenericRequest(REQUEST_DESTROYAVATAR) + , m_avatarID(avatarID) + , m_address(address.string_data, address.string_length) + { + } + + void RDestroyAvatar::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_avatarID); + put(msg, m_address); + } + + RSetAvatarKeywords::RSetAvatarKeywords(unsigned srcAvatarID, const ChatUnicodeString *keywordsList, unsigned keywordsLength) + : GenericRequest(REQUEST_SETAVATARKEYWORDS), + m_srcAvatarID(srcAvatarID), + m_keywordsLength(keywordsLength) + { + m_keywordsList = new String[keywordsLength]; + for (unsigned i = 0; i < keywordsLength; i++) + { + m_keywordsList[i].assign(keywordsList[i].string_data, keywordsList[i].string_length); + } + } + + RSetAvatarKeywords::~RSetAvatarKeywords() + { + delete[] m_keywordsList; + } + + void RSetAvatarKeywords::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_keywordsLength); + for (unsigned i = 0; i < m_keywordsLength; i++) + { + put(msg, m_keywordsList[i]); + } + } + + RGetAvatarKeywords::RGetAvatarKeywords(unsigned srcAvatarID) + : GenericRequest(REQUEST_GETAVATARKEYWORDS), + m_srcAvatarID(srcAvatarID) + { + } + + void RGetAvatarKeywords::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); put(msg, m_srcAvatarID); } - else + + RSearchAvatarKeywords::RSearchAvatarKeywords(const ChatUnicodeString &nodeAddress, const ChatUnicodeString *keywordsList, unsigned keywordsLength) + : GenericRequest(REQUEST_SEARCHAVATARKEYWORDS), + m_keywordsLength(keywordsLength), + m_keywordsList(nullptr) { - put(msg, m_srcName); + m_nodeAddress.assign(nodeAddress.string_data); + m_keywordsList = new String[keywordsLength]; + for (unsigned i = 0; i < keywordsLength; i++) + { + m_keywordsList[i].assign(keywordsList[i].string_data, keywordsList[i].string_length); + } } - put(msg, m_destAvatar); - put(msg, m_destAddress); - put(msg, m_subject); - put(msg, m_msg); - put(msg, m_oob); - put(msg, m_category); - put(msg, m_enforceInboxLimit); - put(msg, m_categoryLimit); -} -RSendMultiplePersistentMessages::RSendMultiplePersistentMessages(const ChatUnicodeString &src, unsigned numDestAvatars, const ChatUnicodeString *destAvatars, const ChatUnicodeString *destAddresses, const ChatUnicodeString &subject, const ChatUnicodeString &msg, const ChatUnicodeString &oob, const ChatUnicodeString &category, bool enforceInboxLimit, unsigned categoryLimit) -: GenericRequest(REQUEST_SENDMULTIPLEPERSISTENTMESSAGES), - m_avatarPresence(0), - m_srcName(src.string_data, src.string_length), - m_numDestAvatars(numDestAvatars), - m_subject(subject.string_data, subject.string_length), - m_msg(msg.string_data, msg.string_length), - m_oob(oob.string_data, oob.string_length), - m_category(category.string_data, category.string_length), - m_enforceInboxLimit(enforceInboxLimit), - m_categoryLimit(categoryLimit) -{ - unsigned destIndex; - - m_destAvatars.resize(m_numDestAvatars); - m_destAddresses.resize(m_numDestAvatars); - - for (destIndex = 0; destIndex < m_numDestAvatars; destIndex++) + RSearchAvatarKeywords::~RSearchAvatarKeywords() { - m_destAvatars[destIndex].assign(destAvatars[destIndex].string_data, destAvatars[destIndex].string_length); - m_destAddresses[destIndex].assign(destAddresses[destIndex].string_data, destAddresses[destIndex].string_length); + delete[] m_keywordsList; } -} -RSendMultiplePersistentMessages::RSendMultiplePersistentMessages(unsigned srcAvatarID, unsigned numDestAvatars, const ChatUnicodeString *destAvatars, const ChatUnicodeString *destAddresses, const ChatUnicodeString &subject, const ChatUnicodeString &msg, const ChatUnicodeString &oob, const ChatUnicodeString &category, bool enforceInboxLimit, unsigned categoryLimit) -: GenericRequest(REQUEST_SENDMULTIPLEPERSISTENTMESSAGES), - m_avatarPresence(1), - m_srcAvatarID(srcAvatarID), - m_numDestAvatars(numDestAvatars), - m_subject(subject.string_data, subject.string_length), - m_msg(msg.string_data, msg.string_length), - m_oob(oob.string_data, oob.string_length), - m_category(category.string_data, category.string_length), - m_enforceInboxLimit(enforceInboxLimit), - m_categoryLimit(categoryLimit) -{ - unsigned destIndex; - - m_destAvatars.resize(m_numDestAvatars); - m_destAddresses.resize(m_numDestAvatars); - - for (destIndex = 0; destIndex < m_numDestAvatars; destIndex++) + void RSearchAvatarKeywords::pack(ByteStream &msg) { - m_destAvatars[destIndex].assign(destAvatars[destIndex].string_data, destAvatars[destIndex].string_length); - m_destAddresses[destIndex].assign(destAddresses[destIndex].string_data, destAddresses[destIndex].string_length); + put(msg, m_type); + put(msg, m_track); + put(msg, m_nodeAddress); + put(msg, m_keywordsLength); + for (unsigned i = 0; i < m_keywordsLength; i++) + { + put(msg, m_keywordsList[i]); + } } -} -void RSendMultiplePersistentMessages::pack(ByteStream &msg) -{ - unsigned destIndex; - - put(msg, m_type); - put(msg, m_track); - put(msg, m_avatarPresence); - if(m_avatarPresence) + RGetAvatar::RGetAvatar(const ChatUnicodeString &destName, const ChatUnicodeString &destAddress) + : GenericRequest(REQUEST_GETAVATAR), + m_destName(destName.string_data, destName.string_length), + m_destAddress(destAddress.string_data, destAddress.string_length) { + } + + void RGetAvatar::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_destName); + put(msg, m_destAddress); + } + + RGetAnyAvatar::RGetAnyAvatar(const ChatUnicodeString& destName, const ChatUnicodeString& destAddress) + : GenericRequest(REQUEST_GETANYAVATAR) + , m_destName(destName.string_data, destName.string_length) + , m_destAddress(destAddress.string_data, destAddress.string_length) + { + } + + void RGetAnyAvatar::pack(Base::ByteStream& msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_destName); + put(msg, m_destAddress); + } + + RAvatarList::RAvatarList(unsigned userID) + : GenericRequest(REQUEST_AVATARLIST) + , m_userID(userID) + { + } + + void RAvatarList::pack(Base::ByteStream& msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_userID); + } + + RSetAvatarAttributes::RSetAvatarAttributes(unsigned avatarID, const ChatUnicodeString &srcAddress, unsigned long avatarAttributes, bool persistent) + : GenericRequest(REQUEST_SETAVATARATTRIBUTES), + m_avatarID(avatarID), + m_avatarAttributes(avatarAttributes), + m_persistent(persistent), + m_srcAddress(srcAddress.string_data, srcAddress.string_length) + { + } + + void RSetAvatarAttributes::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_avatarID); + put(msg, (uint32)m_avatarAttributes); + put(msg, m_persistent); + put(msg, m_srcAddress); + } + + RSetAvatarStatusMessage::RSetAvatarStatusMessage(unsigned avatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString& statusMessage) + : GenericRequest(REQUEST_SETAVATARSTATUSMESSAGE), + m_avatarID(avatarID), + m_statusMessage(statusMessage.data(), statusMessage.length()), + m_srcAddress(srcAddress.string_data, srcAddress.string_length) + { + } + + void RSetAvatarStatusMessage::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_avatarID); + put(msg, m_statusMessage); + put(msg, m_srcAddress); + } + + RSetAvatarForwardingEmail::RSetAvatarForwardingEmail(unsigned avatarID, const ChatUnicodeString &avatarForwardingEmail) + : GenericRequest(REQUEST_SETAVATAREMAIL), + m_avatarID(avatarID), + m_avatarForwardingEmail(avatarForwardingEmail.data(), avatarForwardingEmail.length()) + { + } + + void RSetAvatarForwardingEmail::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_avatarID); + put(msg, m_avatarForwardingEmail); + } + + RSetAvatarInboxLimit::RSetAvatarInboxLimit(unsigned avatarID, unsigned long avatarInboxLimit) + : GenericRequest(REQUEST_SETAVATARINBOXLIMIT), + m_avatarID(avatarID), + m_avatarInboxLimit(avatarInboxLimit) + { + } + + void RSetAvatarInboxLimit::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_avatarID); + put(msg, (uint32)m_avatarInboxLimit); + } + + RGetRoom::RGetRoom(const ChatUnicodeString &roomAddress) + : GenericRequest(REQUEST_GETROOM), + m_roomAddress(roomAddress.string_data, roomAddress.string_length) + { + } + + void RGetRoom::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_roomAddress); + } + + RCreateRoom::RCreateRoom(unsigned avatarID, const ChatUnicodeString & srcAddress, const RoomParams ¶ms, const ChatUnicodeString &roomAddress) + : GenericRequest(REQUEST_CREATEROOM), + m_avatarID(avatarID), + m_roomName(params.getRoomName().string_data, params.getRoomName().string_length), + m_roomTopic(params.getRoomTopic().string_data, params.getRoomTopic().string_length), + m_roomPassword(params.getRoomPassword().string_data, params.getRoomPassword().string_length), + m_roomAttributes(params.getRoomAttributes()), + m_maxRoomSize(params.getRoomMaxSize()), + m_roomAddress(roomAddress.string_data, roomAddress.string_length), + m_srcAddress(srcAddress.string_data, srcAddress.string_length) + { + } + + void RCreateRoom::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_avatarID); + put(msg, m_roomName); + put(msg, m_roomTopic); + put(msg, m_roomPassword); + put(msg, m_roomAttributes); + put(msg, m_maxRoomSize); + put(msg, m_roomAddress); + put(msg, m_srcAddress); + } + + RDestroyRoom::RDestroyRoom(unsigned avatarID, const ChatUnicodeString & srcAddress, const ChatUnicodeString &roomAddress) + : GenericRequest(REQUEST_DESTROYROOM), + m_avatarID(avatarID), + m_roomAddress(roomAddress.string_data, roomAddress.string_length), + m_srcAddress(srcAddress.string_data, srcAddress.string_length) + { + } + + void RDestroyRoom::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_avatarID); + put(msg, m_roomAddress); + put(msg, m_srcAddress); + } + + RSendInstantMessage::RSendInstantMessage(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress, const ChatUnicodeString &msg, const ChatUnicodeString &oob) + : GenericRequest(REQUEST_SENDINSTANTMESSAGE), + m_srcAvatarID(srcAvatarID), + m_destName(destName.string_data, destName.string_length), + m_destAddress(destAddress.string_data, destAddress.string_length), + m_msg(msg.string_data, msg.string_length), + m_oob(oob.string_data, oob.string_length), + m_srcAddress(srcAddress.string_data, srcAddress.string_length) + { + } + + void RSendInstantMessage::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destName); + put(msg, m_destAddress); + put(msg, m_msg); + put(msg, m_oob); + put(msg, m_srcAddress); + } + + RSendRoomMessage::RSendRoomMessage(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destRoomAddress, const ChatUnicodeString &msg, const ChatUnicodeString &oob) + : GenericRequest(REQUEST_SENDROOMMESSAGE), + m_srcAvatarID(srcAvatarID), + m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length), + m_msg(msg.string_data, msg.string_length), + m_oob(oob.string_data, oob.string_length), + m_srcAddress(srcAddress.string_data, srcAddress.string_length) + { + } + + void RSendRoomMessage::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destRoomAddress); + put(msg, m_msg); + put(msg, m_oob); + put(msg, m_srcAddress); + } + + RSendBroadcastMessage::RSendBroadcastMessage(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAddress, const ChatUnicodeString &msg, const ChatUnicodeString &oob) + : GenericRequest(REQUEST_SENDBROADCASTMESSAGE), + m_srcAvatarID(srcAvatarID), + m_destAddress(destAddress.string_data, destAddress.string_length), + m_msg(msg.string_data, msg.string_length), + m_oob(oob.string_data, oob.string_length), + m_srcAddress(srcAddress.string_data, srcAddress.string_length) + { + } + + void RSendBroadcastMessage::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destAddress); + put(msg, m_msg); + put(msg, m_oob); + put(msg, m_srcAddress); + } + + RFilterMessage::RFilterMessage(const ChatUnicodeString &msg) + : GenericRequest(REQUEST_FILTERMESSAGE), + m_msg(msg.string_data, msg.string_length) + { + } + + void RFilterMessage::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_msg); + } + + RFilterMessageEx::RFilterMessageEx(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress, const ChatUnicodeString &msg) + : GenericRequest(REQUEST_FILTERMESSAGE_EX), + m_srcAvatarID(srcAvatarID), + m_destName(destName.string_data, destName.string_length), + m_destAddress(destAddress.string_data, destAddress.string_length), + m_msg(msg.string_data, msg.string_length) + { + } + + void RFilterMessageEx::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destName); + put(msg, m_destAddress); + put(msg, m_msg); + } + + RAddFriend::RAddFriend(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress, const ChatUnicodeString &friendComment, bool confirm) + : GenericRequest(REQUEST_ADDFRIEND), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destName(destName.string_data, destName.string_length), + m_destAddress(destAddress.string_data, destAddress.string_length), + m_friendComment(friendComment.string_data, friendComment.string_length), + m_confirm(confirm) + { + } + + void RAddFriend::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destName); + put(msg, m_destAddress); + put(msg, m_friendComment); + put(msg, m_confirm); + put(msg, m_srcAddress); + } + + RAddFriendReciprocate::RAddFriendReciprocate(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress, const ChatUnicodeString &friendComment, bool confirm) + : GenericRequest(REQUEST_ADDFRIEND_RECIPROCATE), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destName(destName.string_data, destName.string_length), + m_destAddress(destAddress.string_data, destAddress.string_length), + m_friendComment(friendComment.string_data, friendComment.string_length), + m_confirm(confirm) + { + } + + void RAddFriendReciprocate::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destName); + put(msg, m_destAddress); + put(msg, m_friendComment); + put(msg, m_confirm); + put(msg, m_srcAddress); + } + + RSetFriendComment::RSetFriendComment(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress, const ChatUnicodeString &friendComment) + : GenericRequest(REQUEST_SETFRIENDCOMMENT), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destName(destName.string_data, destName.string_length), + m_destAddress(destAddress.string_data, destAddress.string_length), + m_friendComment(friendComment.string_data, friendComment.string_length) + { + } + + void RSetFriendComment::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destName); + put(msg, m_destAddress); + put(msg, m_friendComment); + put(msg, m_srcAddress); + } + + RRemoveFriend::RRemoveFriend(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress) + : GenericRequest(REQUEST_REMOVEFRIEND), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destName(destName.string_data, destName.string_length), + m_destAddress(destAddress.string_data, destAddress.string_length) + { + } + + void RRemoveFriend::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destName); + put(msg, m_destAddress); + put(msg, m_srcAddress); + } + RRemoveFriendReciprocate::RRemoveFriendReciprocate(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress) + : GenericRequest(REQUEST_REMOVEFRIEND_RECIPROCATE), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destName(destName.string_data, destName.string_length), + m_destAddress(destAddress.string_data, destAddress.string_length) + { + } + + void RRemoveFriendReciprocate::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destName); + put(msg, m_destAddress); + put(msg, m_srcAddress); + } + RFriendStatus::RFriendStatus(unsigned srcAvatarID, const ChatUnicodeString &srcAddress) + : GenericRequest(REQUEST_FRIENDSTATUS), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length) + { + } + + void RFriendStatus::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_srcAddress); + } + + RAddIgnore::RAddIgnore(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress) + : GenericRequest(REQUEST_ADDIGNORE), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destName(destName.string_data, destName.string_length), + m_destAddress(destAddress.string_data, destAddress.string_length) + { + } + + void RAddIgnore::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destName); + put(msg, m_destAddress); + put(msg, m_srcAddress); + } + + RRemoveIgnore::RRemoveIgnore(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress) + : GenericRequest(REQUEST_REMOVEIGNORE), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destName(destName.string_data, destName.string_length), + m_destAddress(destAddress.string_data, destAddress.string_length) + { + } + + void RRemoveIgnore::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destName); + put(msg, m_destAddress); + put(msg, m_srcAddress); + } + + REnterRoom::REnterRoom(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &roomAddress, const ChatUnicodeString &roomPassword, const RoomParams *roomParams, bool requestingEntry) + : GenericRequest(REQUEST_ENTERROOM), + m_srcAvatarID(srcAvatarID), + m_roomAddress(roomAddress.string_data, roomAddress.string_length), + m_roomPassword(roomPassword.string_data, roomPassword.string_length), + m_requestingEntry(requestingEntry), + m_srcAddress(srcAddress.string_data, srcAddress.string_length) + { + if (roomParams) + { + // passive room creation if room address does not exist IS enabled + m_passiveCreate = true; + m_paramRoomTopic.assign(roomParams->getRoomTopic().string_data, roomParams->getRoomTopic().string_length); + m_paramRoomAttributes = roomParams->getRoomAttributes(); + m_paramRoomMaxSize = roomParams->getRoomMaxSize(); + } + else + { + // passive room creation disabled + m_passiveCreate = false; + } + } + + void REnterRoom::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_roomAddress); + put(msg, m_roomPassword); + put(msg, m_passiveCreate); + + if (m_passiveCreate) + { + put(msg, m_paramRoomTopic); + put(msg, m_paramRoomAttributes); + put(msg, m_paramRoomMaxSize); + } + + put(msg, m_requestingEntry); + put(msg, m_srcAddress); + } + + RAllowRoomEntry::RAllowRoomEntry(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress, bool allow) + : GenericRequest(REQUEST_ALLOWROOMENTRY), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), + m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), + m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length), + m_allow(allow) + { + } + + void RAllowRoomEntry::pack(Base::ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destAvatarName); + put(msg, m_destAvatarAddress); + put(msg, m_destRoomAddress); + put(msg, m_allow); + put(msg, m_srcAddress); + } + + RLeaveRoom::RLeaveRoom(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &roomAddress) + : GenericRequest(REQUEST_LEAVEROOM), + m_srcAvatarID(srcAvatarID), + m_roomAddress(roomAddress.string_data, roomAddress.string_length), + m_srcAddress(srcAddress.string_data, srcAddress.string_length) + { + } + + void RLeaveRoom::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_roomAddress); + put(msg, m_srcAddress); + } + + RAddModerator::RAddModerator(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) + : GenericRequest(REQUEST_ADDMODERATOR), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), + m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), + m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) + { + } + + void RAddModerator::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destAvatarName); + put(msg, m_destAvatarAddress); + put(msg, m_destRoomAddress); + put(msg, m_srcAddress); + } + + RRemoveModerator::RRemoveModerator(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) + : GenericRequest(REQUEST_REMOVEMODERATOR), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), + m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), + m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) + { + } + + void RRemoveModerator::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destAvatarName); + put(msg, m_destAvatarAddress); + put(msg, m_destRoomAddress); + put(msg, m_srcAddress); + } + + RAddTemporaryModerator::RAddTemporaryModerator(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) + : GenericRequest(REQUEST_ADDTEMPORARYMODERATOR), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), + m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), + m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) + { + } + + void RAddTemporaryModerator::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destAvatarName); + put(msg, m_destAvatarAddress); + put(msg, m_destRoomAddress); + put(msg, m_srcAddress); + } + + RRemoveTemporaryModerator::RRemoveTemporaryModerator(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) + : GenericRequest(REQUEST_REMOVETEMPORARYMODERATOR), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), + m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), + m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) + { + } + + void RRemoveTemporaryModerator::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destAvatarName); + put(msg, m_destAvatarAddress); + put(msg, m_destRoomAddress); + put(msg, m_srcAddress); + } + + RAddBan::RAddBan(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) + : GenericRequest(REQUEST_ADDBAN), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), + m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), + m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) + { + } + + void RAddBan::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destAvatarName); + put(msg, m_destAvatarAddress); + put(msg, m_destRoomAddress); + put(msg, m_srcAddress); + } + + RRemoveBan::RRemoveBan(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) + : GenericRequest(REQUEST_REMOVEBAN), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), + m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), + m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) + { + } + + void RRemoveBan::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destAvatarName); + put(msg, m_destAvatarAddress); + put(msg, m_destRoomAddress); + put(msg, m_srcAddress); + } + + RAddInvite::RAddInvite(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) + : GenericRequest(REQUEST_ADDINVITE), + m_srcAvatarID(srcAvatarID), + m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), + m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), + m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length), + m_srcAddress(srcAddress.string_data, srcAddress.string_length) + { + } + + void RAddInvite::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destAvatarName); + put(msg, m_destAvatarAddress); + put(msg, m_destRoomAddress); + put(msg, m_srcAddress); + } + + RRemoveInvite::RRemoveInvite(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) + : GenericRequest(REQUEST_REMOVEINVITE), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), + m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), + m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) + { + } + + void RRemoveInvite::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destAvatarName); + put(msg, m_destAvatarAddress); + put(msg, m_destRoomAddress); + put(msg, m_srcAddress); + } + + RGrantVoice::RGrantVoice(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) + : GenericRequest(REQUEST_GRANTVOICE), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), + m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), + m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) + { + } + + void RGrantVoice::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destAvatarName); + put(msg, m_destAvatarAddress); + put(msg, m_destRoomAddress); + put(msg, m_srcAddress); + } + + RRevokeVoice::RRevokeVoice(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) + : GenericRequest(REQUEST_REVOKEVOICE), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), + m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), + m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) + { + } + + void RRevokeVoice::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destAvatarName); + put(msg, m_destAvatarAddress); + put(msg, m_destRoomAddress); + put(msg, m_srcAddress); + } + + RKickAvatar::RKickAvatar(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, const ChatUnicodeString &destRoomAddress) + : GenericRequest(REQUEST_KICKAVATAR), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destAvatarName(destAvatarName.string_data, destAvatarName.string_length), + m_destAvatarAddress(destAvatarAddress.string_data, destAvatarAddress.string_length), + m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) + { + } + + void RKickAvatar::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destAvatarName); + put(msg, m_destAvatarAddress); + put(msg, m_destRoomAddress); + put(msg, m_srcAddress); + } + + RSetRoomParams::RSetRoomParams(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destRoomAddress, const RoomParams *params) + + : GenericRequest(REQUEST_SETROOMPARAMS), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) + { + // we take in a const RoomParams, so make our own and guarantee + // nullptr-terminated char buffers. + m_newRoomName.assign(params->getRoomName().string_data, params->getRoomName().string_length); + m_newRoomTopic.assign(params->getRoomTopic().string_data, params->getRoomTopic().string_length); + m_newRoomPassword.assign(params->getRoomPassword().string_data, params->getRoomPassword().string_length); + m_newRoomAttributes = params->getRoomAttributes(); + m_newRoomSize = params->getRoomMaxSize(); + } + + void RSetRoomParams::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destRoomAddress); + put(msg, m_newRoomName); + put(msg, m_newRoomTopic); + put(msg, m_newRoomPassword); + put(msg, m_newRoomAttributes); + put(msg, m_newRoomSize); + put(msg, m_srcAddress); + } + + RChangeRoomOwner::RChangeRoomOwner(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, const ChatUnicodeString &destRoomAddress, const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress) + : GenericRequest(REQUEST_CHANGEROOMOWNER), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length), + m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length), + m_newRoomOwnerName(destAvatarName.data(), destAvatarName.length()), + m_newRoomOwnerAddress(destAvatarAddress.data(), destAvatarAddress.length()) + { + } + + void RChangeRoomOwner::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destRoomAddress); + put(msg, m_newRoomOwnerName); + put(msg, m_newRoomOwnerAddress); + put(msg, m_srcAddress); + } + + RGetRoomSummaries::RGetRoomSummaries(const ChatUnicodeString &startNodeAddress, const ChatUnicodeString &roomFilter) + : GenericRequest(REQUEST_GETROOMSUMMARIES), + m_startNodeAddress(startNodeAddress.string_data, startNodeAddress.string_length), + m_roomFilter(roomFilter.string_data, roomFilter.string_length) + { + } + + void RGetRoomSummaries::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_startNodeAddress); + put(msg, m_roomFilter); + } + + RSendPersistentMessage::RSendPersistentMessage(const ChatUnicodeString &src, const ChatUnicodeString &destAvatar, const ChatUnicodeString &destAddress, const ChatUnicodeString &subject, const ChatUnicodeString &msg, const ChatUnicodeString &oob, const ChatUnicodeString &category, bool enforceInboxLimit, unsigned categoryLimit) + : GenericRequest(REQUEST_SENDPERSISTENTMESSAGE), + m_avatarPresence(0), + m_srcName(src.string_data, src.string_length), + m_destAvatar(destAvatar.string_data, destAvatar.string_length), + m_destAddress(destAddress.string_data, destAddress.string_length), + m_subject(subject.string_data, subject.string_length), + m_msg(msg.string_data, msg.string_length), + m_oob(oob.string_data, oob.string_length), + m_category(category.string_data, category.string_length), + m_enforceInboxLimit(enforceInboxLimit), + m_categoryLimit(categoryLimit), + m_srcAvatarID(0) + { + } + + RSendPersistentMessage::RSendPersistentMessage(unsigned srcAvatarID, const ChatUnicodeString &destAvatar, const ChatUnicodeString &destAddress, const ChatUnicodeString &subject, const ChatUnicodeString &msg, const ChatUnicodeString &oob, const ChatUnicodeString &category, bool enforceInboxLimit, unsigned categoryLimit) + : GenericRequest(REQUEST_SENDPERSISTENTMESSAGE), + m_avatarPresence(1), + m_srcAvatarID(srcAvatarID), + m_destAvatar(destAvatar.string_data, destAvatar.string_length), + m_destAddress(destAddress.string_data, destAddress.string_length), + m_subject(subject.string_data, subject.string_length), + m_msg(msg.string_data, msg.string_length), + m_oob(oob.string_data, oob.string_length), + m_category(category.string_data, category.string_length), + m_enforceInboxLimit(enforceInboxLimit), + m_categoryLimit(categoryLimit) + { + } + + void RSendPersistentMessage::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_avatarPresence); + if (m_avatarPresence) + { + put(msg, m_srcAvatarID); + } + else + { + put(msg, m_srcName); + } + put(msg, m_destAvatar); + put(msg, m_destAddress); + put(msg, m_subject); + put(msg, m_msg); + put(msg, m_oob); + put(msg, m_category); + put(msg, m_enforceInboxLimit); + put(msg, m_categoryLimit); + } + + RSendMultiplePersistentMessages::RSendMultiplePersistentMessages(const ChatUnicodeString &src, unsigned numDestAvatars, const ChatUnicodeString *destAvatars, const ChatUnicodeString *destAddresses, const ChatUnicodeString &subject, const ChatUnicodeString &msg, const ChatUnicodeString &oob, const ChatUnicodeString &category, bool enforceInboxLimit, unsigned categoryLimit) + : GenericRequest(REQUEST_SENDMULTIPLEPERSISTENTMESSAGES), + m_avatarPresence(0), + m_srcName(src.string_data, src.string_length), + m_numDestAvatars(numDestAvatars), + m_subject(subject.string_data, subject.string_length), + m_msg(msg.string_data, msg.string_length), + m_oob(oob.string_data, oob.string_length), + m_category(category.string_data, category.string_length), + m_enforceInboxLimit(enforceInboxLimit), + m_categoryLimit(categoryLimit), + m_srcAvatarID(0) + { + unsigned destIndex; + + m_destAvatars.resize(m_numDestAvatars); + m_destAddresses.resize(m_numDestAvatars); + + for (destIndex = 0; destIndex < m_numDestAvatars; destIndex++) + { + m_destAvatars[destIndex].assign(destAvatars[destIndex].string_data, destAvatars[destIndex].string_length); + m_destAddresses[destIndex].assign(destAddresses[destIndex].string_data, destAddresses[destIndex].string_length); + } + } + + RSendMultiplePersistentMessages::RSendMultiplePersistentMessages(unsigned srcAvatarID, unsigned numDestAvatars, const ChatUnicodeString *destAvatars, const ChatUnicodeString *destAddresses, const ChatUnicodeString &subject, const ChatUnicodeString &msg, const ChatUnicodeString &oob, const ChatUnicodeString &category, bool enforceInboxLimit, unsigned categoryLimit) + : GenericRequest(REQUEST_SENDMULTIPLEPERSISTENTMESSAGES), + m_avatarPresence(1), + m_srcAvatarID(srcAvatarID), + m_numDestAvatars(numDestAvatars), + m_subject(subject.string_data, subject.string_length), + m_msg(msg.string_data, msg.string_length), + m_oob(oob.string_data, oob.string_length), + m_category(category.string_data, category.string_length), + m_enforceInboxLimit(enforceInboxLimit), + m_categoryLimit(categoryLimit) + { + unsigned destIndex; + + m_destAvatars.resize(m_numDestAvatars); + m_destAddresses.resize(m_numDestAvatars); + + for (destIndex = 0; destIndex < m_numDestAvatars; destIndex++) + { + m_destAvatars[destIndex].assign(destAvatars[destIndex].string_data, destAvatars[destIndex].string_length); + m_destAddresses[destIndex].assign(destAddresses[destIndex].string_data, destAddresses[destIndex].string_length); + } + } + + void RSendMultiplePersistentMessages::pack(ByteStream &msg) + { + unsigned destIndex; + + put(msg, m_type); + put(msg, m_track); + put(msg, m_avatarPresence); + if (m_avatarPresence) + { + put(msg, m_srcAvatarID); + } + else + { + put(msg, m_srcName); + } + put(msg, m_numDestAvatars); + for (destIndex = 0; destIndex < m_numDestAvatars; destIndex++) + { + put(msg, m_destAvatars[destIndex]); + put(msg, m_destAddresses[destIndex]); + } + put(msg, m_subject); + put(msg, m_msg); + put(msg, m_oob); + put(msg, m_category); + put(msg, m_enforceInboxLimit); + put(msg, m_categoryLimit); + } + + RAlterPersistentMessage::RAlterPersistentMessage(const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, unsigned messageID, unsigned alterationAttributes, const ChatUnicodeString &newSenderName, const ChatUnicodeString &newSenderAddress, const ChatUnicodeString &newSubject, const ChatUnicodeString &newMsg, const ChatUnicodeString &newOOB, const ChatUnicodeString &newCategory, unsigned newSentTime) + : GenericRequest(REQUEST_ALTERPERISTENTMESSAGE), + m_destAvatarName(destAvatarName.data(), destAvatarName.length()), + m_destAvatarAddress(destAvatarAddress.data(), destAvatarAddress.length()), + m_messageID(messageID), + m_alterationAttributes(alterationAttributes), + m_newSenderName(newSenderName.data(), newSenderName.length()), + m_newSenderAddress(newSenderAddress.data(), newSenderAddress.length()), + m_newSubject(newSubject.data(), newSubject.length()), + m_newMsg(newMsg.data(), newMsg.length()), + m_newOOB(newOOB.data(), newOOB.length()), + m_newCategory(newCategory.data(), newCategory.length()), + m_newSentTime(newSentTime) + { + } + + RAlterPersistentMessage::~RAlterPersistentMessage() + { + } + + void RAlterPersistentMessage::pack(Base::ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + + put(msg, m_destAvatarName); + put(msg, m_destAvatarAddress); + + put(msg, m_messageID); + put(msg, m_alterationAttributes); + put(msg, m_newSenderName); + put(msg, m_newSenderAddress); + put(msg, m_newSubject); + put(msg, m_newMsg); + put(msg, m_newOOB); + put(msg, m_newCategory); + put(msg, m_newSentTime); + } + + RGetPersistentHeaders::RGetPersistentHeaders(unsigned srcAvatarID, const ChatUnicodeString &category) + : GenericRequest(REQUEST_GETPERSISTENTHEADERS), + m_srcAvatarID(srcAvatarID), + m_category(category.string_data, category.string_length) + { + } + + void RGetPersistentHeaders::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_category); + } + + RGetPartialPersistentHeaders::RGetPartialPersistentHeaders(unsigned srcAvatarID, unsigned maxHeaders, bool inDescendingOrder, unsigned sentTimeStart, const ChatUnicodeString &category) + : GenericRequest(REQUEST_PARTIALPERSISTENTHEADERS), + m_srcAvatarID(srcAvatarID), + m_maxHeaders(maxHeaders), + m_inDescendingOrder(inDescendingOrder), + m_sentTimeStart(sentTimeStart), + m_category(category.string_data, category.string_length) + { + } + + void RGetPartialPersistentHeaders::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_maxHeaders); + put(msg, m_inDescendingOrder); + put(msg, m_sentTimeStart); + put(msg, m_category); + } + + RCountPersistentMessages::RCountPersistentMessages(const ChatUnicodeString &avatarName, const ChatUnicodeString &avatarAddress, const ChatUnicodeString &category) + : GenericRequest(REQUEST_COUNTPERSISTENTMESSAGES), + m_avatarName(avatarName.string_data, avatarName.string_length), + m_avatarAddress(avatarAddress.string_data, avatarAddress.string_length), + m_category(category.string_data, category.string_length) + { + } + + void RCountPersistentMessages::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_avatarName); + put(msg, m_avatarAddress); + put(msg, m_category); + } + + RGetPersistentMessage::RGetPersistentMessage(unsigned srcAvatarID, unsigned messageID) + : GenericRequest(REQUEST_GETPERSISTENTMESSAGE), + m_srcAvatarID(srcAvatarID), + m_messageID(messageID) + { + } + + void RGetPersistentMessage::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_messageID); + } + + RGetMultiplePersistentMessages::RGetMultiplePersistentMessages(unsigned srcAvatarID, unsigned maxHeaders, bool inDescendingOrder, unsigned sentTimeStart, const ChatUnicodeString &category) + : GenericRequest(REQUEST_GETMULTIPLEPERSISTENTMESSAGES), + m_srcAvatarID(srcAvatarID), + m_maxHeaders(maxHeaders), + m_inDescendingOrder(inDescendingOrder), + m_sentTimeStart(sentTimeStart), + m_category(category.string_data, category.string_length) + { + } + + void RGetMultiplePersistentMessages::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_maxHeaders); + put(msg, m_inDescendingOrder); + put(msg, m_sentTimeStart); + put(msg, m_category); + } + + RUpdatePersistentMessage::RUpdatePersistentMessage(unsigned srcAvatarID, unsigned messageID, PersistentStatus status) + : GenericRequest(REQUEST_UPDATEPERSISTENTMESSAGE), + m_srcAvatarID(srcAvatarID), + m_messageID(messageID), + m_status(status) + { + } + + void RUpdatePersistentMessage::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_messageID); + put(msg, m_status); + } + + RUpdatePersistentMessages::RUpdatePersistentMessages(unsigned srcAvatarID, PersistentStatus currentStatus, PersistentStatus newStatus, const ChatUnicodeString &category) + : GenericRequest(REQUEST_UPDATEPERSISTENTMESSAGES), + m_srcAvatarID(srcAvatarID), + m_currentStatus(currentStatus), + m_newStatus(newStatus), + m_category(category.string_data, category.string_length) + { + } + + void RUpdatePersistentMessages::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_currentStatus); + put(msg, m_newStatus); + put(msg, m_category); + } + + RClassifyPersistentMessages::RClassifyPersistentMessages(unsigned srcAvatarID, unsigned numIDs, const unsigned *messageIDs, const ChatUnicodeString &newFolder) + : GenericRequest(REQUEST_CHANGEPERSISTENTFOLDER), + m_srcAvatarID(srcAvatarID), + m_newFolder(newFolder.data(), newFolder.length()) + { + for (; numIDs > 0; numIDs--) + { + m_messageIDs.insert(messageIDs[numIDs - 1]); + } + } + + RClassifyPersistentMessages::RClassifyPersistentMessages(const ChatUnicodeString &avatarName, const ChatUnicodeString &avatarAddress, unsigned numIDs, const unsigned *messageIDs, const ChatUnicodeString &newFolder) + : GenericRequest(REQUEST_CHANGEPERSISTENTFOLDER), + m_srcAvatarID(0), + m_avatarName(avatarName.data(), avatarName.length()), + m_avatarAddress(avatarAddress.data(), avatarAddress.length()), + m_newFolder(newFolder.data(), newFolder.length()) + { + for (; numIDs > 0; numIDs--) + { + m_messageIDs.insert(messageIDs[numIDs - 1]); + } + } + + void RClassifyPersistentMessages::pack(ByteStream &msg) + { + std::set::iterator idIter; + + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_messageIDs.size()); + for (idIter = m_messageIDs.begin(); idIter != m_messageIDs.end(); idIter++) + { + put(msg, *idIter); + } + put(msg, m_newFolder); + put(msg, m_avatarName); + put(msg, m_avatarAddress); + } + + RDeleteAllPersistentMessages::RDeleteAllPersistentMessages(const ChatUnicodeString &avatarName, const ChatUnicodeString &avatarAddress, const ChatUnicodeString &category, unsigned olderThan) + : GenericRequest(REQUEST_PURGEPERSISTENTMESSAGES), + m_avatarName(avatarName.string_data, avatarName.string_length), + m_avatarAddress(avatarAddress.string_data, avatarAddress.string_length), + m_category(category.string_data, category.string_length), + m_olderThan(olderThan) + { + } + + void RDeleteAllPersistentMessages::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_avatarName); + put(msg, m_avatarAddress); + put(msg, m_category); + put(msg, m_olderThan); + } + + RUnregisterRoom::RUnregisterRoom(const ChatUnicodeString &destRoomAddress) + : GenericRequest(REQUEST_UNREGISTERROOM), + m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) + { + } + + void RUnregisterRoom::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_destRoomAddress); + } + + RIgnoreStatus::RIgnoreStatus(unsigned srcAvatarID, const ChatUnicodeString &srcAddress) + : GenericRequest(REQUEST_IGNORESTATUS), + m_srcAvatarID(srcAvatarID), + m_srcAddress(srcAddress.string_data, srcAddress.string_length) + { + } + + void RIgnoreStatus::pack(Base::ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_srcAddress); + } + + RFailoverReloginAvatar::RFailoverReloginAvatar(ChatAvatarCore *avatar) + : GenericRequest(REQUEST_FAILOVER_RELOGINAVATAR), + m_avatar(avatar) + { + } + + void RFailoverReloginAvatar::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_avatar->getAvatarID()); + put(msg, m_avatar->getUserID()); + put(msg, m_avatar->getName()); + put(msg, m_avatar->getAddress()); + put(msg, m_avatar->getLoginLocation()); + put(msg, m_avatar->getLoginPriority()); + put(msg, m_avatar->getAttributes()); + } + + RFailoverRecreateRoom::RFailoverRecreateRoom(ChatRoomCore *room) + : GenericRequest(REQUEST_FAILOVER_RECREATEROOM), + m_room(room) + { + } + + void RFailoverRecreateRoom::pack(ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + + // send full room object, except that the avatars sent only + // includes those on the API--"each API for itself" method reduces + // the amount of wasted iterations on the server. + m_room->serializeWithLocalAvatarsOnly(msg); + } + + RFriendConfirm::RFriendConfirm(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, unsigned destAvatarID, bool confirm) + : GenericRequest(REQUEST_CONFIRMFRIEND), + m_srcAvatarID(srcAvatarID), + m_destAvatarID(destAvatarID), + m_confirm(confirm != 0), + m_srcAddress(srcAddress.string_data, srcAddress.string_length) + { + } + + void RFriendConfirm::pack(Base::ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destAvatarID); + put(msg, m_confirm); + put(msg, m_srcAddress); + } + + RFriendConfirmReciprocate::RFriendConfirmReciprocate(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, unsigned destAvatarID, bool confirm) + : GenericRequest(REQUEST_CONFIRMFRIEND_RECIPROCATE), + m_srcAvatarID(srcAvatarID), + m_destAvatarID(destAvatarID), + m_confirm(confirm != 0), + m_srcAddress(srcAddress.string_data, srcAddress.string_length) + { + } + + void RFriendConfirmReciprocate::pack(Base::ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destAvatarID); + put(msg, m_confirm); + put(msg, m_srcAddress); + } + + RGetFanClubHandle::RGetFanClubHandle(unsigned stationID, unsigned fanClubCode) + : GenericRequest(REQUEST_GETFANCLUBHANDLE), + m_stationID(stationID), + m_fanClubCode(fanClubCode) + { + } + + void RGetFanClubHandle::pack(Base::ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_stationID); + put(msg, m_fanClubCode); + } + + RFindAvatarByUID::RFindAvatarByUID(unsigned userID) + : GenericRequest(REQUEST_FINDAVATARBYUID), + m_userID(userID) + { + } + + void RFindAvatarByUID::pack(Base::ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_userID); + } + + RRegistrarGetChatServer::RRegistrarGetChatServer(std::string &hostname, unsigned short port) + : GenericRequest(REQUEST_REGISTRAR_GETCHATSERVER), + m_hostname(narrowToWide(hostname)), + m_port(port) + { + } + + void RRegistrarGetChatServer::pack(Base::ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_hostname); + put(msg, m_port); + } + + RSendApiVersion::RSendApiVersion(unsigned long version) + : GenericRequest(REQUEST_SETAPIVERSION), + m_version(version) + { + } + + void RSendApiVersion::pack(Base::ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, (uint32)m_version); + } + + RAddSnoopAvatar::RAddSnoopAvatar(unsigned srcAvatarID, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress) + : GenericRequest(REQUEST_ADDSNOOPAVATAR), + m_srcAvatarID(srcAvatarID), + m_destAvatarName(destName.string_data, destName.string_length), + m_destAvatarAddress(destAddress.string_data, destAddress.string_length) + { + } + + void RAddSnoopAvatar::pack(Base::ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destAvatarName); + put(msg, m_destAvatarAddress); + } + + RRemoveSnoopAvatar::RRemoveSnoopAvatar(unsigned srcAvatarID, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress) + : GenericRequest(REQUEST_REMOVESNOOPAVATAR), + m_srcAvatarID(srcAvatarID), + m_destAvatarName(destName.string_data, destName.string_length), + m_destAvatarAddress(destAddress.string_data, destAddress.string_length) + { + } + + void RRemoveSnoopAvatar::pack(Base::ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_destAvatarName); + put(msg, m_destAvatarAddress); + } + + RAddSnoopRoom::RAddSnoopRoom(unsigned srcAvatarID, const ChatUnicodeString &roomAddress) + : GenericRequest(REQUEST_ADDSNOOPROOM), + m_srcAvatarID(srcAvatarID), + m_roomAddress(roomAddress.string_data, roomAddress.string_length) + { + } + + void RAddSnoopRoom::pack(Base::ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_roomAddress); + } + + RRemoveSnoopRoom::RRemoveSnoopRoom(unsigned srcAvatarID, const ChatUnicodeString &roomAddress) + : GenericRequest(REQUEST_REMOVESNOOPROOM), + m_srcAvatarID(srcAvatarID), + m_roomAddress(roomAddress.string_data, roomAddress.string_length) + { + } + + void RRemoveSnoopRoom::pack(Base::ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); + put(msg, m_srcAvatarID); + put(msg, m_roomAddress); + } + + RGetSnoopList::RGetSnoopList(unsigned srcAvatarID) + : GenericRequest(REQUEST_GETSNOOPLIST), + m_srcAvatarID(srcAvatarID) + { + } + + void RGetSnoopList::pack(Base::ByteStream &msg) + { + put(msg, m_type); + put(msg, m_track); put(msg, m_srcAvatarID); } - else + + RTransferAvatar::RTransferAvatar(unsigned userID, unsigned newUserID, const ChatUnicodeString &avatarName, const ChatUnicodeString &newAvatarName, const ChatUnicodeString &avatarAddress, const ChatUnicodeString &newAvatarAddress, bool transferPersistentMessages) + : GenericRequest(REQUEST_TRANSFERAVATAR), + m_userID(userID), + m_newUserID(newUserID), + m_avatarName(avatarName.string_data, avatarName.string_length), + m_newAvatarName(newAvatarName.string_data, newAvatarName.string_length), + m_avatarAddress(avatarAddress.string_data, avatarAddress.string_length), + m_newAvatarAddress(newAvatarAddress.string_data, newAvatarAddress.string_length), + m_transferPersistentMessages(transferPersistentMessages) { - put(msg, m_srcName); } - put(msg, m_numDestAvatars); - for (destIndex = 0; destIndex < m_numDestAvatars; destIndex++) + + void RTransferAvatar::pack(Base::ByteStream &msg) { - put(msg, m_destAvatars[destIndex]); - put(msg, m_destAddresses[destIndex]); + put(msg, m_type); + put(msg, m_track); + put(msg, m_userID); + put(msg, m_newUserID); + put(msg, m_avatarName); + put(msg, m_newAvatarName); + put(msg, m_avatarAddress); + put(msg, m_newAvatarAddress); + put(msg, m_transferPersistentMessages); } - put(msg, m_subject); - put(msg, m_msg); - put(msg, m_oob); - put(msg, m_category); - put(msg, m_enforceInboxLimit); - put(msg, m_categoryLimit); -} - -RAlterPersistentMessage::RAlterPersistentMessage(const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, unsigned messageID, unsigned alterationAttributes, const ChatUnicodeString &newSenderName, const ChatUnicodeString &newSenderAddress, const ChatUnicodeString &newSubject, const ChatUnicodeString &newMsg, const ChatUnicodeString &newOOB, const ChatUnicodeString &newCategory, unsigned newSentTime) -: GenericRequest(REQUEST_ALTERPERISTENTMESSAGE), - m_destAvatarName(destAvatarName.data(), destAvatarName.length()), - m_destAvatarAddress(destAvatarAddress.data(), destAvatarAddress.length()), - m_messageID(messageID), - m_alterationAttributes(alterationAttributes), - m_newSenderName(newSenderName.data(), newSenderName.length()), - m_newSenderAddress(newSenderAddress.data(), newSenderAddress.length()), - m_newSubject(newSubject.data(), newSubject.length()), - m_newMsg(newMsg.data(), newMsg.length()), - m_newOOB(newOOB.data(), newOOB.length()), - m_newCategory(newCategory.data(), newCategory.length()), - m_newSentTime(newSentTime) -{ -} - -RAlterPersistentMessage::~RAlterPersistentMessage() -{ -} - -void RAlterPersistentMessage::pack(Base::ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - - put(msg, m_destAvatarName); - put(msg, m_destAvatarAddress); - - put(msg, m_messageID); - put(msg, m_alterationAttributes); - put(msg, m_newSenderName); - put(msg, m_newSenderAddress); - put(msg, m_newSubject); - put(msg, m_newMsg); - put(msg, m_newOOB); - put(msg, m_newCategory); - put(msg, m_newSentTime); -} - -RGetPersistentHeaders::RGetPersistentHeaders(unsigned srcAvatarID, const ChatUnicodeString &category) -: GenericRequest(REQUEST_GETPERSISTENTHEADERS), - m_srcAvatarID(srcAvatarID), - m_category(category.string_data, category.string_length) -{ -} - -void RGetPersistentHeaders::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_category); -} - -RGetPartialPersistentHeaders::RGetPartialPersistentHeaders(unsigned srcAvatarID, unsigned maxHeaders, bool inDescendingOrder, unsigned sentTimeStart, const ChatUnicodeString &category) -: GenericRequest(REQUEST_PARTIALPERSISTENTHEADERS), - m_srcAvatarID(srcAvatarID), - m_maxHeaders(maxHeaders), - m_inDescendingOrder(inDescendingOrder), - m_sentTimeStart(sentTimeStart), - m_category(category.string_data, category.string_length) -{ -} - -void RGetPartialPersistentHeaders::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_maxHeaders); - put(msg, m_inDescendingOrder); - put(msg, m_sentTimeStart); - put(msg, m_category); -} - -RCountPersistentMessages::RCountPersistentMessages(const ChatUnicodeString &avatarName, const ChatUnicodeString &avatarAddress, const ChatUnicodeString &category) -: GenericRequest(REQUEST_COUNTPERSISTENTMESSAGES), - m_avatarName(avatarName.string_data, avatarName.string_length), - m_avatarAddress(avatarAddress.string_data, avatarAddress.string_length), - m_category(category.string_data, category.string_length) -{ -} - -void RCountPersistentMessages::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_avatarName); - put(msg, m_avatarAddress); - put(msg, m_category); -} - -RGetPersistentMessage::RGetPersistentMessage(unsigned srcAvatarID, unsigned messageID) -: GenericRequest(REQUEST_GETPERSISTENTMESSAGE), - m_srcAvatarID(srcAvatarID), - m_messageID(messageID) -{ -} - -void RGetPersistentMessage::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_messageID); -} - -RGetMultiplePersistentMessages::RGetMultiplePersistentMessages(unsigned srcAvatarID, unsigned maxHeaders, bool inDescendingOrder, unsigned sentTimeStart, const ChatUnicodeString &category) -: GenericRequest(REQUEST_GETMULTIPLEPERSISTENTMESSAGES), - m_srcAvatarID(srcAvatarID), - m_maxHeaders(maxHeaders), - m_inDescendingOrder(inDescendingOrder), - m_sentTimeStart(sentTimeStart), - m_category(category.string_data, category.string_length) -{ -} - -void RGetMultiplePersistentMessages::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_maxHeaders); - put(msg, m_inDescendingOrder); - put(msg, m_sentTimeStart); - put(msg, m_category); -} - -RUpdatePersistentMessage::RUpdatePersistentMessage(unsigned srcAvatarID, unsigned messageID, PersistentStatus status) -: GenericRequest(REQUEST_UPDATEPERSISTENTMESSAGE), - m_srcAvatarID(srcAvatarID), - m_messageID(messageID), - m_status(status) -{ -} - -void RUpdatePersistentMessage::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_messageID); - put(msg, m_status); -} - -RUpdatePersistentMessages::RUpdatePersistentMessages(unsigned srcAvatarID, PersistentStatus currentStatus, PersistentStatus newStatus, const ChatUnicodeString &category) -: GenericRequest(REQUEST_UPDATEPERSISTENTMESSAGES), - m_srcAvatarID(srcAvatarID), - m_currentStatus(currentStatus), - m_newStatus(newStatus), - m_category(category.string_data, category.string_length) -{ -} - -void RUpdatePersistentMessages::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_currentStatus); - put(msg, m_newStatus); - put(msg, m_category); -} - -RClassifyPersistentMessages::RClassifyPersistentMessages(unsigned srcAvatarID, unsigned numIDs, const unsigned *messageIDs, const ChatUnicodeString &newFolder) -: GenericRequest(REQUEST_CHANGEPERSISTENTFOLDER), - m_srcAvatarID(srcAvatarID), - m_newFolder(newFolder.data(), newFolder.length()) -{ - for (; numIDs > 0; numIDs--) - { - m_messageIDs.insert(messageIDs[numIDs - 1]); - } -} - -RClassifyPersistentMessages::RClassifyPersistentMessages(const ChatUnicodeString &avatarName, const ChatUnicodeString &avatarAddress, unsigned numIDs, const unsigned *messageIDs, const ChatUnicodeString &newFolder) -: GenericRequest(REQUEST_CHANGEPERSISTENTFOLDER), - m_srcAvatarID(0), - m_avatarName(avatarName.data(), avatarName.length()), - m_avatarAddress(avatarAddress.data(), avatarAddress.length()), - m_newFolder(newFolder.data(), newFolder.length()) -{ - for (; numIDs > 0; numIDs--) - { - m_messageIDs.insert(messageIDs[numIDs - 1]); - } -} - -void RClassifyPersistentMessages::pack(ByteStream &msg) -{ - std::set::iterator idIter; - - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_messageIDs.size()); - for (idIter = m_messageIDs.begin(); idIter != m_messageIDs.end(); idIter++) - { - put(msg, *idIter); - } - put(msg, m_newFolder); - put(msg, m_avatarName); - put(msg, m_avatarAddress); -} - -RDeleteAllPersistentMessages::RDeleteAllPersistentMessages(const ChatUnicodeString &avatarName, const ChatUnicodeString &avatarAddress, const ChatUnicodeString &category, unsigned olderThan) -: GenericRequest(REQUEST_PURGEPERSISTENTMESSAGES), - m_avatarName(avatarName.string_data, avatarName.string_length), - m_avatarAddress(avatarAddress.string_data, avatarAddress.string_length), - m_category(category.string_data, category.string_length), - m_olderThan(olderThan) -{ -} - -void RDeleteAllPersistentMessages::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_avatarName); - put(msg, m_avatarAddress); - put(msg, m_category); - put(msg, m_olderThan); -} - -RUnregisterRoom::RUnregisterRoom(const ChatUnicodeString &destRoomAddress) -: GenericRequest(REQUEST_UNREGISTERROOM), -m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) -{ -} - -void RUnregisterRoom::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_destRoomAddress); -} - -RIgnoreStatus::RIgnoreStatus(unsigned srcAvatarID, const ChatUnicodeString &srcAddress) -: GenericRequest(REQUEST_IGNORESTATUS), -m_srcAvatarID(srcAvatarID), -m_srcAddress(srcAddress.string_data, srcAddress.string_length) -{ -} - -void RIgnoreStatus::pack(Base::ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_srcAddress); -} - -RFailoverReloginAvatar::RFailoverReloginAvatar(ChatAvatarCore *avatar) -: GenericRequest(REQUEST_FAILOVER_RELOGINAVATAR), - m_avatar(avatar) -{ -} - -void RFailoverReloginAvatar::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_avatar->getAvatarID()); - put(msg, m_avatar->getUserID()); - put(msg, m_avatar->getName()); - put(msg, m_avatar->getAddress()); - put(msg, m_avatar->getLoginLocation()); - put(msg, m_avatar->getLoginPriority()); - put(msg, m_avatar->getAttributes()); -} - -RFailoverRecreateRoom::RFailoverRecreateRoom(ChatRoomCore *room) -: GenericRequest(REQUEST_FAILOVER_RECREATEROOM), - m_room(room) -{ -} - -void RFailoverRecreateRoom::pack(ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - - // send full room object, except that the avatars sent only - // includes those on the API--"each API for itself" method reduces - // the amount of wasted iterations on the server. - m_room->serializeWithLocalAvatarsOnly(msg); -} - -RFriendConfirm::RFriendConfirm(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, unsigned destAvatarID, bool confirm) -: GenericRequest(REQUEST_CONFIRMFRIEND), - m_srcAvatarID(srcAvatarID), - m_destAvatarID(destAvatarID), - m_confirm(confirm != 0), - m_srcAddress(srcAddress.string_data, srcAddress.string_length) -{ -} - -void RFriendConfirm::pack(Base::ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destAvatarID); - put(msg, m_confirm); - put(msg, m_srcAddress); -} - -RFriendConfirmReciprocate::RFriendConfirmReciprocate(unsigned srcAvatarID, const ChatUnicodeString &srcAddress, unsigned destAvatarID, bool confirm) -: GenericRequest(REQUEST_CONFIRMFRIEND_RECIPROCATE), -m_srcAvatarID(srcAvatarID), -m_destAvatarID(destAvatarID), -m_confirm(confirm != 0), -m_srcAddress(srcAddress.string_data, srcAddress.string_length) -{ -} - -void RFriendConfirmReciprocate::pack(Base::ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destAvatarID); - put(msg, m_confirm); - put(msg, m_srcAddress); -} - -RGetFanClubHandle::RGetFanClubHandle(unsigned stationID, unsigned fanClubCode) -: GenericRequest(REQUEST_GETFANCLUBHANDLE), - m_stationID(stationID), - m_fanClubCode(fanClubCode) -{ -} - -void RGetFanClubHandle::pack(Base::ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_stationID); - put(msg, m_fanClubCode); -} - -RFindAvatarByUID::RFindAvatarByUID(unsigned userID) -: GenericRequest(REQUEST_FINDAVATARBYUID), - m_userID(userID) -{ -} - -void RFindAvatarByUID::pack(Base::ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_userID); -} - -RRegistrarGetChatServer::RRegistrarGetChatServer(std::string &hostname, unsigned short port) -: GenericRequest(REQUEST_REGISTRAR_GETCHATSERVER), - m_hostname(narrowToWide(hostname)), - m_port(port) -{ -} - -void RRegistrarGetChatServer::pack(Base::ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_hostname); - put(msg, m_port); -} - -RSendApiVersion::RSendApiVersion(unsigned long version) -: GenericRequest(REQUEST_SETAPIVERSION), - m_version(version) -{ -} - -void RSendApiVersion::pack(Base::ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, (uint32)m_version); -} - -RAddSnoopAvatar::RAddSnoopAvatar(unsigned srcAvatarID, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress) -: GenericRequest(REQUEST_ADDSNOOPAVATAR), - m_srcAvatarID(srcAvatarID), - m_destAvatarName(destName.string_data, destName.string_length), - m_destAvatarAddress(destAddress.string_data, destAddress.string_length) -{ -} - -void RAddSnoopAvatar::pack(Base::ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destAvatarName); - put(msg, m_destAvatarAddress); -} - -RRemoveSnoopAvatar::RRemoveSnoopAvatar(unsigned srcAvatarID, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress) -: GenericRequest(REQUEST_REMOVESNOOPAVATAR), - m_srcAvatarID(srcAvatarID), - m_destAvatarName(destName.string_data, destName.string_length), - m_destAvatarAddress(destAddress.string_data, destAddress.string_length) -{ -} - -void RRemoveSnoopAvatar::pack(Base::ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_destAvatarName); - put(msg, m_destAvatarAddress); -} - -RAddSnoopRoom::RAddSnoopRoom(unsigned srcAvatarID, const ChatUnicodeString &roomAddress) -: GenericRequest(REQUEST_ADDSNOOPROOM), - m_srcAvatarID(srcAvatarID), - m_roomAddress(roomAddress.string_data, roomAddress.string_length) -{ -} - -void RAddSnoopRoom::pack(Base::ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_roomAddress); -} - -RRemoveSnoopRoom::RRemoveSnoopRoom(unsigned srcAvatarID, const ChatUnicodeString &roomAddress) -: GenericRequest(REQUEST_REMOVESNOOPROOM), - m_srcAvatarID(srcAvatarID), - m_roomAddress(roomAddress.string_data, roomAddress.string_length) -{ -} - -void RRemoveSnoopRoom::pack(Base::ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); - put(msg, m_roomAddress); -} - -RGetSnoopList::RGetSnoopList(unsigned srcAvatarID) -: GenericRequest(REQUEST_GETSNOOPLIST), - m_srcAvatarID(srcAvatarID) -{ -} - -void RGetSnoopList::pack(Base::ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_srcAvatarID); -} - -RTransferAvatar::RTransferAvatar(unsigned userID, unsigned newUserID, const ChatUnicodeString &avatarName, const ChatUnicodeString &newAvatarName, const ChatUnicodeString &avatarAddress, const ChatUnicodeString &newAvatarAddress, bool transferPersistentMessages) -: GenericRequest(REQUEST_TRANSFERAVATAR), - m_userID(userID), - m_newUserID(newUserID), - m_avatarName(avatarName.string_data, avatarName.string_length), - m_newAvatarName(newAvatarName.string_data, newAvatarName.string_length), - m_avatarAddress(avatarAddress.string_data, avatarAddress.string_length), - m_newAvatarAddress(newAvatarAddress.string_data, newAvatarAddress.string_length), - m_transferPersistentMessages(transferPersistentMessages) -{ -} - -void RTransferAvatar::pack(Base::ByteStream &msg) -{ - put(msg, m_type); - put(msg, m_track); - put(msg, m_userID); - put(msg, m_newUserID); - put(msg, m_avatarName); - put(msg, m_newAvatarName); - put(msg, m_avatarAddress); - put(msg, m_newAvatarAddress); - put(msg, m_transferPersistentMessages); -} - - -}; - +}; \ No newline at end of file diff --git a/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/Response.cpp b/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/Response.cpp index 44a2f0dd..c6b4a23e 100755 --- a/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/Response.cpp +++ b/external/3rd/library/soePlatform/ChatAPI/projects/ChatAPI/Response.cpp @@ -12,1670 +12,1602 @@ #include "AvatarListItem.h" #include "AvatarListItemCore.h" -namespace ChatSystem +namespace ChatSystem { + using namespace Base; + using namespace Plat_Unicode; -using namespace Base; -using namespace Plat_Unicode; - -ResLoginAvatar::ResLoginAvatar(void *user, int avatarLoginPriority) -: GenericResponse(RESPONSE_LOGINAVATAR, CHATRESULT_TIMEOUT, user), - m_avatar(nullptr), - m_submittedPriority(avatarLoginPriority), - m_requiredPriority(INT_MAX) -{ -} - -void ResLoginAvatar::unpack(ByteStream::ReadIterator &iter) -{ - - Plat_Unicode::String email; - unsigned inboxLimit = 0; - - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - - if(m_result == 0) + ResLoginAvatar::ResLoginAvatar(void *user, int avatarLoginPriority) + : GenericResponse(RESPONSE_LOGINAVATAR, CHATRESULT_TIMEOUT, user), + m_avatar(nullptr), + m_submittedPriority(avatarLoginPriority), + m_requiredPriority(INT_MAX) { - m_avatar = new ChatAvatarCore(iter); - + } + + void ResLoginAvatar::unpack(ByteStream::ReadIterator &iter) + { + Plat_Unicode::String email; + unsigned inboxLimit = 0; + + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + + if (m_result == 0) + { + m_avatar = new ChatAvatarCore(iter); + + if (iter.getSize() > 0) + { + get(iter, m_requiredPriority); + } + + if (iter.getSize() > 0) + { + ASSERT_VALID_STRING_LENGTH(get(iter, email)); + get(iter, inboxLimit); + } + + if (m_avatar) + { + m_avatar->setEmail(email); + m_avatar->setInboxLimit(inboxLimit); + } + } + } + + ResTemporaryAvatar::ResTemporaryAvatar(void *user) + : GenericResponse(RESPONSE_TEMPORARYAVATAR, CHATRESULT_TIMEOUT, user) + , m_avatar(nullptr) + { + } + + void ResTemporaryAvatar::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + + if (m_result == 0) + { + m_avatar = new ChatAvatarCore(iter); + } + } + + ResLogoutAvatar::ResLogoutAvatar(void *user, unsigned avatarID) + : GenericResponse(RESPONSE_LOGOUTAVATAR, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID) + { + } + + void ResLogoutAvatar::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResDestroyAvatar::ResDestroyAvatar(void *user, unsigned avatarID) + : GenericResponse(RESPONSE_DESTROYAVATAR, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID) + { + } + + void ResDestroyAvatar::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResGetAvatar::ResGetAvatar(void *user) + : GenericResponse(RESPONSE_GETAVATAR, CHATRESULT_TIMEOUT, user), + m_avatar(nullptr) + { + } + + void ResGetAvatar::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + + if (m_result == 0) + { + Plat_Unicode::String email; + unsigned inboxLimit = 0; + + m_avatar = new ChatAvatarCore(iter); + + if (iter.getSize() > 0) + { + ASSERT_VALID_STRING_LENGTH(get(iter, email)); + get(iter, inboxLimit); + } + + if (m_avatar) + { + m_avatar->setEmail(email); + m_avatar->setInboxLimit(inboxLimit); + } + } + } + + ResGetAnyAvatar::ResGetAnyAvatar(void* user) + : GenericResponse(RESPONSE_GETANYAVATAR, CHATRESULT_TIMEOUT, user) + , m_avatar(nullptr), m_online(0) + { + } + + void ResGetAnyAvatar::unpack(Base::ByteStream::ReadIterator& iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_online); + + if (m_result == CHATRESULT_SUCCESS) + { + Plat_Unicode::String email; + unsigned inboxLimit = 0; + + m_avatar = new ChatAvatarCore(iter); + + if (iter.getSize() > 0) + { + ASSERT_VALID_STRING_LENGTH(get(iter, email)); + get(iter, inboxLimit); + } + + if (m_avatar) + { + m_avatar->setEmail(email); + m_avatar->setInboxLimit(inboxLimit); + } + } + } + + ResAvatarList::ResAvatarList(void *user) + : GenericResponse(RESPONSE_AVATARLIST, CHATRESULT_TIMEOUT, user) + , m_listLength(0) + , m_avatarList(nullptr) + , m_cores(nullptr) + { + } + + ResAvatarList::~ResAvatarList() + { + delete[] m_avatarList; + delete[] m_cores; + } + + void ResAvatarList::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_listLength); + + if (m_listLength > 0) + { + m_avatarList = new AvatarListItem[m_listLength]; + m_cores = new AvatarListItemCore[m_listLength]; + + for (unsigned i = 0; i < m_listLength; i++) + { + m_cores[i].load(iter, &m_avatarList[i]); + } + } + } + + ResSetAvatarAttributes::ResSetAvatarAttributes(void *user) + : GenericResponse(RESPONSE_SETAVATARATTRIBUTES, CHATRESULT_TIMEOUT, user), + m_avatar(nullptr) + { + } + + void ResSetAvatarAttributes::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + + if (m_result == 0) + { + Plat_Unicode::String email; + unsigned inboxLimit = 0; + + m_avatar = new ChatAvatarCore(iter); + + if (iter.getSize() > 0) + { + ASSERT_VALID_STRING_LENGTH(get(iter, email)); + get(iter, inboxLimit); + } + + if (m_avatar) + { + m_avatar->setEmail(email); + m_avatar->setInboxLimit(inboxLimit); + } + } + } + + ResSetAvatarStatusMessage::ResSetAvatarStatusMessage(void *user) + : GenericResponse(RESPONSE_SETSTATUSMESSAGE, CHATRESULT_TIMEOUT, user), + m_avatar(nullptr) + { + } + + void ResSetAvatarStatusMessage::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + + if (m_result == 0) + { + Plat_Unicode::String email; + Plat_Unicode::String statusMessage; + unsigned inboxLimit = 0; + + m_avatar = new ChatAvatarCore(iter); + + if (iter.getSize() > 0) + { + ASSERT_VALID_STRING_LENGTH(get(iter, email)); + get(iter, inboxLimit); + ASSERT_VALID_STRING_LENGTH(get(iter, statusMessage)); + } + + if (m_avatar) + { + m_avatar->setEmail(email); + m_avatar->setInboxLimit(inboxLimit); + m_avatar->setStatusMessage(statusMessage); + } + } + } + + ResSetAvatarForwardingEmail::ResSetAvatarForwardingEmail(void *user) + : GenericResponse(RESPONSE_SETAVATAREMAIL, CHATRESULT_TIMEOUT, user), + m_avatar(nullptr) + { + } + + void ResSetAvatarForwardingEmail::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + + if (m_result == 0) + { + Plat_Unicode::String email; + unsigned inboxLimit = 0; + + m_avatar = new ChatAvatarCore(iter); + + ASSERT_VALID_STRING_LENGTH(get(iter, email)); + get(iter, inboxLimit); + m_avatar->setEmail(email); + m_avatar->setInboxLimit(inboxLimit); + } + } + + ResSetAvatarInboxLimit::ResSetAvatarInboxLimit(void *user) + : GenericResponse(RESPONSE_SETAVATARINBOXLIMIT, CHATRESULT_TIMEOUT, user), + m_avatar(nullptr) + { + } + + void ResSetAvatarInboxLimit::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + + if (m_result == 0) + { + Plat_Unicode::String email; + unsigned inboxLimit = 0; + + m_avatar = new ChatAvatarCore(iter); + + ASSERT_VALID_STRING_LENGTH(get(iter, email)); + get(iter, inboxLimit); + m_avatar->setEmail(email); + m_avatar->setInboxLimit(inboxLimit); + } + } + + ResSearchAvatarKeywords::ResSearchAvatarKeywords(void *user) + : GenericResponse(RESPONSE_SETAVATARKEYWORDS, CHATRESULT_TIMEOUT, user), + m_numMatches(0), + m_avatarMatches(nullptr) + { + } + + void ResSearchAvatarKeywords::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_numMatches); + if (m_result == CHATRESULT_SUCCESS) + { + m_avatarMatches = new ChatAvatarCore*[m_numMatches]; + for (unsigned i = 0; i < m_numMatches; i++) + { + m_avatarMatches[i] = new ChatAvatarCore(iter); + } + } + } + + ResSearchAvatarKeywords::~ResSearchAvatarKeywords() + { + for (unsigned i = 0; i < m_numMatches; i++) + { + delete m_avatarMatches[i]; + } + + delete[] m_avatarMatches; + } + + ResSetAvatarKeywords::ResSetAvatarKeywords(void *user, unsigned avatarID) + : GenericResponse(RESPONSE_SETAVATARKEYWORDS, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID) + { + } + + void ResSetAvatarKeywords::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResGetAvatarKeywords::ResGetAvatarKeywords(void *user, unsigned avatarID) + : GenericResponse(RESPONSE_GETAVATARKEYWORDS, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID), + m_keywordList(nullptr), + m_chatStrList(nullptr), + m_keywordLength(0) + { + } + + ResGetAvatarKeywords::~ResGetAvatarKeywords() + { + delete[] m_keywordList; + delete[] m_chatStrList; + } + + void ResGetAvatarKeywords::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_keywordLength); + if (m_result == CHATRESULT_SUCCESS) + { + m_keywordList = new String[m_keywordLength]; + m_chatStrList = new ChatUnicodeString[m_keywordLength]; + for (unsigned i = 0; i < m_keywordLength; i++) + { + ASSERT_VALID_STRING_LENGTH(get(iter, m_keywordList[i])); + m_chatStrList[i] = m_keywordList[i]; + } + } + } + + ResGetRoom::ResGetRoom(void *user) + : GenericResponse(RESPONSE_GETROOM, CHATRESULT_TIMEOUT, user), + m_room(nullptr), + m_numExtraRooms(0) + { + } + + void ResGetRoom::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + + if (m_result == 0) + { + m_room = new ChatRoomCore(iter); + + // any extra parent rooms sent for caching? + get(iter, m_numExtraRooms); + for (unsigned i = 0; i != m_numExtraRooms; i++) + { + m_setExtraRooms.insert(new ChatRoomCore(iter)); + } + } + } + + ResCreateRoom::ResCreateRoom(void *user, unsigned avatarID) + : GenericResponse(RESPONSE_CREATEROOM, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(avatarID), + m_room(nullptr), + m_numExtraRooms(0) + { + } + + void ResCreateRoom::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + if (m_result == 0) + { + m_room = new ChatRoomCore(iter); + + // any extra parent rooms sent for caching? + get(iter, m_numExtraRooms); + for (unsigned i = 0; i != m_numExtraRooms; i++) + { + m_setExtraRooms.insert(new ChatRoomCore(iter)); + } + } + } + + ResDestroyRoom::ResDestroyRoom(void *user, unsigned avatarID) + : GenericResponse(RESPONSE_DESTROYROOM, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID), + m_roomID(0) + { + } + + void ResDestroyRoom::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_roomID); + } + + ResSendInstantMessage::ResSendInstantMessage(void *user, unsigned avatarID, const ChatUnicodeString &name, const ChatUnicodeString &address) + : GenericResponse(RESPONSE_SENDINSTANTMESSAGE, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID), + m_name(name.string_data, name.string_length), + m_address(address.string_data, address.string_length) + { + } + + void ResSendInstantMessage::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResSendRoomMessage::ResSendRoomMessage(void *user, unsigned avatarID) + : GenericResponse(RESPONSE_SENDROOMMESSAGE, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID), + m_roomID(0) + { + } + + void ResSendRoomMessage::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_roomID); + } + + ResSendBroadcastMessage::ResSendBroadcastMessage(void *user, unsigned avatarID, const ChatUnicodeString &address) + : GenericResponse(RESPONSE_SENDBROADCASTMESSAGE, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID), + m_address(address.string_data, address.string_length) + { + } + + void ResSendBroadcastMessage::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResFilterMessage::ResFilterMessage(void *user, unsigned version) + : GenericResponse(version, CHATRESULT_TIMEOUT, user) + , m_version(version) + { + } + + void ResFilterMessage::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + ASSERT_VALID_STRING_LENGTH(get(iter, m_msg)); + } + + ResAddFriend::ResAddFriend(void *user, unsigned avatarID, const ChatUnicodeString &name, const ChatUnicodeString &address, const ChatUnicodeString &comment) + : GenericResponse(RESPONSE_ADDFRIEND, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID), + m_name(name.string_data, name.string_length), + m_address(address.string_data, address.string_length), + m_comment(comment.string_data, comment.string_length) + { + } + + void ResAddFriend::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResAddFriendReciprocate::ResAddFriendReciprocate(void *user, unsigned avatarID, const ChatUnicodeString &name, const ChatUnicodeString &address, const ChatUnicodeString &comment) + : GenericResponse(RESPONSE_ADDFRIEND_RECIPROCATE, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID), + m_name(name.string_data, name.string_length), + m_address(address.string_data, address.string_length), + m_comment(comment.string_data, comment.string_length) + { + } + + void ResAddFriendReciprocate::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResSetFriendComment::ResSetFriendComment(void *user, unsigned avatarID, const ChatUnicodeString &name, const ChatUnicodeString &address, const ChatUnicodeString &comment) + : GenericResponse(RESPONSE_SETFRIENDCOMMENT, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID), + m_name(name.string_data, name.string_length), + m_address(address.string_data, address.string_length), + m_comment(comment.string_data, comment.string_length) + { + } + + void ResSetFriendComment::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResRemoveFriend::ResRemoveFriend(void *user, unsigned avatarID, const ChatUnicodeString &name, const ChatUnicodeString &address) + : GenericResponse(RESPONSE_REMOVEFRIEND, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID), + m_name(name.string_data, name.string_length), + m_address(address.string_data, address.string_length) + { + } + + void ResRemoveFriend::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + ResRemoveFriendReciprocate::ResRemoveFriendReciprocate(void *user, unsigned avatarID, const ChatUnicodeString &name, const ChatUnicodeString &address) + : GenericResponse(RESPONSE_REMOVEFRIEND_RECIPROCATE, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID), + m_name(name.string_data, name.string_length), + m_address(address.string_data, address.string_length) + { + } + + void ResRemoveFriendReciprocate::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResFriendStatus::ResFriendStatus(void *user, unsigned avatarID) + : GenericResponse(RESPONSE_FRIENDSTATUS, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID), + m_listLength(0), + m_friendList(nullptr), + m_cores(nullptr) + { + } + + ResFriendStatus::~ResFriendStatus() + { + delete[] m_friendList; + delete[] m_cores; + } + + void ResFriendStatus::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_listLength); + + if (m_listLength > 0) + { + m_friendList = new ChatFriendStatus[m_listLength]; + m_cores = new ChatFriendStatusCore[m_listLength]; + + for (unsigned i = 0; i < m_listLength; i++) + { + m_cores[i].load(iter, &m_friendList[i]); + } + } + } + + ResAddIgnore::ResAddIgnore(void *user, unsigned avatarID, const ChatUnicodeString &name, const ChatUnicodeString &address) + : GenericResponse(RESPONSE_ADDIGNORE, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID), + m_name(name.string_data, name.string_length), + m_address(address.string_data, address.string_length) + { + } + + void ResAddIgnore::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResRemoveIgnore::ResRemoveIgnore(void *user, unsigned avatarID, const ChatUnicodeString &name, const ChatUnicodeString &address) + : GenericResponse(RESPONSE_REMOVEIGNORE, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID), + m_name(name.string_data, name.string_length), + m_address(address.string_data, address.string_length) + { + } + + void ResRemoveIgnore::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResIgnoreStatus::ResIgnoreStatus(void *user, unsigned avatarID) + : GenericResponse(RESPONSE_IGNORESTATUS, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID), + m_listLength(0), + m_ignoreList(nullptr), + m_cores(nullptr) + { + } + + ResIgnoreStatus::~ResIgnoreStatus() + { + delete[] m_ignoreList; + delete[] m_cores; + } + + void ResIgnoreStatus::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_listLength); + + if (m_listLength > 0) + { + m_ignoreList = new ChatIgnoreStatus[m_listLength]; + m_cores = new ChatIgnoreStatusCore[m_listLength]; + + for (unsigned i = 0; i < m_listLength; i++) + { + m_cores[i].load(iter, &m_ignoreList[i]); + } + } + } + + ResEnterRoom::ResEnterRoom(void *user, unsigned avatarID, const ChatUnicodeString &destAddress) + : GenericResponse(RESPONSE_ENTERROOM, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID), + m_destAddress(destAddress.string_data, destAddress.string_length), + m_gotRoomObj(false), + m_room(nullptr), + m_numExtraRooms(0) + { + } + + void ResEnterRoom::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_roomID); + get(iter, m_gotRoomObj); + + if (m_gotRoomObj) + { + // we were sent room info to cache, so create a new ChatRoomCore! + m_room = new ChatRoomCore(iter); + + // any extra parent rooms sent for caching? + get(iter, m_numExtraRooms); + for (unsigned i = 0; i != m_numExtraRooms; i++) + { + m_setExtraRooms.insert(new ChatRoomCore(iter)); + } + } + } + + ResAllowRoomEntry::ResAllowRoomEntry(void *user, unsigned srcAvatarID, const ChatUnicodeString &destRoomAddress) + : GenericResponse(RESPONSE_ALLOWROOMENTRY, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_roomID(0), + m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) + { + } + + void ResAllowRoomEntry::unpack(Base::ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_roomID); + } + + ResLeaveRoom::ResLeaveRoom(void *user, unsigned avatarID, const ChatUnicodeString &destAddress) + : GenericResponse(RESPONSE_LEAVEROOM, CHATRESULT_TIMEOUT, user), + m_avatarID(avatarID), + m_destAddress(destAddress.string_data, destAddress.string_length) + { + } + + void ResLeaveRoom::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_roomID); + } + + ResAddModerator::ResAddModerator(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_ADDMODERATOR, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_destRoomID(0) + { + } + + void ResAddModerator::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_destRoomID); + } + + ResRemoveModerator::ResRemoveModerator(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_REMOVEMODERATOR, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_destRoomID(0) + { + } + + void ResRemoveModerator::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_destRoomID); + } + + ResAddTemporaryModerator::ResAddTemporaryModerator(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_ADDTEMPORARYMODERATOR, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_destRoomID(0) + { + } + + void ResAddTemporaryModerator::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_destRoomID); + } + + ResRemoveTemporaryModerator::ResRemoveTemporaryModerator(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_REMOVETEMPORARYMODERATOR, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_destRoomID(0) + { + } + + void ResRemoveTemporaryModerator::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_destRoomID); + } + + ResAddBan::ResAddBan(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_ADDBAN, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_destRoomID(0) + { + } + + void ResAddBan::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_destRoomID); + } + + ResRemoveBan::ResRemoveBan(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_REMOVEBAN, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_destRoomID(0) + { + } + + void ResRemoveBan::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_destRoomID); + } + + ResAddInvite::ResAddInvite(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_ADDINVITE, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_destRoomID(0) + { + } + + void ResAddInvite::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_destRoomID); + } + + ResRemoveInvite::ResRemoveInvite(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_REMOVEINVITE, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_destRoomID(0) + { + } + + void ResRemoveInvite::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_destRoomID); + } + + ResGrantVoice::ResGrantVoice(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_GRANTVOICE, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_destRoomID(0) + { + } + + void ResGrantVoice::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_destRoomID); + } + + ResRevokeVoice::ResRevokeVoice(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_REVOKEVOICE, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_destRoomID(0) + { + } + + void ResRevokeVoice::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_destRoomID); + } + + ResKickAvatar::ResKickAvatar(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_KICKAVATAR, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_destRoomID(0) + { + } + + void ResKickAvatar::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_destRoomID); + } + + ResSetRoomParams::ResSetRoomParams(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_SETROOMPARAMS, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_destRoomID(0) + { + } + + void ResSetRoomParams::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_destRoomID); + } + + ResChangeRoomOwner::ResChangeRoomOwner(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_CHANGEROOMOWNER, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_destRoomID(0) + { + } + + void ResChangeRoomOwner::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_destRoomID); + } + + ResGetRoomSummaries::ResGetRoomSummaries(void *user) + : GenericResponse(RESPONSE_GETROOMSUMMARIES, CHATRESULT_TIMEOUT, user), + m_numRooms(0), + m_roomSummaries(nullptr) + { + } + + ResGetRoomSummaries::~ResGetRoomSummaries() + { + delete[] m_roomSummaries; + } + + void ResGetRoomSummaries::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_numRooms); + + if (m_numRooms > 0) + { + String tempStr; + unsigned tempNum; + + m_roomSummaries = new RoomSummary[m_numRooms]; + + for (unsigned i = 0; i != m_numRooms; i++) + { + // process RoomSummary objects from message + ASSERT_VALID_STRING_LENGTH(get(iter, tempStr)); + m_roomSummaries[i].setRoomAddress(ChatUnicodeString(tempStr.data(), tempStr.size())); + ASSERT_VALID_STRING_LENGTH(get(iter, tempStr)); + m_roomSummaries[i].setRoomTopic(ChatUnicodeString(tempStr.data(), tempStr.size())); + get(iter, tempNum); + m_roomSummaries[i].setRoomAttributes(tempNum); + get(iter, tempNum); + m_roomSummaries[i].setRoomCurSize(tempNum); + get(iter, tempNum); + m_roomSummaries[i].setRoomMaxSize(tempNum); + } + } + } + + ResSendPersistentMessage::ResSendPersistentMessage(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_SENDPERSISTENTMESSAGE, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_messageID(0) + { + } + + void ResSendPersistentMessage::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + + if (iter.getSize() > 0) + { + get(iter, m_messageID); + } + } + + ResSendMultiplePersistentMessages::ResSendMultiplePersistentMessages(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_SENDMULTIPLEPERSISTENTMESSAGES, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_numResults(0) + { + } + + void ResSendMultiplePersistentMessages::unpack(ByteStream::ReadIterator &iter) + { + unsigned resultIndex; + + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + + get(iter, m_numResults); + + m_resultVector.resize(m_numResults); + m_messageIDvector.resize(m_numResults); + + for (resultIndex = 0; resultIndex < m_numResults; resultIndex++) + { + get(iter, m_resultVector[resultIndex]); + } + + if (iter.getSize() > 0) + { + for (resultIndex = 0; resultIndex < m_numResults; resultIndex++) + { + get(iter, m_messageIDvector[resultIndex]); + } + } + } + + ResAlterPersistentMessage::ResAlterPersistentMessage(const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, unsigned messageID, void *user) + : GenericResponse(RESPONSE_ALTERPERSISTENTMESSAGE, CHATRESULT_TIMEOUT, user), + m_destAvatarName(destAvatarName.data(), destAvatarName.length()), + m_destAvatarAddress(destAvatarAddress.data(), destAvatarAddress.length()), + m_messageID(messageID) + { + } + + ResAlterPersistentMessage::~ResAlterPersistentMessage() + { + } + + void ResAlterPersistentMessage::unpack(Base::ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResGetPersistentMessage::ResGetPersistentMessage(void *user, unsigned srcAvatarID, unsigned messageID) + : GenericResponse(RESPONSE_GETPERSISTENTMESSAGE, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_messageID(messageID), + m_core(nullptr), + m_header(nullptr) + { + } + + ResGetPersistentMessage::~ResGetPersistentMessage() + { + delete m_header; + delete m_core; + } + void ResGetPersistentMessage::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + if (m_result == 0) + { + m_header = new PersistentHeader; + m_core = new PersistentHeaderCore; + m_core->load(iter, m_header); + ASSERT_VALID_STRING_LENGTH(get(iter, m_msg)); + ASSERT_VALID_STRING_LENGTH(get(iter, m_oob)); + + if (iter.getSize() > 0) + { + m_core->setFolder(iter); + m_core->setCategory(iter); + } + } + } + + ResGetMultiplePersistentMessages::ResGetMultiplePersistentMessages(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_GETMULTIPLEPERSISTENTMESSAGES, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_messages(nullptr) + { + } + + ResGetMultiplePersistentMessages::~ResGetMultiplePersistentMessages() + { + unsigned i; + + if (m_messages) + { + for (i = 0; i < m_listLength; i++) + { + delete m_messages[i]; + } + } + + delete[] m_messages; + } + + PersistentMessage ** const ResGetMultiplePersistentMessages::getList() const + { + return (PersistentMessage **)m_messages; + } + + void ResGetMultiplePersistentMessages::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_listLength); + + if (m_listLength > 0) + { + unsigned i = 0; + + m_messages = new PersistentMessageCore*[m_listLength]; + + for (i = 0; i < m_listLength; i++) + { + m_messages[i] = new PersistentMessageCore(); + m_messages[i]->load(iter); + } + } + } + + ResGetPersistentHeaders::ResGetPersistentHeaders(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_GETPERSISTENTHEADERS, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_listLength(0), + m_headers(nullptr), + m_cores(nullptr), + m_listLength(0) + { + } + + ResGetPersistentHeaders::~ResGetPersistentHeaders() + { + delete[] m_headers; + delete[] m_cores; + } + + void ResGetPersistentHeaders::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_listLength); + + if (m_listLength > 0) + { + unsigned i = 0; + + this->m_headers = new PersistentHeader[m_listLength]; + m_cores = new PersistentHeaderCore[m_listLength]; + + for (i = 0; i < m_listLength; i++) + { + m_cores[i].load(iter, &m_headers[i]); + } + + if (iter.getSize() > 0) + { + for (i = 0; i < m_listLength; i++) + { + m_cores[i].setFolder(iter); + m_cores[i].setCategory(iter); + } + } + } + } + + ResGetPartialPersistentHeaders::ResGetPartialPersistentHeaders(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_PARTIALPERSISTENTHEADERS, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_listLength(0), + m_headers(nullptr), + m_cores(nullptr) + { + } + + ResGetPartialPersistentHeaders::~ResGetPartialPersistentHeaders() + { + delete[] m_headers; + delete[] m_cores; + } + + void ResGetPartialPersistentHeaders::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_listLength); + + if (m_listLength > 0) + { + unsigned i = 0; + + m_headers = new PersistentHeader[m_listLength]; + m_cores = new PersistentHeaderCore[m_listLength]; + + for (i = 0; i < m_listLength; i++) + { + m_cores[i].load(iter, &m_headers[i]); + } + + if (iter.getSize() > 0) + { + for (i = 0; i < m_listLength; i++) + { + m_cores[i].setFolder(iter); + m_cores[i].setCategory(iter); + } + } + } + } + + ResCountPersistentMessages::ResCountPersistentMessages(void *user, const ChatUnicodeString &avatarName, const ChatUnicodeString &avatarAddress) + : GenericResponse(RESPONSE_COUNTPERSISTENTMESSAGES, CHATRESULT_TIMEOUT, user), + m_avatarName(avatarName.string_data, avatarName.string_length), + m_avatarAddress(avatarAddress.string_data, avatarAddress.string_length), + m_numMessages(0) + { + } + + void ResCountPersistentMessages::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_numMessages); + } + + ResUpdatePersistentMessage::ResUpdatePersistentMessage(void *user, unsigned srcAvatarID, unsigned messageID) + : GenericResponse(RESPONSE_UPDATEPERSISTENTMESSAGE, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_messageID(messageID) + { + } + + void ResUpdatePersistentMessage::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResUpdatePersistentMessages::ResUpdatePersistentMessages(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_UPDATEPERSISTENTMESSAGES, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID) + { + } + + void ResUpdatePersistentMessages::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResClassifyPersistentMessages::ResClassifyPersistentMessages(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_CHANGEPERSISTENTFOLDER, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID) + { + } + + void ResClassifyPersistentMessages::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResDeleteAllPersistentMessages::ResDeleteAllPersistentMessages(void *user, const ChatUnicodeString &avatarName, const ChatUnicodeString &avatarAddress) + : GenericResponse(RESPONSE_PURGEPERSISTENTMESSAGES, CHATRESULT_TIMEOUT, user), + m_avatarName(avatarName.string_data, avatarName.string_length), + m_avatarAddress(avatarAddress.string_data, avatarAddress.string_length), + m_numDeleted(0) + { + } + + void ResDeleteAllPersistentMessages::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_numDeleted); + } + + ResUnregisterRoom::ResUnregisterRoom(void *user) + : GenericResponse(RESPONSE_UNREGISTERROOM, CHATRESULT_TIMEOUT, user), + m_destRoomID(0) + { + } + + void ResUnregisterRoom::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_destRoomID); + } + + ResFailoverReloginAvatar::ResFailoverReloginAvatar(unsigned avatarID) + : GenericResponse(RESPONSE_FAILOVER_RELOGINAVATAR, CHATRESULT_TIMEOUT, nullptr), + m_avatarID(avatarID) + { + } + + void ResFailoverReloginAvatar::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + if (iter.getSize() > 0) { get(iter, m_requiredPriority); } + } - if (iter.getSize() > 0) + ResFailoverRecreateRoom::ResFailoverRecreateRoom(unsigned roomID, bool forced) + : GenericResponse(RESPONSE_FAILOVER_RECREATEROOM, CHATRESULT_TIMEOUT, nullptr), + m_roomID(roomID), + m_room(nullptr), + m_forced(forced) + { + } + + void ResFailoverRecreateRoom::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + + if (m_result == 0) { - ASSERT_VALID_STRING_LENGTH(get(iter, email)); - get(iter, inboxLimit); - } - - if (m_avatar) - { - m_avatar->setEmail(email); - m_avatar->setInboxLimit(inboxLimit); - - } - } -} - -ResTemporaryAvatar::ResTemporaryAvatar(void *user) -: GenericResponse(RESPONSE_TEMPORARYAVATAR, CHATRESULT_TIMEOUT, user) -, m_avatar(nullptr) -{ -} - -void ResTemporaryAvatar::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - - if(m_result == 0) - { - m_avatar = new ChatAvatarCore(iter); - } -} - -ResLogoutAvatar::ResLogoutAvatar(void *user, unsigned avatarID) -: GenericResponse(RESPONSE_LOGOUTAVATAR, CHATRESULT_TIMEOUT, user), - m_avatarID(avatarID) -{ -} - -void ResLogoutAvatar::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResDestroyAvatar::ResDestroyAvatar(void *user, unsigned avatarID) -: GenericResponse(RESPONSE_DESTROYAVATAR, CHATRESULT_TIMEOUT, user), - m_avatarID(avatarID) -{ -} - -void ResDestroyAvatar::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResGetAvatar::ResGetAvatar(void *user) -: GenericResponse(RESPONSE_GETAVATAR, CHATRESULT_TIMEOUT, user), - m_avatar(nullptr) -{ -} - -void ResGetAvatar::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - - if (m_result == 0) - { - Plat_Unicode::String email; - unsigned inboxLimit = 0; - - m_avatar = new ChatAvatarCore(iter); - - if (iter.getSize() > 0) - { - ASSERT_VALID_STRING_LENGTH(get(iter, email)); - get(iter, inboxLimit); - } - - if (m_avatar) - { - m_avatar->setEmail(email); - m_avatar->setInboxLimit(inboxLimit); - } - } -} - -ResGetAnyAvatar::ResGetAnyAvatar(void* user) - : GenericResponse( RESPONSE_GETANYAVATAR, CHATRESULT_TIMEOUT, user ) - , m_avatar( nullptr ) -{ -} - -void ResGetAnyAvatar::unpack(Base::ByteStream::ReadIterator& iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_online); - - if ( m_result == CHATRESULT_SUCCESS ) - { - Plat_Unicode::String email; - unsigned inboxLimit = 0; - - m_avatar = new ChatAvatarCore(iter); - - if ( iter.getSize() > 0) - { - ASSERT_VALID_STRING_LENGTH(get(iter, email)); - get(iter, inboxLimit); - - } - - if ( m_avatar ) - { - m_avatar->setEmail(email); - m_avatar->setInboxLimit(inboxLimit); - } - } -} - -ResAvatarList::ResAvatarList(void *user) -: GenericResponse(RESPONSE_AVATARLIST, CHATRESULT_TIMEOUT, user) -, m_listLength(0) -, m_avatarList(nullptr) -, m_cores(nullptr) -{ -} - -ResAvatarList::~ResAvatarList() -{ - delete[] m_avatarList; - delete[] m_cores; -} - -void ResAvatarList::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_listLength); - - if(m_listLength > 0) - { - m_avatarList = new AvatarListItem[m_listLength]; - m_cores = new AvatarListItemCore[m_listLength]; - - for(unsigned i = 0; i < m_listLength; i++) - { - m_cores[i].load(iter, &m_avatarList[i]); - } - } -} - -ResSetAvatarAttributes::ResSetAvatarAttributes(void *user) -: GenericResponse(RESPONSE_SETAVATARATTRIBUTES, CHATRESULT_TIMEOUT, user), - m_avatar(nullptr) -{ -} - -void ResSetAvatarAttributes::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - - if (m_result == 0) - { - Plat_Unicode::String email; - unsigned inboxLimit = 0; - - m_avatar = new ChatAvatarCore(iter); - - if (iter.getSize() > 0) - { - ASSERT_VALID_STRING_LENGTH(get(iter, email)); - get(iter, inboxLimit); - } - - if (m_avatar) - { - m_avatar->setEmail(email); - m_avatar->setInboxLimit(inboxLimit); - } - } -} - -ResSetAvatarStatusMessage::ResSetAvatarStatusMessage(void *user) -: GenericResponse(RESPONSE_SETSTATUSMESSAGE, CHATRESULT_TIMEOUT, user), -m_avatar(nullptr) -{ -} - -void ResSetAvatarStatusMessage::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - - if (m_result == 0) - { - Plat_Unicode::String email; - Plat_Unicode::String statusMessage; - unsigned inboxLimit = 0; - - m_avatar = new ChatAvatarCore(iter); - - if (iter.getSize() > 0) - { - ASSERT_VALID_STRING_LENGTH(get(iter, email)); - get(iter, inboxLimit); - ASSERT_VALID_STRING_LENGTH(get(iter, statusMessage)); - } - - if (m_avatar) - { - m_avatar->setEmail(email); - m_avatar->setInboxLimit(inboxLimit); - m_avatar->setStatusMessage(statusMessage); - } - } -} - -ResSetAvatarForwardingEmail::ResSetAvatarForwardingEmail(void *user) -: GenericResponse(RESPONSE_SETAVATAREMAIL, CHATRESULT_TIMEOUT, user), - m_avatar(nullptr) -{ -} - -void ResSetAvatarForwardingEmail::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - - if (m_result == 0) - { - Plat_Unicode::String email; - unsigned inboxLimit = 0; - - m_avatar = new ChatAvatarCore(iter); - - ASSERT_VALID_STRING_LENGTH(get(iter, email)); - get(iter, inboxLimit); - m_avatar->setEmail(email); - m_avatar->setInboxLimit(inboxLimit); - } -} - -ResSetAvatarInboxLimit::ResSetAvatarInboxLimit(void *user) -: GenericResponse(RESPONSE_SETAVATARINBOXLIMIT, CHATRESULT_TIMEOUT, user), - m_avatar(nullptr) -{ -} - -void ResSetAvatarInboxLimit::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - - if (m_result == 0) - { - Plat_Unicode::String email; - unsigned inboxLimit = 0; - - m_avatar = new ChatAvatarCore(iter); - - ASSERT_VALID_STRING_LENGTH(get(iter, email)); - get(iter, inboxLimit); - m_avatar->setEmail(email); - m_avatar->setInboxLimit(inboxLimit); - } -} - -ResSearchAvatarKeywords::ResSearchAvatarKeywords(void *user) -: GenericResponse(RESPONSE_SETAVATARKEYWORDS, CHATRESULT_TIMEOUT, user), - m_numMatches(0), - m_avatarMatches(nullptr) -{ -} - -void ResSearchAvatarKeywords::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_numMatches); - if (m_result == CHATRESULT_SUCCESS) - { - m_avatarMatches = new ChatAvatarCore*[m_numMatches]; - for (unsigned i = 0; i < m_numMatches; i++) - { - m_avatarMatches[i] = new ChatAvatarCore(iter); - } - } -} - -ResSearchAvatarKeywords::~ResSearchAvatarKeywords() -{ - for (unsigned i = 0; i < m_numMatches; i++) - { - delete m_avatarMatches[i]; - } - - delete[] m_avatarMatches; -} - -ResSetAvatarKeywords::ResSetAvatarKeywords(void *user, unsigned avatarID) -: GenericResponse(RESPONSE_SETAVATARKEYWORDS, CHATRESULT_TIMEOUT, user), - m_avatarID(avatarID) -{ -} - -void ResSetAvatarKeywords::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResGetAvatarKeywords::ResGetAvatarKeywords(void *user, unsigned avatarID) -: GenericResponse(RESPONSE_GETAVATARKEYWORDS, CHATRESULT_TIMEOUT, user), - m_avatarID(avatarID), - m_keywordList(nullptr), - m_chatStrList(nullptr) -{ -} - -ResGetAvatarKeywords::~ResGetAvatarKeywords() -{ - delete[] m_keywordList; - delete[] m_chatStrList; -} - -void ResGetAvatarKeywords::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_keywordLength); - if(m_result == CHATRESULT_SUCCESS) - { - m_keywordList = new String[m_keywordLength]; - m_chatStrList = new ChatUnicodeString[m_keywordLength]; - for(unsigned i = 0; i < m_keywordLength; i++) - { - ASSERT_VALID_STRING_LENGTH(get(iter, m_keywordList[i])); - m_chatStrList[i] = m_keywordList[i]; - } - } -} - -ResGetRoom::ResGetRoom(void *user) -: GenericResponse(RESPONSE_GETROOM, CHATRESULT_TIMEOUT, user), - m_room(nullptr), - m_numExtraRooms(0) -{ -} - -void ResGetRoom::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - - if (m_result == 0) - { - m_room = new ChatRoomCore(iter); - - // any extra parent rooms sent for caching? - get(iter, m_numExtraRooms); - for (unsigned i = 0; i != m_numExtraRooms; i++) - { - m_setExtraRooms.insert(new ChatRoomCore(iter)); - } - } -} - -ResCreateRoom::ResCreateRoom(void *user, unsigned avatarID) -: GenericResponse(RESPONSE_CREATEROOM, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(avatarID), - m_room(nullptr), - m_numExtraRooms(0) -{ -} - -void ResCreateRoom::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - if (m_result == 0) - { - m_room = new ChatRoomCore(iter); - - // any extra parent rooms sent for caching? - get(iter, m_numExtraRooms); - for (unsigned i = 0; i != m_numExtraRooms; i++) - { - m_setExtraRooms.insert(new ChatRoomCore(iter)); - } - } -} - -ResDestroyRoom::ResDestroyRoom(void *user, unsigned avatarID) -: GenericResponse(RESPONSE_DESTROYROOM, CHATRESULT_TIMEOUT, user), - m_avatarID(avatarID), - m_roomID(0) -{ -} - -void ResDestroyRoom::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_roomID); -} - -ResSendInstantMessage::ResSendInstantMessage(void *user, unsigned avatarID, const ChatUnicodeString &name, const ChatUnicodeString &address) -: GenericResponse(RESPONSE_SENDINSTANTMESSAGE, CHATRESULT_TIMEOUT, user), - m_avatarID(avatarID), - m_name(name.string_data, name.string_length), - m_address(address.string_data, address.string_length) -{ -} - -void ResSendInstantMessage::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResSendRoomMessage::ResSendRoomMessage(void *user, unsigned avatarID) -: GenericResponse(RESPONSE_SENDROOMMESSAGE, CHATRESULT_TIMEOUT, user), - m_avatarID(avatarID), - m_roomID(0) -{ -} - -void ResSendRoomMessage::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_roomID); -} - -ResSendBroadcastMessage::ResSendBroadcastMessage(void *user, unsigned avatarID, const ChatUnicodeString &address) -: GenericResponse(RESPONSE_SENDBROADCASTMESSAGE, CHATRESULT_TIMEOUT, user), - m_avatarID(avatarID), - m_address(address.string_data, address.string_length) -{ -} - -void ResSendBroadcastMessage::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResFilterMessage::ResFilterMessage(void *user, unsigned version) -: GenericResponse(version, CHATRESULT_TIMEOUT, user) -,m_version(version) -{ -} - -void ResFilterMessage::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - ASSERT_VALID_STRING_LENGTH(get(iter, m_msg)); -} - -ResAddFriend::ResAddFriend(void *user, unsigned avatarID, const ChatUnicodeString &name, const ChatUnicodeString &address, const ChatUnicodeString &comment) -: GenericResponse(RESPONSE_ADDFRIEND, CHATRESULT_TIMEOUT, user), - m_avatarID(avatarID), - m_name(name.string_data, name.string_length), - m_address(address.string_data, address.string_length), - m_comment(comment.string_data, comment.string_length) -{ -} - -void ResAddFriend::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResAddFriendReciprocate::ResAddFriendReciprocate(void *user, unsigned avatarID, const ChatUnicodeString &name, const ChatUnicodeString &address, const ChatUnicodeString &comment) -: GenericResponse(RESPONSE_ADDFRIEND_RECIPROCATE, CHATRESULT_TIMEOUT, user), -m_avatarID(avatarID), -m_name(name.string_data, name.string_length), -m_address(address.string_data, address.string_length), -m_comment(comment.string_data, comment.string_length) -{ -} - -void ResAddFriendReciprocate::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - - -ResSetFriendComment::ResSetFriendComment(void *user, unsigned avatarID, const ChatUnicodeString &name, const ChatUnicodeString &address, const ChatUnicodeString &comment) -: GenericResponse(RESPONSE_SETFRIENDCOMMENT, CHATRESULT_TIMEOUT, user), - m_avatarID(avatarID), - m_name(name.string_data, name.string_length), - m_address(address.string_data, address.string_length), - m_comment(comment.string_data, comment.string_length) -{ -} - -void ResSetFriendComment::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResRemoveFriend::ResRemoveFriend(void *user, unsigned avatarID, const ChatUnicodeString &name, const ChatUnicodeString &address) -: GenericResponse(RESPONSE_REMOVEFRIEND, CHATRESULT_TIMEOUT, user), - m_avatarID(avatarID), - m_name(name.string_data, name.string_length), - m_address(address.string_data, address.string_length) -{ -} - -void ResRemoveFriend::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} -ResRemoveFriendReciprocate::ResRemoveFriendReciprocate(void *user, unsigned avatarID, const ChatUnicodeString &name, const ChatUnicodeString &address) -: GenericResponse(RESPONSE_REMOVEFRIEND_RECIPROCATE, CHATRESULT_TIMEOUT, user), -m_avatarID(avatarID), -m_name(name.string_data, name.string_length), -m_address(address.string_data, address.string_length) -{ -} - -void ResRemoveFriendReciprocate::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResFriendStatus::ResFriendStatus(void *user, unsigned avatarID) -: GenericResponse(RESPONSE_FRIENDSTATUS, CHATRESULT_TIMEOUT, user), - m_avatarID(avatarID), - m_listLength(0), - m_friendList(nullptr), - m_cores(nullptr) -{ -} - -ResFriendStatus::~ResFriendStatus() -{ - delete[] m_friendList; - delete[] m_cores; -} - -void ResFriendStatus::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_listLength); - - if(m_listLength > 0) - { - m_friendList = new ChatFriendStatus[m_listLength]; - m_cores = new ChatFriendStatusCore[m_listLength]; - - for(unsigned i = 0; i < m_listLength; i++) - { - m_cores[i].load(iter, &m_friendList[i]); - } - } -} - -ResAddIgnore::ResAddIgnore(void *user, unsigned avatarID, const ChatUnicodeString &name, const ChatUnicodeString &address) -: GenericResponse(RESPONSE_ADDIGNORE, CHATRESULT_TIMEOUT, user), - m_avatarID(avatarID), - m_name(name.string_data, name.string_length), - m_address(address.string_data, address.string_length) -{ -} - -void ResAddIgnore::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResRemoveIgnore::ResRemoveIgnore(void *user, unsigned avatarID, const ChatUnicodeString &name, const ChatUnicodeString &address) -: GenericResponse(RESPONSE_REMOVEIGNORE, CHATRESULT_TIMEOUT, user), - m_avatarID(avatarID), - m_name(name.string_data, name.string_length), - m_address(address.string_data, address.string_length) -{ -} - -void ResRemoveIgnore::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResIgnoreStatus::ResIgnoreStatus(void *user, unsigned avatarID) -: GenericResponse(RESPONSE_IGNORESTATUS, CHATRESULT_TIMEOUT, user), - m_avatarID(avatarID), - m_listLength(0), - m_ignoreList(nullptr), - m_cores(nullptr) -{ -} - -ResIgnoreStatus::~ResIgnoreStatus() -{ - delete[] m_ignoreList; - delete[] m_cores; -} - -void ResIgnoreStatus::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_listLength); - - if(m_listLength > 0) - { - m_ignoreList = new ChatIgnoreStatus[m_listLength]; - m_cores = new ChatIgnoreStatusCore[m_listLength]; - - for(unsigned i = 0; i < m_listLength; i++) - { - m_cores[i].load(iter, &m_ignoreList[i]); - } - } -} - -ResEnterRoom::ResEnterRoom(void *user, unsigned avatarID, const ChatUnicodeString &destAddress) -: GenericResponse(RESPONSE_ENTERROOM, CHATRESULT_TIMEOUT, user), - m_avatarID(avatarID), - m_destAddress(destAddress.string_data, destAddress.string_length), - m_gotRoomObj(false), - m_room(nullptr), - m_numExtraRooms(0) -{ -} - -void ResEnterRoom::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_roomID); - get(iter, m_gotRoomObj); - - if (m_gotRoomObj) - { - // we were sent room info to cache, so create a new ChatRoomCore! - m_room = new ChatRoomCore(iter); - - // any extra parent rooms sent for caching? - get(iter, m_numExtraRooms); - for (unsigned i = 0; i != m_numExtraRooms; i++) - { - m_setExtraRooms.insert(new ChatRoomCore(iter)); - } - } -} - -ResAllowRoomEntry::ResAllowRoomEntry(void *user, unsigned srcAvatarID, const ChatUnicodeString &destRoomAddress) - : GenericResponse(RESPONSE_ALLOWROOMENTRY, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_roomID(0), - m_destRoomAddress(destRoomAddress.string_data, destRoomAddress.string_length) -{ -} - -void ResAllowRoomEntry::unpack(Base::ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_roomID); -} - -ResLeaveRoom::ResLeaveRoom(void *user, unsigned avatarID, const ChatUnicodeString &destAddress) -: GenericResponse(RESPONSE_LEAVEROOM, CHATRESULT_TIMEOUT, user), - m_avatarID(avatarID), - m_destAddress(destAddress.string_data, destAddress.string_length) -{ -} - -void ResLeaveRoom::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_roomID); -} - -ResAddModerator::ResAddModerator(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_ADDMODERATOR, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_destRoomID(0) -{ -} - -void ResAddModerator::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_destRoomID); -} - -ResRemoveModerator::ResRemoveModerator(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_REMOVEMODERATOR, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_destRoomID(0) -{ -} - -void ResRemoveModerator::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_destRoomID); -} - -ResAddTemporaryModerator::ResAddTemporaryModerator(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_ADDTEMPORARYMODERATOR, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_destRoomID(0) -{ -} - -void ResAddTemporaryModerator::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_destRoomID); -} - -ResRemoveTemporaryModerator::ResRemoveTemporaryModerator(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_REMOVETEMPORARYMODERATOR, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_destRoomID(0) -{ -} - -void ResRemoveTemporaryModerator::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_destRoomID); -} - -ResAddBan::ResAddBan(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_ADDBAN, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_destRoomID(0) -{ -} - -void ResAddBan::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_destRoomID); -} - -ResRemoveBan::ResRemoveBan(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_REMOVEBAN, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_destRoomID(0) -{ -} - -void ResRemoveBan::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_destRoomID); -} - -ResAddInvite::ResAddInvite(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_ADDINVITE, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_destRoomID(0) -{ -} - -void ResAddInvite::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_destRoomID); -} - -ResRemoveInvite::ResRemoveInvite(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_REMOVEINVITE, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_destRoomID(0) -{ -} - -void ResRemoveInvite::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_destRoomID); -} - -ResGrantVoice::ResGrantVoice(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_GRANTVOICE, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_destRoomID(0) -{ -} - -void ResGrantVoice::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_destRoomID); -} - -ResRevokeVoice::ResRevokeVoice(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_REVOKEVOICE, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_destRoomID(0) -{ -} - -void ResRevokeVoice::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_destRoomID); -} - -ResKickAvatar::ResKickAvatar(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_KICKAVATAR, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_destRoomID(0) -{ -} - -void ResKickAvatar::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_destRoomID); -} - -ResSetRoomParams::ResSetRoomParams(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_SETROOMPARAMS, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_destRoomID(0) -{ -} - -void ResSetRoomParams::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_destRoomID); -} - -ResChangeRoomOwner::ResChangeRoomOwner(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_CHANGEROOMOWNER, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_destRoomID(0) -{ -} - -void ResChangeRoomOwner::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_destRoomID); -} - -ResGetRoomSummaries::ResGetRoomSummaries(void *user) -: GenericResponse(RESPONSE_GETROOMSUMMARIES, CHATRESULT_TIMEOUT, user), - m_numRooms(0), - m_roomSummaries(nullptr) -{ -} - -ResGetRoomSummaries::~ResGetRoomSummaries() -{ - delete[] m_roomSummaries; -} - -void ResGetRoomSummaries::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_numRooms); - - if (m_numRooms > 0) - { - String tempStr; - unsigned tempNum; - - m_roomSummaries = new RoomSummary[m_numRooms]; - - for (unsigned i = 0; i != m_numRooms; i++) - { - // process RoomSummary objects from message - ASSERT_VALID_STRING_LENGTH(get(iter, tempStr)); - m_roomSummaries[i].setRoomAddress(ChatUnicodeString(tempStr.data(), tempStr.size())); - ASSERT_VALID_STRING_LENGTH(get(iter, tempStr)); - m_roomSummaries[i].setRoomTopic(ChatUnicodeString(tempStr.data(), tempStr.size())); - get(iter, tempNum); - m_roomSummaries[i].setRoomAttributes(tempNum); - get(iter, tempNum); - m_roomSummaries[i].setRoomCurSize(tempNum); - get(iter, tempNum); - m_roomSummaries[i].setRoomMaxSize(tempNum); - } - } -} - -ResSendPersistentMessage::ResSendPersistentMessage(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_SENDPERSISTENTMESSAGE, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_messageID(0) -{ -} - -void ResSendPersistentMessage::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - - if (iter.getSize() > 0) - { - get(iter, m_messageID); - } -} - -ResSendMultiplePersistentMessages::ResSendMultiplePersistentMessages(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_SENDMULTIPLEPERSISTENTMESSAGES, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_numResults(0) -{ -} - -void ResSendMultiplePersistentMessages::unpack(ByteStream::ReadIterator &iter) -{ - - unsigned resultIndex; - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - - get(iter, m_numResults); - - m_resultVector.resize(m_numResults); - m_messageIDvector.resize(m_numResults); - - for (resultIndex = 0; resultIndex < m_numResults; resultIndex++) - { - get(iter, m_resultVector[resultIndex]); - } - - if (iter.getSize() > 0) - { - for (resultIndex = 0; resultIndex < m_numResults; resultIndex++) - { - get(iter, m_messageIDvector[resultIndex]); - } - } -} - -ResAlterPersistentMessage::ResAlterPersistentMessage(const ChatUnicodeString &destAvatarName, const ChatUnicodeString &destAvatarAddress, unsigned messageID, void *user) -: GenericResponse(RESPONSE_ALTERPERSISTENTMESSAGE, CHATRESULT_TIMEOUT, user), - m_destAvatarName(destAvatarName.data(), destAvatarName.length()), - m_destAvatarAddress(destAvatarAddress.data(), destAvatarAddress.length()), - m_messageID(messageID) -{ -} - -ResAlterPersistentMessage::~ResAlterPersistentMessage() -{ -} - -void ResAlterPersistentMessage::unpack(Base::ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResGetPersistentMessage::ResGetPersistentMessage(void *user, unsigned srcAvatarID, unsigned messageID) -: GenericResponse(RESPONSE_GETPERSISTENTMESSAGE, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_messageID(messageID), - m_core(nullptr), - m_header(nullptr) -{ -} - -ResGetPersistentMessage::~ResGetPersistentMessage() -{ - delete m_header; - delete m_core; -} -void ResGetPersistentMessage::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - if(m_result == 0) - { - m_header = new PersistentHeader; - m_core = new PersistentHeaderCore; - m_core->load(iter, m_header); - ASSERT_VALID_STRING_LENGTH(get(iter, m_msg)); - ASSERT_VALID_STRING_LENGTH(get(iter, m_oob)); - - if (iter.getSize() > 0) - { - m_core->setFolder(iter); - m_core->setCategory(iter); - } - } -} - -ResGetMultiplePersistentMessages::ResGetMultiplePersistentMessages(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_GETMULTIPLEPERSISTENTMESSAGES, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_messages(nullptr) -{ -} - -ResGetMultiplePersistentMessages::~ResGetMultiplePersistentMessages() -{ - unsigned i; - - if (m_messages) - { - for(i = 0; i < m_listLength; i++) - { - delete m_messages[i]; + m_room = new ChatRoomCore(iter); } } - delete[] m_messages; -} - -PersistentMessage ** const ResGetMultiplePersistentMessages::getList() const -{ - return (PersistentMessage **)m_messages; -} - -void ResGetMultiplePersistentMessages::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_listLength); - - if(m_listLength > 0) + ResFriendConfirm::ResFriendConfirm(unsigned srcAvatarID, void *user) + : GenericResponse(RESPONSE_CONFIRMFRIEND, CHATRESULT_TIMEOUT, user), + m_avatarID(srcAvatarID) { - unsigned i = 0; - - m_messages = new PersistentMessageCore*[m_listLength]; - - for(i = 0; i < m_listLength; i++) - { - m_messages[i] = new PersistentMessageCore(); - m_messages[i]->load(iter); - } - } -} - -ResGetPersistentHeaders::ResGetPersistentHeaders(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_GETPERSISTENTHEADERS, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_listLength(0), - m_headers(nullptr), - m_cores(nullptr) -{ -} - -ResGetPersistentHeaders::~ResGetPersistentHeaders() -{ - delete[] m_headers; - delete[] m_cores; -} - -void ResGetPersistentHeaders::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_listLength); - - if(m_listLength > 0) - { - unsigned i = 0; - - this->m_headers = new PersistentHeader[m_listLength]; - m_cores = new PersistentHeaderCore[m_listLength]; - - for(i = 0; i < m_listLength; i++) - { - m_cores[i].load(iter, &m_headers[i]); - } - - if (iter.getSize() > 0) - { - for(i = 0; i < m_listLength; i++) - { - m_cores[i].setFolder(iter); - m_cores[i].setCategory(iter); - } - } - } -} - -ResGetPartialPersistentHeaders::ResGetPartialPersistentHeaders(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_PARTIALPERSISTENTHEADERS, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_listLength(0), - m_headers(nullptr), - m_cores(nullptr) -{ -} - -ResGetPartialPersistentHeaders::~ResGetPartialPersistentHeaders() -{ - delete[] m_headers; - delete[] m_cores; -} - -void ResGetPartialPersistentHeaders::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_listLength); - - if(m_listLength > 0) - { - unsigned i = 0; - - m_headers = new PersistentHeader[m_listLength]; - m_cores = new PersistentHeaderCore[m_listLength]; - - for(i = 0; i < m_listLength; i++) - { - m_cores[i].load(iter, &m_headers[i]); - } - - if (iter.getSize() > 0) - { - for(i = 0; i < m_listLength; i++) - { - m_cores[i].setFolder(iter); - m_cores[i].setCategory(iter); - } - } - } -} - -ResCountPersistentMessages::ResCountPersistentMessages(void *user, const ChatUnicodeString &avatarName, const ChatUnicodeString &avatarAddress) -: GenericResponse(RESPONSE_COUNTPERSISTENTMESSAGES, CHATRESULT_TIMEOUT, user), - m_avatarName(avatarName.string_data, avatarName.string_length), - m_avatarAddress(avatarAddress.string_data, avatarAddress.string_length), - m_numMessages(0) -{ -} - -void ResCountPersistentMessages::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_numMessages); -} - -ResUpdatePersistentMessage::ResUpdatePersistentMessage(void *user, unsigned srcAvatarID, unsigned messageID) -: GenericResponse(RESPONSE_UPDATEPERSISTENTMESSAGE, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_messageID(messageID) -{ -} - -void ResUpdatePersistentMessage::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResUpdatePersistentMessages::ResUpdatePersistentMessages(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_UPDATEPERSISTENTMESSAGES, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID) -{ -} - -void ResUpdatePersistentMessages::unpack(ByteStream::ReadIterator &iter) -{ - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResClassifyPersistentMessages::ResClassifyPersistentMessages(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_CHANGEPERSISTENTFOLDER, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID) -{ -} - -void ResClassifyPersistentMessages::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResDeleteAllPersistentMessages::ResDeleteAllPersistentMessages(void *user, const ChatUnicodeString &avatarName, const ChatUnicodeString &avatarAddress) -: GenericResponse(RESPONSE_PURGEPERSISTENTMESSAGES, CHATRESULT_TIMEOUT, user), - m_avatarName(avatarName.string_data, avatarName.string_length), - m_avatarAddress(avatarAddress.string_data, avatarAddress.string_length), - m_numDeleted(0) -{ -} - -void ResDeleteAllPersistentMessages::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_numDeleted); -} - -ResUnregisterRoom::ResUnregisterRoom(void *user) -: GenericResponse(RESPONSE_UNREGISTERROOM, CHATRESULT_TIMEOUT, user), - m_destRoomID(0) -{ -} - -void ResUnregisterRoom::unpack(ByteStream::ReadIterator &iter) -{ - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_destRoomID); -} - -ResFailoverReloginAvatar::ResFailoverReloginAvatar(unsigned avatarID) -: GenericResponse(RESPONSE_FAILOVER_RELOGINAVATAR, CHATRESULT_TIMEOUT, nullptr), - m_avatarID(avatarID) -{ -} - -void ResFailoverReloginAvatar::unpack(ByteStream::ReadIterator &iter) -{ - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - - if (iter.getSize() > 0) - { - get(iter, m_requiredPriority); - } -} - -ResFailoverRecreateRoom::ResFailoverRecreateRoom(unsigned roomID, bool forced) -: GenericResponse(RESPONSE_FAILOVER_RECREATEROOM, CHATRESULT_TIMEOUT, nullptr), - m_roomID(roomID), - m_room(nullptr), - m_forced(forced) -{ -} - -void ResFailoverRecreateRoom::unpack(ByteStream::ReadIterator &iter) -{ - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - - if (m_result == 0) - { - m_room = new ChatRoomCore(iter); - } -} - -ResFriendConfirm::ResFriendConfirm(unsigned srcAvatarID, void *user) -: GenericResponse(RESPONSE_CONFIRMFRIEND, CHATRESULT_TIMEOUT, user), - m_avatarID(srcAvatarID) -{ -} - -void ResFriendConfirmReciprocate::unpack(ByteStream::ReadIterator &iter) -{ - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResFriendConfirmReciprocate::ResFriendConfirmReciprocate(unsigned srcAvatarID, void *user) -: GenericResponse(RESPONSE_CONFIRMFRIEND_RECIPROCATE, CHATRESULT_TIMEOUT, user), -m_avatarID(srcAvatarID) -{ -} - -void ResFriendConfirm::unpack(ByteStream::ReadIterator &iter) -{ - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResGetFanClubHandle::ResGetFanClubHandle(unsigned stationID, unsigned fanClubCode, void *user) -: GenericResponse(RESPONSE_GETFANCLUBHANDLE, CHATRESULT_TIMEOUT, user), - m_stationID(stationID), - m_fanClubCode(fanClubCode) -{ -} - -void ResGetFanClubHandle::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - ASSERT_VALID_STRING_LENGTH(get(iter, m_handle)); -} - -ResFindAvatarByUID::ResFindAvatarByUID(void *user) -: GenericResponse(RESPONSE_FINDAVATARBYUID, CHATRESULT_TIMEOUT, user), - m_numAvatarsOnline(0), - m_avatars(nullptr) -{ -} - -ResFindAvatarByUID::~ResFindAvatarByUID() -{ - for (unsigned i = 0; i < m_numAvatarsOnline; i++) - { - delete m_avatars[i]; } - delete[] m_avatars; -} - -void ResFindAvatarByUID::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_numAvatarsOnline); - - if (m_numAvatarsOnline > 0) + void ResFriendConfirmReciprocate::unpack(ByteStream::ReadIterator &iter) { - m_avatars = new ChatAvatarCore*[m_numAvatarsOnline]; + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + ResFriendConfirmReciprocate::ResFriendConfirmReciprocate(unsigned srcAvatarID, void *user) + : GenericResponse(RESPONSE_CONFIRMFRIEND_RECIPROCATE, CHATRESULT_TIMEOUT, user), + m_avatarID(srcAvatarID) + { + } + + void ResFriendConfirm::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResGetFanClubHandle::ResGetFanClubHandle(unsigned stationID, unsigned fanClubCode, void *user) + : GenericResponse(RESPONSE_GETFANCLUBHANDLE, CHATRESULT_TIMEOUT, user), + m_stationID(stationID), + m_fanClubCode(fanClubCode) + { + } + + void ResGetFanClubHandle::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + ASSERT_VALID_STRING_LENGTH(get(iter, m_handle)); + } + + ResFindAvatarByUID::ResFindAvatarByUID(void *user) + : GenericResponse(RESPONSE_FINDAVATARBYUID, CHATRESULT_TIMEOUT, user), + m_numAvatarsOnline(0), + m_avatars(nullptr) + { + } + + ResFindAvatarByUID::~ResFindAvatarByUID() + { for (unsigned i = 0; i < m_numAvatarsOnline; i++) { - m_avatars[i] = new ChatAvatarCore(iter); + delete m_avatars[i]; + } + + delete[] m_avatars; + } + + void ResFindAvatarByUID::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_numAvatarsOnline); + + if (m_numAvatarsOnline > 0) + { + m_avatars = new ChatAvatarCore*[m_numAvatarsOnline]; + + for (unsigned i = 0; i < m_numAvatarsOnline; i++) + { + m_avatars[i] = new ChatAvatarCore(iter); + } } } -} -ResRegistrarGetChatServer::ResRegistrarGetChatServer() -: GenericResponse(RESPONSE_REGISTRAR_GETCHATSERVER, CHATRESULT_TIMEOUT, nullptr) -{ -} - -void ResRegistrarGetChatServer::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - ASSERT_VALID_STRING_LENGTH(get(iter, m_hostname)); - get(iter, m_port); -} - -ResSendApiVersion::ResSendApiVersion() -: GenericResponse(RESPONSE_SETAPIVERSION, CHATRESULT_TIMEOUT, nullptr) -{ -} - -void ResSendApiVersion::unpack(ByteStream::ReadIterator &iter) -{ - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, (uint32 &)m_serverVersion); -} - -ResAddSnoopAvatar::ResAddSnoopAvatar(void *user, unsigned srcAvatarID, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress) -: GenericResponse(RESPONSE_ADDSNOOPAVATAR, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_destAvatarName(destName.string_data, destName.string_length), - m_destAvatarAddress(destAddress.string_data, destAddress.string_length) -{ -} - -void ResAddSnoopAvatar::unpack(ByteStream::ReadIterator &iter) -{ - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResRemoveSnoopAvatar::ResRemoveSnoopAvatar(void *user, unsigned srcAvatarID, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress) -: GenericResponse(RESPONSE_REMOVESNOOPAVATAR, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_destAvatarName(destName.string_data, destName.string_length), - m_destAvatarAddress(destAddress.string_data, destAddress.string_length) -{ -} - -void ResRemoveSnoopAvatar::unpack(ByteStream::ReadIterator &iter) -{ - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResAddSnoopRoom::ResAddSnoopRoom(void *user, unsigned srcAvatarID, const ChatUnicodeString &roomAddress) -: GenericResponse(RESPONSE_ADDSNOOPROOM, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_roomAddress(roomAddress.string_data, roomAddress.string_length) -{ -} - -void ResAddSnoopRoom::unpack(ByteStream::ReadIterator &iter) -{ - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResRemoveSnoopRoom::ResRemoveSnoopRoom(void *user, unsigned srcAvatarID, const ChatUnicodeString &roomAddress) -: GenericResponse(RESPONSE_REMOVESNOOPROOM, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_roomAddress(roomAddress.string_data, roomAddress.string_length) -{ -} - -void ResRemoveSnoopRoom::unpack(ByteStream::ReadIterator &iter) -{ - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - -ResGetSnoopList::ResGetSnoopList(void *user, unsigned srcAvatarID) -: GenericResponse(RESPONSE_GETSNOOPLIST, CHATRESULT_TIMEOUT, user), - m_srcAvatarID(srcAvatarID), - m_avatarSnoops(nullptr), - m_roomSnoops(nullptr) -{ -} - -ResGetSnoopList::~ResGetSnoopList() -{ - for (unsigned i = 0; i < m_avatarSnoopListLength; i++) + ResRegistrarGetChatServer::ResRegistrarGetChatServer() + : GenericResponse(RESPONSE_REGISTRAR_GETCHATSERVER, CHATRESULT_TIMEOUT, nullptr) { - delete m_avatarSnoops[i]; } - delete[] m_avatarSnoops; - for (unsigned j = 0; j < m_roomSnoopListLength; j++) + void ResRegistrarGetChatServer::unpack(ByteStream::ReadIterator &iter) { - delete m_roomSnoops[j]; + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + ASSERT_VALID_STRING_LENGTH(get(iter, m_hostname)); + get(iter, m_port); } - delete[] m_roomSnoops; -} -void ResGetSnoopList::unpack(ByteStream::ReadIterator &iter) -{ - - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); - get(iter, m_avatarSnoopListLength); - get(iter, m_roomSnoopListLength); - - if (m_avatarSnoopListLength > 0) + ResSendApiVersion::ResSendApiVersion() + : GenericResponse(RESPONSE_SETAPIVERSION, CHATRESULT_TIMEOUT, nullptr) { - m_avatarSnoops = new AvatarSnoopPair*[m_avatarSnoopListLength]; + } + void ResSendApiVersion::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, (uint32 &)m_serverVersion); + } + + ResAddSnoopAvatar::ResAddSnoopAvatar(void *user, unsigned srcAvatarID, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress) + : GenericResponse(RESPONSE_ADDSNOOPAVATAR, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_destAvatarName(destName.string_data, destName.string_length), + m_destAvatarAddress(destAddress.string_data, destAddress.string_length) + { + } + + void ResAddSnoopAvatar::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResRemoveSnoopAvatar::ResRemoveSnoopAvatar(void *user, unsigned srcAvatarID, const ChatUnicodeString &destName, const ChatUnicodeString &destAddress) + : GenericResponse(RESPONSE_REMOVESNOOPAVATAR, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_destAvatarName(destName.string_data, destName.string_length), + m_destAvatarAddress(destAddress.string_data, destAddress.string_length) + { + } + + void ResRemoveSnoopAvatar::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResAddSnoopRoom::ResAddSnoopRoom(void *user, unsigned srcAvatarID, const ChatUnicodeString &roomAddress) + : GenericResponse(RESPONSE_ADDSNOOPROOM, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_roomAddress(roomAddress.string_data, roomAddress.string_length) + { + } + + void ResAddSnoopRoom::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResRemoveSnoopRoom::ResRemoveSnoopRoom(void *user, unsigned srcAvatarID, const ChatUnicodeString &roomAddress) + : GenericResponse(RESPONSE_REMOVESNOOPROOM, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_roomAddress(roomAddress.string_data, roomAddress.string_length) + { + } + + void ResRemoveSnoopRoom::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } + + ResGetSnoopList::ResGetSnoopList(void *user, unsigned srcAvatarID) + : GenericResponse(RESPONSE_GETSNOOPLIST, CHATRESULT_TIMEOUT, user), + m_srcAvatarID(srcAvatarID), + m_avatarSnoops(nullptr), + m_roomSnoops(nullptr) + { + } + + ResGetSnoopList::~ResGetSnoopList() + { for (unsigned i = 0; i < m_avatarSnoopListLength; i++) { - Plat_Unicode::String name; - Plat_Unicode::String addr; - ASSERT_VALID_STRING_LENGTH(get(iter, name)); - ASSERT_VALID_STRING_LENGTH(get(iter, addr)); - - m_avatarSnoops[i] = new AvatarSnoopPair(name, addr); + delete m_avatarSnoops[i]; } - } + delete[] m_avatarSnoops; - if(m_roomSnoopListLength > 0) - { - m_roomSnoops = new ChatUnicodeString*[m_roomSnoopListLength]; - - for(unsigned j = 0; j < m_roomSnoopListLength; j++) + for (unsigned j = 0; j < m_roomSnoopListLength; j++) { - Plat_Unicode::String room; - ASSERT_VALID_STRING_LENGTH(get(iter, room)); + delete m_roomSnoops[j]; + } + delete[] m_roomSnoops; + } - m_roomSnoops[j] = new ChatUnicodeString(room); + void ResGetSnoopList::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + get(iter, m_avatarSnoopListLength); + get(iter, m_roomSnoopListLength); + + if (m_avatarSnoopListLength > 0) + { + m_avatarSnoops = new AvatarSnoopPair*[m_avatarSnoopListLength]; + + for (unsigned i = 0; i < m_avatarSnoopListLength; i++) + { + Plat_Unicode::String name; + Plat_Unicode::String addr; + ASSERT_VALID_STRING_LENGTH(get(iter, name)); + ASSERT_VALID_STRING_LENGTH(get(iter, addr)); + + m_avatarSnoops[i] = new AvatarSnoopPair(name, addr); + } + } + + if (m_roomSnoopListLength > 0) + { + m_roomSnoops = new ChatUnicodeString*[m_roomSnoopListLength]; + + for (unsigned j = 0; j < m_roomSnoopListLength; j++) + { + Plat_Unicode::String room; + ASSERT_VALID_STRING_LENGTH(get(iter, room)); + + m_roomSnoops[j] = new ChatUnicodeString(room); + } } } -} -ResTransferAvatar::ResTransferAvatar(void *user, unsigned userID, unsigned newUserID, const ChatUnicodeString &avatarName, const ChatUnicodeString &newAvatarName, const ChatUnicodeString &avatarAddress, const ChatUnicodeString &newAvatarAddress) -: GenericResponse(RESPONSE_TRANSFERAVATAR, CHATRESULT_TIMEOUT, user), - m_userID(userID), - m_newUserID(newUserID), - m_avatarName(avatarName.string_data, avatarName.string_length), - m_newAvatarName(newAvatarName.string_data, newAvatarName.string_length), - m_avatarAddress(avatarAddress.string_data, avatarAddress.string_length), - m_newAvatarAddress(newAvatarAddress.string_data, newAvatarAddress.string_length) -{ -} - -void ResTransferAvatar::unpack(ByteStream::ReadIterator &iter) -{ - get(iter, m_type); - get(iter, m_track); - get(iter, m_result); -} - - -}; // end namespace + ResTransferAvatar::ResTransferAvatar(void *user, unsigned userID, unsigned newUserID, const ChatUnicodeString &avatarName, const ChatUnicodeString &newAvatarName, const ChatUnicodeString &avatarAddress, const ChatUnicodeString &newAvatarAddress) + : GenericResponse(RESPONSE_TRANSFERAVATAR, CHATRESULT_TIMEOUT, user), + m_userID(userID), + m_newUserID(newUserID), + m_avatarName(avatarName.string_data, avatarName.string_length), + m_newAvatarName(newAvatarName.string_data, newAvatarName.string_length), + m_avatarAddress(avatarAddress.string_data, avatarAddress.string_length), + m_newAvatarAddress(newAvatarAddress.string_data, newAvatarAddress.string_length) + { + } + void ResTransferAvatar::unpack(ByteStream::ReadIterator &iter) + { + get(iter, m_type); + get(iter, m_track); + get(iter, m_result); + } +}; // end namespace \ No newline at end of file diff --git a/external/3rd/library/soePlatform/ChatAPI/utils/Base/AutoLog.h b/external/3rd/library/soePlatform/ChatAPI/utils/Base/AutoLog.h index 18871c7f..0386b26e 100755 --- a/external/3rd/library/soePlatform/ChatAPI/utils/Base/AutoLog.h +++ b/external/3rd/library/soePlatform/ChatAPI/utils/Base/AutoLog.h @@ -6,110 +6,109 @@ #include #ifdef EXTERNAL_DISTRO -namespace NAMESPACE +namespace NAMESPACE { - #endif -namespace Base -{ + namespace Base + { + class CAutoLog + { + public: + enum eLogLevel { + eLOG_NONE = 0, // log entries are discarded + eLOG_ERROR = 1, // log errors only + eLOG_ALERT = 2, // log alerts and errors only + eLOG_NORMAL = 3, // log all normal events, no debug + eLOG_DEBUG = 4 // log everything + }; - class CAutoLog - { - public: - enum eLogLevel { - eLOG_NONE = 0, // log entries are discarded - eLOG_ERROR = 1, // log errors only - eLOG_ALERT = 2, // log alerts and errors only - eLOG_NORMAL = 3, // log all normal events, no debug - eLOG_DEBUG = 4 // log everything - }; + // Global setting for all AutoLog instances for this application. Can be set on the fly. Default is eLOG_NORMAL. + void SetLogLevel(eLogLevel loglevel); - // Global setting for all AutoLog instances for this application. Can be set on the fly. Default is eLOG_NORMAL. - void SetLogLevel(eLogLevel loglevel); + // Global setting for all AutoLog instances for this application. Can be set on the fly. Default is eLOG_ERROR. + void SetPrintLevel(eLogLevel printlevel); - // Global setting for all AutoLog instances for this application. Can be set on the fly. Default is eLOG_ERROR. - void SetPrintLevel(eLogLevel printlevel); + // Global setting for all AutoLog instances for this application. Can be set on the fly. Default is eLOG_ERROR. + void SetFlushLevel(eLogLevel flushlevel); - // Global setting for all AutoLog instances for this application. Can be set on the fly. Default is eLOG_ERROR. - void SetFlushLevel(eLogLevel flushlevel); + // constructor, no file loaded + CAutoLog(); - // constructor, no file loaded - CAutoLog(); + // version of constructor that calls Open(file) + CAutoLog(const char * file); - // version of constructor that calls Open(file) - CAutoLog(const char * file); + // destructor, will close file if opened + ~CAutoLog(); - // destructor, will close file if opened - ~CAutoLog(); + // Open log file. If a file is already open, function will fail. + // returns true if no error + bool Open(const char * file); - // Open log file. If a file is already open, function will fail. - // returns true if no error - bool Open(const char * file); + // Close log file if opened. + void Close(void); - // Close log file if opened. - void Close(void); + // Make an entry in the log. Format and variable arguments are identical to printf. + // severity will be compared to master log level to determine if the log entry will be made + // severity will be compared to master print level to determine if the log entry will be printed to stdout + void Log(eLogLevel severity, char * format, ...); - // Make an entry in the log. Format and variable arguments are identical to printf. - // severity will be compared to master log level to determine if the log entry will be made - // severity will be compared to master print level to determine if the log entry will be printed to stdout - void Log(eLogLevel severity, char * format, ...); + // Equivalent to the above with the approriate severity argument + void LogError(char * format, ...); + void LogAlert(char * format, ...); + void Log(char * format, ...); + void LogDebug(char * format, ...); - // Equivalent to the above with the approriate severity argument - void LogError(char * format, ...); - void LogAlert(char * format, ...); - void Log(char * format, ...); - void LogDebug(char * format, ...); + private: + FILE * pFile; // current log file opened + char * pFilename; // current log file opened + int nTodaysDayOfYear; // remember the current day to detect change of day + void Archive(void); // archives current log - private: - FILE * pFile; // current log file opened - char * pFilename; // current log file opened - int nTodaysDayOfYear; // remember the current day to detect change of day - void Archive(void); // archives current log + static eLogLevel nLogMask; // master severity level + static eLogLevel nPrintMask; // master severity level + static eLogLevel nFlushMask; // master severity level + }; - static eLogLevel nLogMask; // master severity level - static eLogLevel nPrintMask; // master severity level - static eLogLevel nFlushMask; // master severity level - }; + //------------------------------------- + inline void CAutoLog::SetLogLevel(eLogLevel loglevel) + { + nLogMask = loglevel; + } - //------------------------------------- - inline void CAutoLog::SetLogLevel(eLogLevel loglevel) - { - nLogMask = loglevel; - } + //------------------------------------- + inline void CAutoLog::SetPrintLevel(eLogLevel printlevel) + { + nPrintMask = printlevel; + } - //------------------------------------- - inline void CAutoLog::SetPrintLevel(eLogLevel printlevel) - { - nPrintMask = printlevel; - } + //------------------------------------- + inline void CAutoLog::SetFlushLevel(eLogLevel flushlevel) + { + nFlushMask = flushlevel; + } - //------------------------------------- - inline void CAutoLog::SetFlushLevel(eLogLevel flushlevel) - { - nFlushMask = flushlevel; - } + //------------------------------------- + inline CAutoLog::CAutoLog() + { + pFilename = nullptr; + pFile = (FILE *)-1; + nTodaysDayOfYear = 0; + } - //------------------------------------- - inline CAutoLog::CAutoLog() - { - pFilename = nullptr; - pFile = (FILE *)-1; - } + //------------------------------------- + inline CAutoLog::CAutoLog(const char * file) + { + pFilename = nullptr; + pFile = (FILE *)-1; + Open(file); + } - //------------------------------------- - inline CAutoLog::CAutoLog(const char * file) - { - pFilename = nullptr; - pFile = (FILE *)-1; - Open(file); - } - - //------------------------------------- - inline CAutoLog::~CAutoLog() - { - Close(); - } -}; + //------------------------------------- + inline CAutoLog::~CAutoLog() + { + Close(); + } + }; #ifdef EXTERNAL_DISTRO }; #endif diff --git a/external/3rd/library/soePlatform/ChatAPI/utils/GenericAPI/GenericConnection.cpp b/external/3rd/library/soePlatform/ChatAPI/utils/GenericAPI/GenericConnection.cpp index 3c878e0a..c7c6234c 100755 --- a/external/3rd/library/soePlatform/ChatAPI/utils/GenericAPI/GenericConnection.cpp +++ b/external/3rd/library/soePlatform/ChatAPI/utils/GenericAPI/GenericConnection.cpp @@ -2,297 +2,286 @@ #include "GenericAPI/GenericConnection.h" #include "GenericAPI/GenericMessage.h" - using namespace UdpLibrary; #ifdef USE_SERIALIZE_LIB - #include +#include #endif - #ifdef EXTERNAL_DISTRO -namespace NAMESPACE +namespace NAMESPACE { - - #endif -namespace GenericAPI -{ + namespace GenericAPI + { + using namespace std; + using namespace Base; - -using namespace std; -using namespace Base; + unsigned GenericConnection::ms_crcBytes = 0; -unsigned GenericConnection::ms_crcBytes = 0; - -GenericConnection::GenericConnection(const char *host, short port, GenericAPICore *apiCore, unsigned reconnectTimeout, unsigned noDataTimeoutSecs, unsigned noAckTimeoutSecs, unsigned incomingBufSizeInKB, unsigned outgoingBufSizeInKB, unsigned keepAlive, unsigned maxRecvMessageSizeInKB, unsigned holdTime) -: m_bConnected(false), - m_apiCore(apiCore), - m_con(nullptr), - m_host(host), - m_nextHost(host), - m_port(port), - m_nextPort(port), - m_lastTrack(123455), //random choice != 1 - m_conState(CON_DISCONNECT), - m_reconnectTimeout(reconnectTimeout) -{ + GenericConnection::GenericConnection(const char *host, short port, GenericAPICore *apiCore, unsigned reconnectTimeout, unsigned noDataTimeoutSecs, unsigned noAckTimeoutSecs, unsigned incomingBufSizeInKB, unsigned outgoingBufSizeInKB, unsigned keepAlive, unsigned maxRecvMessageSizeInKB, unsigned holdTime) + : m_bConnected(false), + m_apiCore(apiCore), + m_con(nullptr), + m_host(host), + m_nextHost(host), + m_port(port), + m_nextPort(port), + m_lastTrack(123455), //random choice != 1 + m_conState(CON_DISCONNECT), + m_reconnectTimeout(reconnectTimeout), + m_conTimeout(100) + { #ifdef USE_TCP_LIBRARY - TcpManager::TcpParams params; - - params.incomingBufferSize = incomingBufSizeInKB * 1024; - params.outgoingBufferSize = outgoingBufSizeInKB * 1024; - params.maxConnections = 1; - params.port = 0; - params.maxRecvMessageSize = maxRecvMessageSizeInKB*1024; - params.keepAliveDelay = keepAlive * 1000; - params.noDataTimeout = noDataTimeoutSecs * 1000; - //params.oldestUnacknowledgedTimeout = noAckTimeoutSecs * 1000; - - m_manager = new TcpManager(params); -#else //default to UDP_LIBRARY - UdpManager::Params params; + TcpManager::TcpParams params; - params.keepAliveDelay = keepAlive * 1000; - params.maxDataHoldTime = holdTime; - params.incomingBufferSize = incomingBufSizeInKB * 1024; - params.outgoingBufferSize = outgoingBufSizeInKB * 1024; - params.maxConnections = 1; - params.port = 0; - params.noDataTimeout = noDataTimeoutSecs * 1000; - params.oldestUnacknowledgedTimeout = noAckTimeoutSecs * 1000; - params.crcBytes = ms_crcBytes; - - m_manager = new UdpManager(¶ms); + params.incomingBufferSize = incomingBufSizeInKB * 1024; + params.outgoingBufferSize = outgoingBufSizeInKB * 1024; + params.maxConnections = 1; + params.port = 0; + params.maxRecvMessageSize = maxRecvMessageSizeInKB * 1024; + params.keepAliveDelay = keepAlive * 1000; + params.noDataTimeout = noDataTimeoutSecs * 1000; + //params.oldestUnacknowledgedTimeout = noAckTimeoutSecs * 1000; + + m_manager = new TcpManager(params); +#else //default to UDP_LIBRARY + UdpManager::Params params; + + params.keepAliveDelay = keepAlive * 1000; + params.maxDataHoldTime = holdTime; + params.incomingBufferSize = incomingBufSizeInKB * 1024; + params.outgoingBufferSize = outgoingBufSizeInKB * 1024; + params.maxConnections = 1; + params.port = 0; + params.noDataTimeout = noDataTimeoutSecs * 1000; + params.oldestUnacknowledgedTimeout = noAckTimeoutSecs * 1000; + params.crcBytes = ms_crcBytes; + + m_manager = new UdpManager(¶ms); #endif //USE_TCP_LIBRARY - -} - -GenericConnection::~GenericConnection() -{ - if(m_con) - { - m_con->SetHandler(nullptr); - m_con->Disconnect();//don't worry about onterminated being called, we've set it's handler to nullptr, so it wont - m_con->Release(); - } - - m_manager->Release(); -} - -void GenericConnection::changeHostPort(const char *host, short port) -{ - if (host && - strcmp(host, "") != 0) - { - m_nextHost = host; - m_nextPort = port; - } -} - -void GenericConnection::disconnect() -{ - if (m_con) - { - m_con->Disconnect(); - //no need to release, since callback to onTerminated releases it, and callback is allways made m_con->Release(); - m_con = nullptr; - } - m_conState = CON_DISCONNECT; - m_bConnected = false; -} - -#ifdef USE_TCP_LIBRARY -void GenericConnection::OnTerminated(TcpConnection *con) -#else //default to UDP_LIBRARY -void GenericConnection::OnTerminated(UdpConnection *con) -#endif -{ - m_apiCore->OnDisconnect(m_host.c_str(), m_port); - if(m_con) - { - m_con->Release(); - m_con = nullptr; - } - m_conState = CON_DISCONNECT; - m_bConnected = false; -} - -#ifdef USE_TCP_LIBRARY -void GenericConnection::OnRoutePacket(TcpConnection *con, const unsigned char *data, int dataLen) -#else //default to UDP_LIBRARY -void GenericConnection::OnRoutePacket(UdpConnection *con, const unsigned char *data, int dataLen) -#endif -{ - short type; - unsigned track; - - -#ifdef USE_SERIALIZE_LIB - unsigned bytes = 0; - unsigned fieldLen = soe::Read(data, dataLen, type); - if (fieldLen == 0) - return;//invalid message - bytes += fieldLen; - - fieldLen = soe::Read(data+bytes, dataLen-bytes, track); - if (fieldLen == 0) - return;//invalid message - bytes += fieldLen; -#else - ByteStream msg(data, dataLen); - ByteStream::ReadIterator iter = msg.begin(); - - get(iter, type); - get(iter, track); -#endif - GenericResponse *res = nullptr; - - // the following if block is a temporary fix that prevents - // a crash with a game team in which they occasionally find - // themselves receiving a dupe track in consecutive calls to - // OnRoutePacket (which then leads to a callback being called - // twice and data being invalid on the second call -> crash!). - if (track != 0 && - track == m_lastTrack) - { - printf("!!! ERROR !!! Got a duplicate track ID %u\n", track); - return; - } - m_lastTrack = track; - - // end temporary fix. - - if(track == 0) - { -#ifdef USE_SERIALIZE_LIB - m_apiCore->responseCallback(type, data+bytes, dataLen-bytes); -#else - m_apiCore->responseCallback(type, iter); -#endif - } - else - { - map::iterator mapIter = m_apiCore->m_pending.find(track); - - if(mapIter != m_apiCore->m_pending.end()) - { - res = (*mapIter).second; -#ifdef USE_SERIALIZE_LIB - res->unpack(data, dataLen); -#else - iter = msg.begin(); - res->unpack(iter); -#endif - m_apiCore->m_pending.erase(mapIter); - m_apiCore->m_pendingCount--; - m_apiCore->responseCallback(res); - delete res; } - } -} -void GenericConnection::process(bool giveTime) -{ - switch(m_conState) - { - case CON_DISCONNECT: - // if host/port was changed, it takes effect here - m_host = m_nextHost; - m_port = m_nextPort; - - // create connection object, attempting to connect and - // checking for connection in next state, CON_NEGOTIATE - m_con = m_manager->EstablishConnection(m_host.c_str(), m_port); - if(m_con) + GenericConnection::~GenericConnection() { - m_con->SetHandler(this); - m_conState = CON_NEGOTIATE; - m_conTimeout = time(nullptr) + m_reconnectTimeout; - } - break; - case CON_NEGOTIATE: - // check for connection + if (m_con) + { + m_con->SetHandler(nullptr); + m_con->Disconnect();//don't worry about onterminated being called, we've set it's handler to nullptr, so it wont + m_con->Release(); + } -#ifdef USE_TCP_LIBRARY - if(m_con->GetStatus() == TcpConnection::StatusConnected) -#else //default to UDP_LIBRARY - if(m_con->GetStatus() == UdpConnection::cStatusConnected) -#endif - { - // we're connected - m_conState = CON_CONNECT; - m_apiCore->OnConnect(m_host.c_str(), m_port); - m_bConnected = true; + m_manager->Release(); } - else if(time(nullptr) > m_conTimeout) + + void GenericConnection::changeHostPort(const char *host, short port) { - // we did not connect - m_con->Disconnect(); - //no need to release, since callback to onTerminated releases it, and callback is allways made m_con->Release(); - m_con = nullptr; + if (host && + strcmp(host, "") != 0) + { + m_nextHost = host; + m_nextPort = port; + } + } + + void GenericConnection::disconnect() + { + if (m_con) + { + m_con->Disconnect(); + //no need to release, since callback to onTerminated releases it, and callback is allways made m_con->Release(); + m_con = nullptr; + } m_conState = CON_DISCONNECT; - m_bConnected = false; + m_bConnected = false; } - break; - case CON_CONNECT: - // do nothing - break; - default: - // this should not occur, but we revert to CON_DISCONNECT if it does - m_conState = CON_DISCONNECT; - m_bConnected = false; - if (m_con) - { - m_con->Disconnect(); - //no need to release, since callback to onTerminated releases it, and callback is allways made m_con->Release(); - m_con = nullptr; - } - } - if (giveTime) - { - m_manager->GiveTime(); - } - -} +#ifdef USE_TCP_LIBRARY + void GenericConnection::OnTerminated(TcpConnection *con) +#else //default to UDP_LIBRARY + void GenericConnection::OnTerminated(UdpConnection *con) +#endif + { + m_apiCore->OnDisconnect(m_host.c_str(), m_port); + if (m_con) + { + m_con->Release(); + m_con = nullptr; + } + m_conState = CON_DISCONNECT; + m_bConnected = false; + } + +#ifdef USE_TCP_LIBRARY + void GenericConnection::OnRoutePacket(TcpConnection *con, const unsigned char *data, int dataLen) +#else //default to UDP_LIBRARY + void GenericConnection::OnRoutePacket(UdpConnection *con, const unsigned char *data, int dataLen) +#endif + { + short type; + unsigned track; #ifdef USE_SERIALIZE_LIB - void GenericConnection::Send(const unsigned char *data, int dataLen) - { - #ifdef USE_TCP_LIBRARY - if(m_con && m_con->GetStatus() == TcpConnection::StatusConnected) - { - m_con->Send((const char *)data, dataLen); - } - #else//USE_TCP_LIBRARY - if(m_con && m_con->GetStatus() == UdpConnection::cStatusConnected) - { - m_con->Send(cUdpChannelReliable1, data, dataLen); - } - #endif//USE_TCP_LIBRARY - } + unsigned bytes = 0; + unsigned fieldLen = soe::Read(data, dataLen, type); + if (fieldLen == 0) + return;//invalid message + bytes += fieldLen; + + fieldLen = soe::Read(data + bytes, dataLen - bytes, track); + if (fieldLen == 0) + return;//invalid message + bytes += fieldLen; +#else + ByteStream msg(data, dataLen); + ByteStream::ReadIterator iter = msg.begin(); + + get(iter, type); + get(iter, track); +#endif + GenericResponse *res = nullptr; + + // the following if block is a temporary fix that prevents + // a crash with a game team in which they occasionally find + // themselves receiving a dupe track in consecutive calls to + // OnRoutePacket (which then leads to a callback being called + // twice and data being invalid on the second call -> crash!). + if (track != 0 && + track == m_lastTrack) + { + printf("!!! ERROR !!! Got a duplicate track ID %u\n", track); + return; + } + m_lastTrack = track; + + // end temporary fix. + + if (track == 0) + { +#ifdef USE_SERIALIZE_LIB + m_apiCore->responseCallback(type, data + bytes, dataLen - bytes); +#else + m_apiCore->responseCallback(type, iter); +#endif + } + else + { + map::iterator mapIter = m_apiCore->m_pending.find(track); + + if (mapIter != m_apiCore->m_pending.end()) + { + res = (*mapIter).second; +#ifdef USE_SERIALIZE_LIB + res->unpack(data, dataLen); +#else + iter = msg.begin(); + res->unpack(iter); +#endif + m_apiCore->m_pending.erase(mapIter); + m_apiCore->m_pendingCount--; + m_apiCore->responseCallback(res); + delete res; + } + } + } + + void GenericConnection::process(bool giveTime) + { + switch (m_conState) + { + case CON_DISCONNECT: + // if host/port was changed, it takes effect here + m_host = m_nextHost; + m_port = m_nextPort; + + // create connection object, attempting to connect and + // checking for connection in next state, CON_NEGOTIATE + m_con = m_manager->EstablishConnection(m_host.c_str(), m_port); + if (m_con) + { + m_con->SetHandler(this); + m_conState = CON_NEGOTIATE; + m_conTimeout = time(nullptr) + m_reconnectTimeout; + } + break; + case CON_NEGOTIATE: + // check for connection + +#ifdef USE_TCP_LIBRARY + if (m_con->GetStatus() == TcpConnection::StatusConnected) +#else //default to UDP_LIBRARY + if (m_con->GetStatus() == UdpConnection::cStatusConnected) +#endif + { + // we're connected + m_conState = CON_CONNECT; + m_apiCore->OnConnect(m_host.c_str(), m_port); + m_bConnected = true; + } + else if (time(nullptr) > m_conTimeout) + { + // we did not connect + m_con->Disconnect(); + //no need to release, since callback to onTerminated releases it, and callback is allways made m_con->Release(); + m_con = nullptr; + m_conState = CON_DISCONNECT; + m_bConnected = false; + } + break; + case CON_CONNECT: + // do nothing + break; + default: + // this should not occur, but we revert to CON_DISCONNECT if it does + m_conState = CON_DISCONNECT; + m_bConnected = false; + if (m_con) + { + m_con->Disconnect(); + //no need to release, since callback to onTerminated releases it, and callback is allways made m_con->Release(); + m_con = nullptr; + } + } + + if (giveTime) + { + m_manager->GiveTime(); + } + } + +#ifdef USE_SERIALIZE_LIB + void GenericConnection::Send(const unsigned char *data, int dataLen) + { +#ifdef USE_TCP_LIBRARY + if (m_con && m_con->GetStatus() == TcpConnection::StatusConnected) + { + m_con->Send((const char *)data, dataLen); + } +#else//USE_TCP_LIBRARY + if (m_con && m_con->GetStatus() == UdpConnection::cStatusConnected) + { + m_con->Send(cUdpChannelReliable1, data, dataLen); + } +#endif//USE_TCP_LIBRARY + } #else //USE_SERIALIZE_LIB - void GenericConnection::Send(Base::ByteStream &msg) - { - #ifdef USE_TCP_LIBRARY - if(m_con && m_con->GetStatus() == TcpConnection::StatusConnected) - { - m_con->Send((const char *)msg.getBuffer(), msg.getSize()); - } - #else //USE_TCP_LIBRARY - if(m_con && m_con->GetStatus() == UdpConnection::cStatusConnected) - { - m_con->Send(cUdpChannelReliable1, msg.getBuffer(), msg.getSize()); - } - #endif//USE_TCP_LIBRARY - } + void GenericConnection::Send(Base::ByteStream &msg) + { +#ifdef USE_TCP_LIBRARY + if (m_con && m_con->GetStatus() == TcpConnection::StatusConnected) + { + m_con->Send((const char *)msg.getBuffer(), msg.getSize()); + } +#else //USE_TCP_LIBRARY + if (m_con && m_con->GetStatus() == UdpConnection::cStatusConnected) + { + m_con->Send(cUdpChannelReliable1, msg.getBuffer(), msg.getSize()); + } +#endif//USE_TCP_LIBRARY + } #endif //USE_SERIALIZE_LIB - - - -}; + }; #ifdef EXTERNAL_DISTRO }; -#endif +#endif \ No newline at end of file diff --git a/external/3rd/library/soePlatform/ChatAPI/utils/GenericAPI/GenericMessage.cpp b/external/3rd/library/soePlatform/ChatAPI/utils/GenericAPI/GenericMessage.cpp index 05d08328..8ee9459f 100755 --- a/external/3rd/library/soePlatform/ChatAPI/utils/GenericAPI/GenericMessage.cpp +++ b/external/3rd/library/soePlatform/ChatAPI/utils/GenericAPI/GenericMessage.cpp @@ -1,32 +1,31 @@ #include "GenericMessage.h" #ifdef EXTERNAL_DISTRO -namespace NAMESPACE +namespace NAMESPACE { - #endif -namespace GenericAPI -{ + namespace GenericAPI + { + GenericMessage::GenericMessage(short type) + : m_type(type) + { + } -GenericMessage::GenericMessage(short type) -: m_type(type) -{ -} + GenericRequest::GenericRequest(short type) + : GenericMessage(type) + { + } -GenericRequest::GenericRequest(short type) -: GenericMessage(type) -{ -} - -GenericResponse::GenericResponse(short type, unsigned result, void *user) -: GenericMessage(type), - m_result(result), - m_user(user) -{ -} - -}; + GenericResponse::GenericResponse(short type, unsigned result, void *user) + : GenericMessage(type), + m_result(result), + m_user(user), + m_track(0), + m_timeout(100) + { + } + }; #ifdef EXTERNAL_DISTRO }; -#endif +#endif \ No newline at end of file diff --git a/external/3rd/library/soePlatform/ChatAPI/utils/Unicode/UnicodeUtils.h b/external/3rd/library/soePlatform/ChatAPI/utils/Unicode/UnicodeUtils.h index d6528a19..c00c3f2f 100755 --- a/external/3rd/library/soePlatform/ChatAPI/utils/Unicode/UnicodeUtils.h +++ b/external/3rd/library/soePlatform/ChatAPI/utils/Unicode/UnicodeUtils.h @@ -24,360 +24,314 @@ //----------------------------------------------------------------- #ifdef EXTERNAL_DISTRO -namespace NAMESPACE +namespace NAMESPACE { #endif -namespace Plat_Unicode -{ - - String narrowToWide (const NarrowString & nstr); - String & narrowToWide (const NarrowString & nstr, String & str); //lint !e1929 // function returning a reference - - NarrowString wideToNarrow (const String & nstr); - NarrowString & wideToNarrow (const String & nstr, NarrowString & str); //lint !e1929 // function returning a reference - NarrowString toLower (const NarrowString & nstr); - NarrowString toUpper (const NarrowString & nstr); - String toLower (const String & nstr); - String toUpper (const String & nstr); - - const String getTrim (const String & str, const unicode_char_t * white = whitespace); - String & trim (String & str, const unicode_char_t * white = whitespace); - - bool getFirstToken (const String & str, size_t pos, size_t & endpos, String & token, const unicode_char_t * sepChars = whitespace); - bool getNthToken (const String & str, const size_t n, size_t & pos, size_t & endpos, String & token, const unicode_char_t * sepChars = whitespace); - size_t skipWhitespace (const String & str, size_t pos, const unicode_char_t * white = whitespace); - - const NarrowString getTrim (const NarrowString & str, const char * white = ascii_whitespace); - NarrowString & trim (NarrowString & str, const char * white = ascii_whitespace); - - bool getFirstToken (const NarrowString & str, size_t pos, size_t & endpos, NarrowString & token, const char * sepChars = ascii_whitespace); - bool getNthToken (const NarrowString & str, const size_t n, size_t & pos, size_t & endpos, NarrowString & token, const char * sepChars = ascii_whitespace); - size_t skipWhitespace (const NarrowString & str, size_t pos, const char * white = ascii_whitespace); - - enum FieldAlignment + namespace Plat_Unicode { - FA_LEFT, - FA_RIGHT, - FA_CENTER - }; + String narrowToWide(const NarrowString & nstr); + String & narrowToWide(const NarrowString & nstr, String & str); //lint !e1929 // function returning a reference - String & appendStringField (String & dst, const String & src, size_t width, FieldAlignment fa = FA_LEFT, unicode_char_t pad = ' ', bool truncate = false); - String & appendStringField (String & dst, const NarrowString & src, size_t width, FieldAlignment fa = FA_LEFT, unicode_char_t pad = ' ', bool truncate = false); -// ====================================================================== + NarrowString wideToNarrow(const String & nstr); + NarrowString & wideToNarrow(const String & nstr, NarrowString & str); //lint !e1929 // function returning a reference + NarrowString toLower(const NarrowString & nstr); + NarrowString toUpper(const NarrowString & nstr); + String toLower(const String & nstr); + String toUpper(const String & nstr); - //----------------------------------------------------------------- - /** - * Hacky code to correctly handle Cyrillic. - */ + const String getTrim(const String & str, const unicode_char_t * white = whitespace); + String & trim(String & str, const unicode_char_t * white = whitespace); - inline unicode_char_t trueUpper(unicode_char_t letter) - { - if ((cyrillic_lower_first <= letter) && (letter <= cyrillic_lower_last)) { - return letter + (cyrillic_upper_first - cyrillic_lower_first); - } else { - return static_cast(toupper(letter)); - } - } + bool getFirstToken(const String & str, size_t pos, size_t & endpos, String & token, const unicode_char_t * sepChars = whitespace); + bool getNthToken(const String & str, const size_t n, size_t & pos, size_t & endpos, String & token, const unicode_char_t * sepChars = whitespace); + size_t skipWhitespace(const String & str, size_t pos, const unicode_char_t * white = whitespace); - inline unicode_char_t trueLower(unicode_char_t letter) - { - if ((cyrillic_upper_first <= letter) && (letter <= cyrillic_upper_last)) { - return letter - (cyrillic_upper_first - cyrillic_lower_first); - } else { - return static_cast(tolower(letter)); - } - } - - /** - * Compare substrings of str2 and str1, each starting with pos and containing n characters - */ + const NarrowString getTrim(const NarrowString & str, const char * white = ascii_whitespace); + NarrowString & trim(NarrowString & str, const char * white = ascii_whitespace); + bool getFirstToken(const NarrowString & str, size_t pos, size_t & endpos, NarrowString & token, const char * sepChars = ascii_whitespace); + bool getNthToken(const NarrowString & str, const size_t n, size_t & pos, size_t & endpos, NarrowString & token, const char * sepChars = ascii_whitespace); + size_t skipWhitespace(const NarrowString & str, size_t pos, const char * white = ascii_whitespace); - /** - * Compares str1 and str2, where str1 is a String and str2 is templated, - * thus could be a std::string as well. Set reverseCompare to true if you - * want to begin comparison at end of string--a useful optimization if your - * strings tend to differ at the end. - */ - template bool caseInsensitiveCompare (const String & str1, const T & str2, bool reverseCompare = false) - { - const size_t len1 = str1.size(); - const size_t len2 = str2.size(); - - if (len1 != len2) + enum FieldAlignment { - return false; - } + FA_LEFT, + FA_RIGHT, + FA_CENTER + }; - if (!reverseCompare) + String & appendStringField(String & dst, const String & src, size_t width, FieldAlignment fa = FA_LEFT, unicode_char_t pad = ' ', bool truncate = false); + String & appendStringField(String & dst, const NarrowString & src, size_t width, FieldAlignment fa = FA_LEFT, unicode_char_t pad = ' ', bool truncate = false); + // ====================================================================== + + //----------------------------------------------------------------- + /** + * Hacky code to correctly handle Cyrillic. + */ + + inline unicode_char_t trueUpper(unicode_char_t letter) { - for (size_t i = 0; i < len1; i++) - { - if ( trueLower(str1[i]) != trueLower(str2[i]) ) - return false; + if ((cyrillic_lower_first <= letter) && (letter <= cyrillic_lower_last)) { + return letter + (cyrillic_upper_first - cyrillic_lower_first); } - } - else - { - for (size_t i = len1; i > 0; i--) - { - if ( trueLower(str1[i-1]) != trueLower(str2[i-1]) ) - return false; + else { + return static_cast(toupper(letter)); } } - return true; - } - - /** - * Compares str1 and str2, where str1 is a String and str2 is templated, - * thus could be a std::string as well. Unlike caseInsensitiveCompare, this - * version returns an int for < or > comparisons, and comparison must start - * at the front. Note that this kind of comparison does not allow the shortcut - * of first comparing sizes--every character must be compared up to the last one. - */ - template int caseInsensitiveCompareInt (const String & str1, const T & str2) - { - const size_t len1 = str1.size(); - const size_t len2 = str2.size(); - - size_t len; - if (len1 < len2) - len = len1; - else - len = len2; - - // iterate over smallest length - for (size_t i = 0; i < len; i++) + inline unicode_char_t trueLower(unicode_char_t letter) { - if ( trueLower(str1[i]) < trueLower(str2[i]) ) + if ((cyrillic_upper_first <= letter) && (letter <= cyrillic_upper_last)) { + return letter - (cyrillic_upper_first - cyrillic_lower_first); + } + else { + return static_cast(tolower(letter)); + } + } + + /** + * Compare substrings of str2 and str1, each starting with pos and containing n characters + */ + + /** + * Compares str1 and str2, where str1 is a String and str2 is templated, + * thus could be a std::string as well. Set reverseCompare to true if you + * want to begin comparison at end of string--a useful optimization if your + * strings tend to differ at the end. + */ + template bool caseInsensitiveCompare(const String & str1, const T & str2, bool reverseCompare = false) + { + const size_t len1 = str1.size(); + const size_t len2 = str2.size(); + + if (len1 != len2) + { + return false; + } + + if (!reverseCompare) + { + for (size_t i = 0; i < len1; i++) + { + if (trueLower(str1[i]) != trueLower(str2[i])) + return false; + } + } + else + { + for (size_t i = len1; i > 0; i--) + { + if (trueLower(str1[i - 1]) != trueLower(str2[i - 1])) + return false; + } + } + + return true; + } + + /** + * Compares str1 and str2, where str1 is a String and str2 is templated, + * thus could be a std::string as well. Unlike caseInsensitiveCompare, this + * version returns an int for < or > comparisons, and comparison must start + * at the front. Note that this kind of comparison does not allow the shortcut + * of first comparing sizes--every character must be compared up to the last one. + */ + template int caseInsensitiveCompareInt(const String & str1, const T & str2) + { + const size_t len1 = str1.size(); + const size_t len2 = str2.size(); + + size_t len; + if (len1 < len2) + len = len1; + else + len = len2; + + // iterate over smallest length + for (size_t i = 0; i < len; i++) + { + if (trueLower(str1[i]) < trueLower(str2[i])) + return -1; + else if (trueLower(str1[i]) > trueLower(str2[i])) + return 1; + } + + // Equal so far, thus: if len1 < len2, the result is less-than, else + // if len1 = len2, the result is equal, else the result is greater-than. + + if (len1 < len2) return -1; - else if ( trueLower(str1[i]) > trueLower(str2[i]) ) + else if (len1 == len2) + return 0; + else return 1; } - // Equal so far, thus: if len1 < len2, the result is less-than, else - // if len1 = len2, the result is equal, else the result is greater-than. + /** + * Optimized implementation of isWhitespace. Must be kept in line with ::whitespace array + */ - if (len1 < len2) - return -1; - else if (len1 == len2) - return 0; - else - return 1; - } + template bool isWhitespace(T c) + { + return c == ' ' || c == '\n' || c == '\r' || c == '\t'; + } - - /** - * Optimized implementation of isWhitespace. Must be kept in line with ::whitespace array - */ - - template bool isWhitespace (T c) - { - return c == ' ' || c == '\n' || c == '\r' || c == '\t'; - } - - /* - * @todo: uncomment when caseInsensitiveCompare matures - * - template class CompareNoCasePredicate - { - public: - bool operator()( T & a, T & b ) const - { - return caseInsensitiveCompare (a, b) < 0; + template class CompareNoCasePredicate + { + public: + bool operator()(T & a, T & b) const + { + return caseInsensitiveCompare(a, b) < 0; + }; }; + + template class EqualsNoCasePredicate + { + public: + bool operator()(T & a, T & b) const + { + return caseInsensitiveCompare(a, b) == 0; + }; + }; + + //----------------------------------------------------------------- + //-- implementation + //----------------------------------------------------------------- + + //----------------------------------------------------------------- + /** + * Utility to convert a string and obtain the result by value + */ + + inline String narrowToWide(const NarrowString & nstr) + { + return String(nstr.begin(), nstr.end()); // STL original + } + + //----------------------------------------------------------------- + /** + * Utility to convert a string and obtain the result by reference + */ + + inline String & narrowToWide(const NarrowString & nstr, String & str) + { + return str.assign(nstr.begin(), nstr.end()); // STL original + } + + //----------------------------------------------------------------- + /** + + * Utility to convert a string and obtain the result by value + + * This should only be used when the Unicode string is known to contain only 8 bit assignable values + + */ + + inline NarrowString wideToNarrow(const String & str) + { + return NarrowString(str.begin(), str.end()); // STL original + } + + //----------------------------------------------------------------- + /** + + * Utility to convert a string and obtain the result by reference + + * This should only be used when the Unicode string is known to contain only 8 bit assignable values + + */ + + inline NarrowString & wideToNarrow(const String & str, NarrowString & nstr) + { + return nstr.assign(str.begin(), str.end()); // STL original + } + + /** + * Get the trimmed version of str by value. + */ + + inline const String getTrim(const String & str, const unicode_char_t * white) + { + const size_t first_nonspace = str.find_first_not_of(white); + const size_t last_nonspace = str.find_last_not_of(white); + return (first_nonspace == str.npos ? str : str.substr(first_nonspace, last_nonspace == str.npos ? last_nonspace : (last_nonspace - first_nonspace + 1))); + } + + //----------------------------------------------------------------- + /** + * Trim the specified string and return a reference to it. + */ + + inline String & trim(String & str, const unicode_char_t * white) + { + return (str = getTrim(str, white)); + } + + /** + * Get the trimmed version of str by value. + */ + + inline const NarrowString getTrim(const NarrowString & str, const char * white) + { + const size_t first_nonspace = str.find_first_not_of(white); + const size_t last_nonspace = str.find_last_not_of(white); + return (first_nonspace == str.npos ? str : str.substr(first_nonspace, last_nonspace == str.npos ? last_nonspace : (last_nonspace - first_nonspace + 1))); + } + + //----------------------------------------------------------------- + /** + * Trim the specified string and return a reference to it. + */ + inline NarrowString & trim(NarrowString & str, const char * white) + { + return (str = getTrim(str, white)); + } + /** + * Return the first non-white position starting with pos. returns str.npos if there is no non-white characer after pos + */ + inline size_t skipWhitespace(const String & str, size_t pos, const unicode_char_t * white) + { + return str.find_first_not_of(white, pos); + } + + //----------------------------------------------------------------- + /** + * Return the first non-white position starting with pos. returns str.npos if there is no non-white characer after pos + */ + + inline size_t skipWhitespace(const NarrowString & str, size_t pos, const char * white) + { + return str.find_first_not_of(white, pos); + } + + //----------------------------------------------------------------- + /** + * Append src to dst, padding the field as needed, and truncating the field if desired. + */ + + inline String & appendStringField(String & dst, const NarrowString & src, size_t width, FieldAlignment fa, unicode_char_t pad, bool truncate) + { + return appendStringField(dst, narrowToWide(src), width, fa, pad, truncate); + } + + // ====================================================================== }; - template class EqualsNoCasePredicate + // ====================================================================== + // Extensions to Base/Archive for String + // ====================================================================== + //class Base::ByteStream; + //----------------------------------------------------------------------- + namespace Base { - public: - bool operator()( T & a, T & b ) const - { - return caseInsensitiveCompare (a, b) == 0; - }; + extern unsigned get(ByteStream::ReadIterator & source, Plat_Unicode::String & target); + extern void put(ByteStream & target, const Plat_Unicode::String & source); + + //--------------------------------------------------------------------- + + // namespace Base }; - */ - -//----------------------------------------------------------------- -//-- implementation -//----------------------------------------------------------------- - - //----------------------------------------------------------------- - /** - * Utility to convert a string and obtain the result by value - */ - - inline String narrowToWide (const NarrowString & nstr) - { -// return String (nstr.begin (), nstr.end ()); // STLPort original - String s; - unsigned index = 0; - s.resize(nstr.size()); - const NarrowString::const_iterator end = nstr.end(); - for (NarrowString::const_iterator iter = nstr.begin(); iter != end; ++iter) - { - // Cast to unsigned char so that we don't pick up a negative value - // for the unsigned short - s[index++] = (unsigned char)*iter; - } - return s; - } - - //----------------------------------------------------------------- - /** - * Utility to convert a string and obtain the result by reference - */ - - inline String & narrowToWide (const NarrowString & nstr, String & str) - { -// return str.assign (nstr.begin (), nstr.end ()); // STLport original - unsigned index = 0; - str.resize(nstr.size()); - const NarrowString::const_iterator end = nstr.end(); - for (NarrowString::const_iterator iter = nstr.begin(); iter != end; ++iter) - { - str[index++] = *iter; - } - return str; - } - - //----------------------------------------------------------------- - /** - - * Utility to convert a string and obtain the result by value - - * This should only be used when the Unicode string is known to contain only 8 bit assignable values - - */ - - inline NarrowString wideToNarrow (const String & str) - { -// return NarrowString (str.begin (), str.end ()); // STLPort original - NarrowString s; - unsigned index = 0; - s.resize(str.size()); - const String::const_iterator end = str.end(); - for (String::const_iterator iter = str.begin(); iter != end; ++iter) - { - s[index++] = (char)*iter; - } - return s; - } - - //----------------------------------------------------------------- - /** - - * Utility to convert a string and obtain the result by reference - - * This should only be used when the Unicode string is known to contain only 8 bit assignable values - - */ - - inline NarrowString & wideToNarrow (const String & str, NarrowString & nstr) - { -// return nstr.assign (str.begin (), str.end ()); // STLPort original - unsigned index = 0; - nstr.resize(str.size()); - const String::const_iterator end = str.end(); - for (String::const_iterator iter = str.begin(); iter != end; ++iter) - { - nstr[index++] = (char)*iter; - } - return nstr; - } - - /** - * Get the trimmed version of str by value. - */ - - inline const String getTrim (const String & str, const unicode_char_t * white) - { - const size_t first_nonspace = str.find_first_not_of ( white ); - const size_t last_nonspace = str.find_last_not_of ( white ); - return (first_nonspace == str.npos ? str : str.substr (first_nonspace, last_nonspace == str.npos ? last_nonspace : (last_nonspace - first_nonspace + 1))); - } - - - - //----------------------------------------------------------------- - /** - * Trim the specified string and return a reference to it. - */ - - inline String & trim (String & str, const unicode_char_t * white) - { - return (str = getTrim (str, white)); - } - - /** - * Get the trimmed version of str by value. - */ - - inline const NarrowString getTrim (const NarrowString & str, const char * white) - { - const size_t first_nonspace = str.find_first_not_of ( white ); - const size_t last_nonspace = str.find_last_not_of ( white ); - return (first_nonspace == str.npos ? str : str.substr (first_nonspace, last_nonspace == str.npos ? last_nonspace : (last_nonspace - first_nonspace + 1))); - } - - //----------------------------------------------------------------- - /** - * Trim the specified string and return a reference to it. - */ - inline NarrowString & trim (NarrowString & str, const char * white) - { - return (str = getTrim (str, white)); - } - /** - * Return the first non-white position starting with pos. returns str.npos if there is no non-white characer after pos - */ - inline size_t skipWhitespace (const String & str, size_t pos, const unicode_char_t * white) - { - return str.find_first_not_of (white, pos); - } - - //----------------------------------------------------------------- - /** - * Return the first non-white position starting with pos. returns str.npos if there is no non-white characer after pos - */ - - inline size_t skipWhitespace (const NarrowString & str, size_t pos, const char * white) - { - return str.find_first_not_of (white, pos); - } - - - - //----------------------------------------------------------------- - /** - * Append src to dst, padding the field as needed, and truncating the field if desired. - */ - - inline String & appendStringField (String & dst, const NarrowString & src, size_t width, FieldAlignment fa, unicode_char_t pad, bool truncate) - { - return appendStringField (dst, narrowToWide (src), width, fa, pad, truncate); - } - -// ====================================================================== -}; - -// ====================================================================== -// Extensions to Base/Archive for String -// ====================================================================== -//class Base::ByteStream; -//----------------------------------------------------------------------- -namespace Base -{ -extern unsigned get(ByteStream::ReadIterator & source, Plat_Unicode::String & target); -extern void put(ByteStream & target, const Plat_Unicode::String & source); - -//--------------------------------------------------------------------- - - // namespace Base - -}; #ifdef EXTERNAL_DISTRO }; #endif