rework SendBuffer fixing an issue where ClearBuffer() nuked the buffer after playing to the first client

This commit is contained in:
Jim Hull
2011-09-13 09:43:24 -07:00
parent c13148b31d
commit 793c34699a

View File

@@ -543,12 +543,23 @@ void CChan::SendBuffer(CClient* pClient) {
if (m_pNetwork && m_pNetwork->IsUserAttached()) {
const vector<CString>& vsBuffer = GetBuffer();
// in the event that pClient is NULL, need to send this to all clients for the user
// I'm presuming here that pClient is listed inside vClients thus vClients at this
// point can't be empty.
//
// This loop has to be cycled twice to maintain the existing behavior which is
// 1. OnChanBufferStarting
// 2. OnChanBufferPlayLine
// 3. ClearBuffer() if not keeping the buffer
// 4. OnChanBufferEnding
//
// With the exception of ClearBuffer(), this needs to happen per client, and
// if pClient is not NULL, the loops break after the first iteration.
//
// Rework this if you like ...
if (vsBuffer.size()) {
const vector<CClient*> & vClients = m_pNetwork->GetClients();
for( size_t uClient = 0; uClient < vClients.size(); ++uClient ) {
// in the event that pClient is NULL, need to send this to all clients for the user
// I'm presuming here that pClient is listed inside vClients so thus vClients at this
// point can't be empty. Rework this if you like ...
CClient * pUseClient = ( pClient ? pClient : vClients[uClient] );
bool bSkipStatusMsg = false;
@@ -564,21 +575,29 @@ void CChan::SendBuffer(CClient* pClient) {
m_pNetwork->PutUser(sLine, pUseClient);
}
if (!KeepBuffer()) {
ClearBuffer();
}
if( pClient )
break;
bSkipStatusMsg = false;
}
if (!KeepBuffer()) {
ClearBuffer();
}
for( size_t uClient = 0; uClient < vClients.size(); ++uClient ) {
CClient * pUseClient = ( pClient ? pClient : vClients[uClient] );
bool bSkipStatusMsg = false;
NETWORKMODULECALL(OnChanBufferEnding(*this, *pUseClient), m_pNetwork->GetUser(), m_pNetwork, NULL, bSkipStatusMsg = true);
if (!bSkipStatusMsg) {
m_pNetwork->PutUser(":***!znc@znc.in PRIVMSG " + GetName() + " :Playback Complete.", pUseClient);
}
if( pClient )
if( pClient )
break;
}
}
}
}