private void SendFiles(string[] files, bool forced)
{
int position = 0;
// special case
if(forced) {
SendResultChunk(files, false);
lastSendTime = DateTime.Now;
return;
}
if(unsentFiles.Count > 0) {
if(unsentFiles.Count + files.Length >= _resultChunkLength) {
// send a chunk
string[] chunk = new string[_resultChunkLength];
unsentFiles.CopyTo(chunk, 0);
for(int i = unsentFiles.Count; i < _resultChunkLength; i++) {
chunk[i] = files[i - unsentFiles.Count];
}
position = _resultChunkLength - unsentFiles.Count;
unsentFiles.Clear();
SendResultChunk(chunk, false);
if(GetStop() == true) {
return;
}
}
}
// send full chuncks
int chunkCount = (files.Length - position) / _resultChunkLength;
for(int i = 0; i < chunkCount; i++) {
string[] chunk = new string[_resultChunkLength];
int lastIndex = position + _resultChunkLength;
for(int j = position; j < lastIndex; j++) {
chunk[j - position] = files[j];
}
position += _resultChunkLength;
SendResultChunk(chunk, false);
if(GetStop() == true) {
return;
}
}
// send or store last files
if(position != files.Length) {
for(int i = position; i < files.Length; i++) {
unsentFiles.Enqueue(files[i]);
}
}
stop = false;
lastSendTime = DateTime.Now;
}