mirror of
https://github.com/overte-org/overte.git
synced 2025-08-05 07:49:41 +02:00
Working on server sessions.
This commit is contained in:
parent
b986d91217
commit
97e7340ba6
5 changed files with 112 additions and 3 deletions
|
@ -9,8 +9,10 @@
|
|||
#include <QTimer>
|
||||
|
||||
#include <Logging.h>
|
||||
#include <PacketHeaders.h>
|
||||
|
||||
#include "MetavoxelServer.h"
|
||||
#include "Session.h"
|
||||
|
||||
MetavoxelServer::MetavoxelServer(const unsigned char* dataBuffer, int numBytes) :
|
||||
ThreadedAssignment(dataBuffer, numBytes) {
|
||||
|
@ -37,5 +39,34 @@ void MetavoxelServer::run() {
|
|||
}
|
||||
|
||||
void MetavoxelServer::processDatagram(const QByteArray& dataByteArray, const HifiSockAddr& senderSockAddr) {
|
||||
NodeList::getInstance()->processNodeData(senderSockAddr, (unsigned char*)dataByteArray.data(), dataByteArray.size());
|
||||
switch (dataByteArray.at(0)) {
|
||||
case PACKET_TYPE_METAVOXEL_DATA:
|
||||
processData(dataByteArray, senderSockAddr);
|
||||
break;
|
||||
|
||||
default:
|
||||
NodeList::getInstance()->processNodeData(senderSockAddr, (unsigned char*)dataByteArray.data(), dataByteArray.size());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MetavoxelServer::processData(const QByteArray& data, const HifiSockAddr& sender) {
|
||||
// get the header size
|
||||
int headerSize = numBytesForPacketHeader((unsigned char*)data.constData());
|
||||
|
||||
// read the session id
|
||||
const int UUID_BYTES = 16;
|
||||
if (data.size() < headerSize + UUID_BYTES) {
|
||||
qWarning() << "Metavoxel data too short [size=" << data.size() << ", sender=" << sender << "]\n";
|
||||
return;
|
||||
}
|
||||
QUuid sessionId = QUuid::fromRfc4122(QByteArray::fromRawData(data.constData() + headerSize, UUID_BYTES));
|
||||
|
||||
// forward to session, creating if necessary
|
||||
Session*& session = _sessions[sessionId];
|
||||
if (!session) {
|
||||
session = new Session(this);
|
||||
}
|
||||
session->receivedData(QByteArray::fromRawData(data.constData() + headerSize + UUID_BYTES,
|
||||
data.size() - headerSize - UUID_BYTES), sender);
|
||||
}
|
||||
|
|
|
@ -2,17 +2,22 @@
|
|||
// MetavoxelServer.h
|
||||
// hifi
|
||||
//
|
||||
// Created by Andrzej Kapolka on 12/28/2013.
|
||||
// Created by Andrzej Kapolka on 12/18/13.
|
||||
// Copyright (c) 2013 High Fidelity, Inc. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef __hifi__MetavoxelServer__
|
||||
#define __hifi__MetavoxelServer__
|
||||
|
||||
#include <QHash>
|
||||
#include <QUuid>
|
||||
|
||||
#include <ThreadedAssignment.h>
|
||||
|
||||
#include <MetavoxelData.h>
|
||||
|
||||
class Session;
|
||||
|
||||
/// Maintains a shared metavoxel system, accepting change requests and broadcasting updates.
|
||||
class MetavoxelServer : public ThreadedAssignment {
|
||||
Q_OBJECT
|
||||
|
@ -27,7 +32,11 @@ public:
|
|||
|
||||
private:
|
||||
|
||||
void processData(const QByteArray& data, const HifiSockAddr& sender);
|
||||
|
||||
MetavoxelData _data;
|
||||
|
||||
QHash<QUuid, Session*> _sessions;
|
||||
};
|
||||
|
||||
#endif /* defined(__hifi__MetavoxelServer__) */
|
||||
|
|
29
assignment-client/src/metavoxels/Session.cpp
Normal file
29
assignment-client/src/metavoxels/Session.cpp
Normal file
|
@ -0,0 +1,29 @@
|
|||
//
|
||||
// Session.cpp
|
||||
// hifi
|
||||
//
|
||||
// Created by Andrzej Kapolka on 12/28/13.
|
||||
// Copyright (c) 2013 High Fidelity, Inc. All rights reserved.
|
||||
//
|
||||
|
||||
#include "MetavoxelServer.h"
|
||||
#include "Session.h"
|
||||
|
||||
Session::Session(MetavoxelServer* server) :
|
||||
QObject(server),
|
||||
_server(server) {
|
||||
|
||||
connect(&_sequencer, SIGNAL(readyToWrite(const QByteArray&)), SLOT(sendData(const QByteArray&)));
|
||||
connect(&_sequencer, SIGNAL(readyToRead(Bitstream&)), SLOT(readPacket(Bitstream&)));
|
||||
}
|
||||
|
||||
void Session::receivedData(const QByteArray& data, const HifiSockAddr& sender) {
|
||||
// process through sequencer
|
||||
_sequencer.receivedDatagram(data);
|
||||
}
|
||||
|
||||
void Session::sendData(const QByteArray& data) {
|
||||
}
|
||||
|
||||
void Session::readPacket(Bitstream& in) {
|
||||
}
|
39
assignment-client/src/metavoxels/Session.h
Normal file
39
assignment-client/src/metavoxels/Session.h
Normal file
|
@ -0,0 +1,39 @@
|
|||
//
|
||||
// Session.h
|
||||
// hifi
|
||||
//
|
||||
// Created by Andrzej Kapolka on 12/28/13.
|
||||
// Copyright (c) 2013 High Fidelity, Inc. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef __hifi__Session__
|
||||
#define __hifi__Session__
|
||||
|
||||
#include <DatagramSequencer.h>
|
||||
|
||||
class HifiSockAddr;
|
||||
class MetavoxelServer;
|
||||
|
||||
/// Contains the state of a single client session.
|
||||
class Session : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
Session(MetavoxelServer* server);
|
||||
|
||||
void receivedData(const QByteArray& data, const HifiSockAddr& sender);
|
||||
|
||||
private slots:
|
||||
|
||||
void sendData(const QByteArray& data);
|
||||
|
||||
void readPacket(Bitstream& in);
|
||||
|
||||
private:
|
||||
|
||||
MetavoxelServer* _server;
|
||||
DatagramSequencer _sequencer;
|
||||
};
|
||||
|
||||
#endif /* defined(__hifi__Session__) */
|
|
@ -703,7 +703,8 @@ Node* NodeList::addOrUpdateNode(const QUuid& uuid, char nodeType,
|
|||
node->lock();
|
||||
|
||||
if (node->getType() == NODE_TYPE_AUDIO_MIXER ||
|
||||
node->getType() == NODE_TYPE_VOXEL_SERVER) {
|
||||
node->getType() == NODE_TYPE_VOXEL_SERVER ||
|
||||
node->getType() == NODE_TYPE_METAVOXEL_SERVER) {
|
||||
// until the Audio class also uses our nodeList, we need to update
|
||||
// the lastRecvTimeUsecs for the audio mixer so it doesn't get killed and re-added continously
|
||||
node->setLastHeardMicrostamp(usecTimestampNow());
|
||||
|
|
Loading…
Reference in a new issue