diff options
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/network_content.cpp | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 66c2c2d5d..f0521f0b5 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -750,29 +750,37 @@ void ClientNetworkContentSocketHandler::CheckDependencyState(ContentInfo *ci) void ClientNetworkContentSocketHandler::OnConnect(bool success) { - for (ContentCallback **iter = this->callbacks.Begin(); iter != this->callbacks.End(); iter++) { - (*iter)->OnConnect(success); + for (ContentCallback **iter = this->callbacks.Begin(); iter != this->callbacks.End(); /* nothing */) { + ContentCallback *cb = *iter; + cb->OnConnect(success); + if (*iter != cb) iter++; } } void ClientNetworkContentSocketHandler::OnDisconnect() { - for (ContentCallback **iter = this->callbacks.Begin(); iter != this->callbacks.End(); iter++) { - (*iter)->OnDisconnect(); + for (ContentCallback **iter = this->callbacks.Begin(); iter != this->callbacks.End(); /* nothing */) { + ContentCallback *cb = *iter; + cb->OnDisconnect(); + if (*iter != cb) iter++; } } void ClientNetworkContentSocketHandler::OnReceiveContentInfo(const ContentInfo *ci) { - for (ContentCallback **iter = this->callbacks.Begin(); iter != this->callbacks.End(); iter++) { - (*iter)->OnReceiveContentInfo(ci); + for (ContentCallback **iter = this->callbacks.Begin(); iter != this->callbacks.End(); /* nothing */) { + ContentCallback *cb = *iter; + cb->OnReceiveContentInfo(ci); + if (*iter != cb) iter++; } } void ClientNetworkContentSocketHandler::OnDownloadProgress(const ContentInfo *ci, uint bytes) { - for (ContentCallback **iter = this->callbacks.Begin(); iter != this->callbacks.End(); iter++) { - (*iter)->OnDownloadProgress(ci, bytes); + for (ContentCallback **iter = this->callbacks.Begin(); iter != this->callbacks.End(); /* nothing */) { + ContentCallback *cb = *iter; + cb->OnDownloadProgress(ci, bytes); + if (*iter != cb) iter++; } } @@ -783,8 +791,10 @@ void ClientNetworkContentSocketHandler::OnDownloadComplete(ContentID cid) ci->state = ContentInfo::ALREADY_HERE; } - for (ContentCallback **iter = this->callbacks.Begin(); iter != this->callbacks.End(); iter++) { - (*iter)->OnDownloadComplete(cid); + for (ContentCallback **iter = this->callbacks.Begin(); iter != this->callbacks.End(); /* nothing */) { + ContentCallback *cb = *iter; + cb->OnDownloadComplete(cid); + if (*iter != cb) iter++; } } |