Fixes for resetting a stream.

This commit is contained in:
Erik Zandvliet 2013-07-22 11:37:47 +02:00
parent 4a9c137aef
commit 1430b33413
4 changed files with 17 additions and 3 deletions

View file

@ -213,6 +213,11 @@ namespace Buffer {
while (true){ while (true){
thisStream->getWriteLock(); thisStream->getWriteLock();
if (thisStream->getStream()->parsePacket(thisStream->getIPInput().Received())){ 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); thisStream->dropWriteLock(true);
}else{ }else{
thisStream->dropWriteLock(false); thisStream->dropWriteLock(false);

View file

@ -227,12 +227,20 @@ namespace Buffer {
users.insert(newUser); users.insert(newUser);
} }
///\brief Add a user to the userlist. ///\brief Removes a user to the userlist.
///\param newUser The user to be added. ///\param newUser The user to be removed.
void Stream::removeUser(user * oldUser){ void Stream::removeUser(user * oldUser){
tthread::lock_guard<tthread::mutex> guard(stats_mutex); tthread::lock_guard<tthread::mutex> guard(stats_mutex);
users.erase(oldUser); users.erase(oldUser);
} }
///\brief Disconnects all users.
void Stream::disconnectUsers(){
tthread::lock_guard<tthread::mutex> guard(stats_mutex);
for (usersIt = users.begin(); usersIt != users.end(); usersIt++){
(*usersIt)->Disconnect("Stream reset");
}
}
///\brief Blocks the thread until new data is available. ///\brief Blocks the thread until new data is available.
void Stream::waitForData(){ void Stream::waitForData(){

View file

@ -51,6 +51,8 @@ namespace Buffer {
void addUser(user * newUser); void addUser(user * newUser);
/// Delete a user from the userlist. /// Delete a user from the userlist.
void removeUser(user * oldUser); void removeUser(user * oldUser);
/// Disconnects all users.
void disconnectUsers();
/// Blocks the thread until new data is available. /// Blocks the thread until new data is available.
void waitForData(); void waitForData();
/// Cleanup function /// Cleanup function

View file

@ -29,7 +29,6 @@ namespace Buffer {
///\brief Drops held DTSC::Ring class, if one is held. ///\brief Drops held DTSC::Ring class, if one is held.
user::~user(){ user::~user(){
Stream::get()->dropRing(myRing);
} //destructor } //destructor
///\brief Disconnects the current user. Doesn't do anything if already disconnected. ///\brief Disconnects the current user. Doesn't do anything if already disconnected.