public void Start() { if (started) { throw new InvalidOperationException("You already called Start()!"); } foreach (var networkInfo in settings.Networks) { AddNetwork(networkInfo); } foreach (ITransportListener listener in transportListeners) { try { listener.StartListening(); } catch (Exception ex) { LoggingService.LogError($"Listener failed to start: {listener}", ex); failedTransportListeners.Add(new FailedTransportListener(listener, ex)); } } ShareHasher.Start(); RescanSharedDirectories(); // XXX: This is blocking ! shareWatcher.Start(); started = true; Started?.Invoke(null, EventArgs.Empty); }
public Core(ISettings settings, IPlatform platform) { if (settings == null) { throw new ArgumentNullException(nameof(settings)); } if (platform == null) { throw new ArgumentNullException(nameof(platform)); } Settings = settings; Platform = platform; KeyManager keyManager = new KeyManager(settings); rsaProvider = new RSACryptoServiceProvider(); rsaProvider.ImportParameters(keyManager.EncryptionParameters); nodeID = Common.Utils.SHA512Str(rsaProvider.ToXmlString(false)); FileSystem = new FileSystemProvider(this); ShareBuilder = new ShareBuilder(this); ShareBuilder.FinishedIndexing += ShareBuilder_FinishedIndexing; shareWatcher = new ShareWatcher(this); ShareHasher = new ShareHasher(); transportManager = new TransportManager(this); FileTransferManager = new FileTransferManager(this); FileSearchManager = new FileSearchManager(this); DestinationManager = new DestinationManager(this); // XXX: Use reflection to load these: DestinationManager.RegisterSource(new TCPIPv4DestinationSource(this)); DestinationManager.RegisterSource(new TCPIPv6DestinationSource(this)); TrackerFactory.Register("meshwork", typeof(MeshworkTracker)); ITransportListener tcpListener = new TcpTransportListener(this, Settings.TcpListenPort); transportListeners.Add(tcpListener); if (FinishedLoading != null) { FinishedLoading(null, EventArgs.Empty); } }
public void Stop() { ShareBuilder.Stop(); ShareHasher.Stop(); shareWatcher.Stop(); foreach (ITransportListener listener in transportListeners) { listener.StopListening(); } foreach (var transport in TransportManager.Transports) { transport.Disconnect(); } }
public static bool Init(ISettings settings) { if (loaded == true) { throw new Exception ("Please only call this method once."); } if (settings == null) { throw new ArgumentNullException("settings"); } Core.Settings = settings; string pidFilePath = Path.Combine(Core.Settings.DataPath, "meshwork.pid"); if (File.Exists(pidFilePath)) { int processId = -1; Int32.TryParse(File.ReadAllText(pidFilePath), out processId); try { Process.GetProcessById(processId); Console.Error.WriteLine("Meshwork is already running (PID {0})!", processId); return false; } catch (ArgumentException) { File.Delete(pidFilePath); } } File.WriteAllText(pidFilePath, Process.GetCurrentProcess().Id.ToString()); if (settings.KeyEncrypted) { PasswordPrompt(null, EventArgs.Empty); if (!settings.KeyUnlocked) { // Quit! return false; } } rsaProvider = new RSACryptoServiceProvider(); rsaProvider.ImportParameters(settings.EncryptionParameters); nodeID = Common.SHA512Str(rsaProvider.ToXmlString(false)); fileSystem = new FileSystemProvider(); shareBuilder = new ShareBuilder(); shareBuilder.FinishedIndexing += ShareBuilder_FinishedIndexing; shareWatcher = new ShareWatcher(); shareHasher = new ShareHasher(); transportManager = new TransportManager (); fileTransferManager = new FileTransferManager(); fileSearchManager = new FileSearchManager(); destinationManager = new DestinationManager(); // XXX: Use reflection to load these: destinationManager.RegisterSource(new TCPIPv4DestinationSource()); destinationManager.RegisterSource(new TCPIPv6DestinationSource()); MonoTorrent.Client.Tracker.TrackerFactory.Register("meshwork", typeof(MeshworkTracker)); ITransportListener tcpListener = new TcpTransportListener(Core.Settings.TcpListenPort); transportListeners.Add(tcpListener); loaded = true; if (FinishedLoading != null) { FinishedLoading(null, EventArgs.Empty); } return true; }