public Result sendNextFile() throws FileContents.FileContentsException {
		try {
			if (m_fileIndex < m_files.length) {
				try {
					final int index = m_fileIndex;
					final File file = m_files[index];

					final Address addressAgentsWithoutFile =
						m_agents.getAddressOfOutOfDateAgents(new File(m_directory, file.getPath()).lastModified());

					m_distributionControl.sendFile(addressAgentsWithoutFile, new FileContents(m_directory, file));

					return new Result() {
						public int getProgressInCents() {
							return ((index + 1) * 100) / m_files.length;
						}
						public String getFileName() {
							return file.getPath();
						}
					};
				}
				finally {
					++m_fileIndex;
				}
			}
			else {
				m_distributionControl.setHighWaterMark(
					m_agents.getAddressOfAllAgents(),
					m_cacheParameters.createHighWaterMark(m_latestFileTime));
				return null;
			}
		}
		catch (OutOfDateException e) {
			return null;
		}
	}
Extended {@link FileDistributionHandlerImplementation} class for enable caching to distributed files.
File Distribution Handler implementation, (modified for nGrinder)

<p>Not thread safe.</p>

@since 3.5.0
ngrinder-controller/src/main/java/net/grinder/console/distribution/FileDistributionHandlerImplementation.java