using System; using ZeroLevel.Models; namespace ZeroLevel.Network.FileTransfer { public sealed class FileReceiver { private readonly string _baseFolder; private readonly ClientFolderNameMapper _nameMapper; private readonly FileWriter _receiver; public FileReceiver(IRouter router, string baseFolder, ClientFolderNameMapper nameMapper) { _baseFolder = baseFolder ?? throw new Exception(nameof(baseFolder)); _nameMapper = nameMapper ?? throw new Exception(nameof(nameMapper)); _receiver = new FileWriter(baseFolder); if (false == router.ContainsRequestorInbox("__file_transfer_start_transfer__")) { router.RegisterInbox("__file_transfer_start_transfer__", (c, f) => _receiver.Incoming(f, nameMapper(c))); } if (false == router.ContainsRequestorInbox("__file_transfer_frame__")) { router.RegisterInbox("__file_transfer_frame__", (_, f) => _receiver.Incoming(f)); } if (false == router.ContainsRequestorInbox("__file_transfer_complete_transfer__")) { router.RegisterInbox("__file_transfer_complete_transfer__", (_, f) => _receiver.Incoming(f)); } if (false == router.ContainsRequestorInbox("__file_transfer_ping__")) { router.RegisterInbox("__file_transfer_ping__", (_) => true); } } } }