HifiSockAddr to SharedNodePointer changes in MetavoxelServer

This commit is contained in:
Stephen Birarda 2014-02-07 14:27:10 -08:00
parent 5bfc77a899
commit a1a4a3db8a
7 changed files with 31 additions and 26 deletions

View file

@ -50,10 +50,13 @@ void MetavoxelServer::readPendingDatagrams() {
while (readAvailableDatagram(receivedPacket, senderSockAddr)) { while (readAvailableDatagram(receivedPacket, senderSockAddr)) {
if (nodeList->packetVersionAndHashMatch(receivedPacket)) { if (nodeList->packetVersionAndHashMatch(receivedPacket)) {
switch (packetTypeForPacket(receivedPacket)) { switch (packetTypeForPacket(receivedPacket)) {
case PacketTypeMetavoxelData: case PacketTypeMetavoxelData: {
processData(receivedPacket, senderSockAddr); SharedNodePointer matchingNode = nodeList->sendingNodeForPacket(receivedPacket);
if (matchingNode) {
processData(receivedPacket, matchingNode);
}
break; break;
}
default: default:
NodeList::getInstance()->processNodeData(senderSockAddr, receivedPacket); NodeList::getInstance()->processNodeData(senderSockAddr, receivedPacket);
break; break;
@ -76,10 +79,10 @@ void MetavoxelServer::sendDeltas() {
_sendTimer.start(qMax(0, 2 * SEND_INTERVAL - elapsed)); _sendTimer.start(qMax(0, 2 * SEND_INTERVAL - elapsed));
} }
void MetavoxelServer::processData(const QByteArray& data, const HifiSockAddr& sender) { void MetavoxelServer::processData(const QByteArray& data, const SharedNodePointer& sendingNode) {
// read the session id // read the session id
int headerPlusIDSize; int headerPlusIDSize;
QUuid sessionID = readSessionID(data, sender, headerPlusIDSize); QUuid sessionID = readSessionID(data, sendingNode, headerPlusIDSize);
if (sessionID.isNull()) { if (sessionID.isNull()) {
return; return;
} }
@ -87,18 +90,19 @@ void MetavoxelServer::processData(const QByteArray& data, const HifiSockAddr& se
// forward to session, creating if necessary // forward to session, creating if necessary
MetavoxelSession*& session = _sessions[sessionID]; MetavoxelSession*& session = _sessions[sessionID];
if (!session) { if (!session) {
session = new MetavoxelSession(this, sessionID, QByteArray::fromRawData(data.constData(), headerPlusIDSize), sender); session = new MetavoxelSession(this, sessionID, QByteArray::fromRawData(data.constData(), headerPlusIDSize),
sendingNode);
} }
session->receivedData(data, sender); session->receivedData(data, sendingNode);
} }
MetavoxelSession::MetavoxelSession(MetavoxelServer* server, const QUuid& sessionId, MetavoxelSession::MetavoxelSession(MetavoxelServer* server, const QUuid& sessionId,
const QByteArray& datagramHeader, const HifiSockAddr& sender) : const QByteArray& datagramHeader, const SharedNodePointer& sendingNode) :
QObject(server), QObject(server),
_server(server), _server(server),
_sessionId(sessionId), _sessionId(sessionId),
_sequencer(datagramHeader), _sequencer(datagramHeader),
_sender(sender) { _sendingNode(sendingNode) {
const int TIMEOUT_INTERVAL = 30 * 1000; const int TIMEOUT_INTERVAL = 30 * 1000;
_timeoutTimer.setInterval(TIMEOUT_INTERVAL); _timeoutTimer.setInterval(TIMEOUT_INTERVAL);
@ -114,15 +118,15 @@ MetavoxelSession::MetavoxelSession(MetavoxelServer* server, const QUuid& session
SendRecord record = { 0 }; SendRecord record = { 0 };
_sendRecords.append(record); _sendRecords.append(record);
qDebug() << "Opened session [sessionId=" << _sessionId << ", sender=" << _sender << "]"; qDebug() << "Opened session [sessionId=" << _sessionId << ", sendingNode=" << sendingNode << "]";
} }
void MetavoxelSession::receivedData(const QByteArray& data, const HifiSockAddr& sender) { void MetavoxelSession::receivedData(const QByteArray& data, const SharedNodePointer& sendingNode) {
// reset the timeout timer // reset the timeout timer
_timeoutTimer.start(); _timeoutTimer.start();
// save the most recent sender // save the most recent sender
_sender = sender; _sendingNode = sendingNode;
// process through sequencer // process through sequencer
_sequencer.receivedDatagram(data); _sequencer.receivedDatagram(data);
@ -140,12 +144,12 @@ void MetavoxelSession::sendDelta() {
} }
void MetavoxelSession::timedOut() { void MetavoxelSession::timedOut() {
qDebug() << "Session timed out [sessionId=" << _sessionId << ", sender=" << _sender << "]"; qDebug() << "Session timed out [sessionId=" << _sessionId << ", sendingNode=" << _sendingNode << "]";
_server->removeSession(_sessionId); _server->removeSession(_sessionId);
} }
void MetavoxelSession::sendData(const QByteArray& data) { void MetavoxelSession::sendData(const QByteArray& data) {
NodeList::getInstance()->getNodeSocket().writeDatagram(data, _sender.getAddress(), _sender.getPort()); NodeList::getInstance()->writeDatagram(data, _sendingNode);
} }
void MetavoxelSession::readPacket(Bitstream& in) { void MetavoxelSession::readPacket(Bitstream& in) {
@ -161,7 +165,7 @@ void MetavoxelSession::clearSendRecordsBefore(int index) {
void MetavoxelSession::handleMessage(const QVariant& message) { void MetavoxelSession::handleMessage(const QVariant& message) {
int userType = message.userType(); int userType = message.userType();
if (userType == CloseSessionMessage::Type) { if (userType == CloseSessionMessage::Type) {
qDebug() << "Session closed [sessionId=" << _sessionId << ", sender=" << _sender << "]"; qDebug() << "Session closed [sessionId=" << _sessionId << ", sendingNode=" << _sendingNode << "]";
_server->removeSession(_sessionId); _server->removeSession(_sessionId);
} else if (userType == ClientStateMessage::Type) { } else if (userType == ClientStateMessage::Type) {

View file

@ -47,7 +47,7 @@ private slots:
private: private:
void processData(const QByteArray& data, const HifiSockAddr& sender); void processData(const QByteArray& data, const SharedNodePointer& sendingNode);
QTimer _sendTimer; QTimer _sendTimer;
qint64 _lastSend; qint64 _lastSend;
@ -64,9 +64,9 @@ class MetavoxelSession : public QObject {
public: public:
MetavoxelSession(MetavoxelServer* server, const QUuid& sessionId, MetavoxelSession(MetavoxelServer* server, const QUuid& sessionId,
const QByteArray& datagramHeader, const HifiSockAddr& sender); const QByteArray& datagramHeader, const SharedNodePointer& sendingNode);
void receivedData(const QByteArray& data, const HifiSockAddr& sender); void receivedData(const QByteArray& data, const SharedNodePointer& sendingNode);
void sendDelta(); void sendDelta();
@ -96,7 +96,7 @@ private:
QTimer _timeoutTimer; QTimer _timeoutTimer;
DatagramSequencer _sequencer; DatagramSequencer _sequencer;
HifiSockAddr _sender; SharedNodePointer _sendingNode;
glm::vec3 _position; glm::vec3 _position;

View file

@ -144,9 +144,9 @@ void MetavoxelSystem::removeClient(const QUuid& uuid) {
delete client; delete client;
} }
void MetavoxelSystem::receivedData(const QByteArray& data, const HifiSockAddr& sender) { void MetavoxelSystem::receivedData(const QByteArray& data, const SharedNodePointer& sendingNode) {
int headerPlusIDSize; int headerPlusIDSize;
QUuid sessionID = readSessionID(data, sender, headerPlusIDSize); QUuid sessionID = readSessionID(data, sendingNode, headerPlusIDSize);
if (sessionID.isNull()) { if (sessionID.isNull()) {
return; return;
} }

View file

@ -52,7 +52,7 @@ private:
Q_INVOKABLE void addClient(const SharedNodePointer& node); Q_INVOKABLE void addClient(const SharedNodePointer& node);
Q_INVOKABLE void removeClient(const QUuid& uuid); Q_INVOKABLE void removeClient(const QUuid& uuid);
Q_INVOKABLE void receivedData(const QByteArray& data, const HifiSockAddr& sender); Q_INVOKABLE void receivedData(const QByteArray& data, const SharedNodePointer& sendingNode);
class Point { class Point {
public: public:

View file

@ -106,7 +106,7 @@ static QItemEditorCreatorBase* qColorEditorCreator = createQColorEditorCreator()
static QItemEditorCreatorBase* vec3EditorCreator = createVec3EditorCreator(); static QItemEditorCreatorBase* vec3EditorCreator = createVec3EditorCreator();
static QItemEditorCreatorBase* parameterizedURLEditorCreator = createParameterizedURLEditorCreator(); static QItemEditorCreatorBase* parameterizedURLEditorCreator = createParameterizedURLEditorCreator();
QUuid readSessionID(const QByteArray& data, const HifiSockAddr& sender, int& headerPlusIDSize) { QUuid readSessionID(const QByteArray& data, const SharedNodePointer& sendingNode, int& headerPlusIDSize) {
// get the header size // get the header size
int headerSize = numBytesForPacketHeader(data); int headerSize = numBytesForPacketHeader(data);
@ -114,7 +114,7 @@ QUuid readSessionID(const QByteArray& data, const HifiSockAddr& sender, int& hea
const int UUID_BYTES = 16; const int UUID_BYTES = 16;
headerPlusIDSize = headerSize + UUID_BYTES; headerPlusIDSize = headerSize + UUID_BYTES;
if (data.size() < headerPlusIDSize) { if (data.size() < headerPlusIDSize) {
qWarning() << "Metavoxel data too short [size=" << data.size() << ", sender=" << sender << "]\n"; qWarning() << "Metavoxel data too short [size=" << data.size() << ", sendingNode=" << sendingNode << "]\n";
return QUuid(); return QUuid();
} }
return QUuid::fromRfc4122(QByteArray::fromRawData(data.constData() + headerSize, UUID_BYTES)); return QUuid::fromRfc4122(QByteArray::fromRawData(data.constData() + headerSize, UUID_BYTES));

View file

@ -15,6 +15,7 @@
#include <QUuid> #include <QUuid>
#include <QWidget> #include <QWidget>
#include <NodeList.h>
#include <RegisteredMetaTypes.h> #include <RegisteredMetaTypes.h>
#include "Bitstream.h" #include "Bitstream.h"
@ -30,7 +31,7 @@ class NetworkProgram;
/// Reads and returns the session ID from a datagram. /// Reads and returns the session ID from a datagram.
/// \param[out] headerPlusIDSize the size of the header (including the session ID) within the data /// \param[out] headerPlusIDSize the size of the header (including the session ID) within the data
/// \return the session ID, or a null ID if invalid (in which case a warning will be logged) /// \return the session ID, or a null ID if invalid (in which case a warning will be logged)
QUuid readSessionID(const QByteArray& data, const HifiSockAddr& sender, int& headerPlusIDSize); QUuid readSessionID(const QByteArray& data, const SharedNodePointer& sendingNode, int& headerPlusIDSize);
/// A streamable axis-aligned bounding box. /// A streamable axis-aligned bounding box.
class Box { class Box {

View file

@ -21,7 +21,7 @@ quint8 DataServerClient::_sequenceNumber = 0;
const char MULTI_KEY_VALUE_SEPARATOR = '|'; const char MULTI_KEY_VALUE_SEPARATOR = '|';
const char DATA_SERVER_HOSTNAME[] = "data.highfidelity.io"; const char DATA_SERVER_HOSTNAME[] = "localhost";
const unsigned short DATA_SERVER_PORT = 3282; const unsigned short DATA_SERVER_PORT = 3282;
const HifiSockAddr& DataServerClient::dataServerSockAddr() { const HifiSockAddr& DataServerClient::dataServerSockAddr() {