diff --git a/src/buffer/buffer.cpp b/src/buffer/buffer.cpp index 847173da..999c6d68 100644 --- a/src/buffer/buffer.cpp +++ b/src/buffer/buffer.cpp @@ -213,6 +213,11 @@ namespace Buffer { while (true){ thisStream->getWriteLock(); if (thisStream->getStream()->parsePacket(thisStream->getIPInput().Received())){ + if (thisStream->getStream()->metadata.isMember("reset")){ + thisStream->disconnectUsers(); + thisStream->getStream()->metadata.removeMember("reset"); + thisStream->getStream()->metadata.netPrepare(); + } thisStream->dropWriteLock(true); }else{ thisStream->dropWriteLock(false); diff --git a/src/buffer/buffer_stream.cpp b/src/buffer/buffer_stream.cpp index 0f15e048..ed8c8454 100644 --- a/src/buffer/buffer_stream.cpp +++ b/src/buffer/buffer_stream.cpp @@ -227,12 +227,20 @@ namespace Buffer { users.insert(newUser); } - ///\brief Add a user to the userlist. - ///\param newUser The user to be added. + ///\brief Removes a user to the userlist. + ///\param newUser The user to be removed. void Stream::removeUser(user * oldUser){ tthread::lock_guard guard(stats_mutex); users.erase(oldUser); } + + ///\brief Disconnects all users. + void Stream::disconnectUsers(){ + tthread::lock_guard guard(stats_mutex); + for (usersIt = users.begin(); usersIt != users.end(); usersIt++){ + (*usersIt)->Disconnect("Stream reset"); + } + } ///\brief Blocks the thread until new data is available. void Stream::waitForData(){ diff --git a/src/buffer/buffer_stream.h b/src/buffer/buffer_stream.h index bd086f3d..c3a0ddf3 100644 --- a/src/buffer/buffer_stream.h +++ b/src/buffer/buffer_stream.h @@ -51,6 +51,8 @@ namespace Buffer { void addUser(user * newUser); /// Delete a user from the userlist. void removeUser(user * oldUser); + /// Disconnects all users. + void disconnectUsers(); /// Blocks the thread until new data is available. void waitForData(); /// Cleanup function diff --git a/src/buffer/buffer_user.cpp b/src/buffer/buffer_user.cpp index d3d7d693..13d4a660 100644 --- a/src/buffer/buffer_user.cpp +++ b/src/buffer/buffer_user.cpp @@ -29,7 +29,6 @@ namespace Buffer { ///\brief Drops held DTSC::Ring class, if one is held. user::~user(){ - Stream::get()->dropRing(myRing); } //destructor ///\brief Disconnects the current user. Doesn't do anything if already disconnected.