using System; using System.Diagnostics; using System.IO; using System.Net; using System.Net.NetworkInformation; using System.Windows; using Launcher.LauncherService; using Launcher.PatcherService; using Launcher.Properties; using Launcher.XAML; using MonoTorrent.Client; using MonoTorrent.Client.Encryption; using MonoTorrent.Common; namespace Launcher.Code { public static class DataProvider { public static int CLIENT_LISTENPORT = 1245; public static void Initialize() { CLIENT_LISTENPORT = (new Random()).Next(1000, 2000); SetFolders(); EnsureFoldersExists(); LauncherServiceClient = new LauncherServiceClient(); PatcherServiceClient = new PatcherServiceClient(); FSClient = new FileSecurityClient(); ClientEngine = new ClientEngine(new EngineSettings(DataFilesFolder, CLIENT_LISTENPORT) { AllowedEncryption = EncryptionTypes.All, GlobalMaxConnections = 50, GlobalMaxDownloadSpeed = 50000, GlobalMaxUploadSpeed = 50000, }); ClientEngine.ChangeListenEndpoint(new IPEndPoint(IPAddress.Any, CLIENT_LISTENPORT)); while (ClientEngine.Listener.Status == ListenerStatus.PortNotFree) { CLIENT_LISTENPORT = (new Random()).Next(1000, 2000); ClientEngine.ChangeListenEndpoint(new IPEndPoint(IPAddress.Any, CLIENT_LISTENPORT)); } Trace.WriteLine("Listening on " + CLIENT_LISTENPORT); StandartTorrentSettings = new TorrentSettings(50, 500) { EnablePeerExchange = true, MaxDownloadSpeed = 500000, MaxUploadSpeed = 5000 }; Version = Settings.Default.Version; StartVersion = Version; try { LauncherServiceClient.Open(); PatcherServiceClient.Open(); } catch (Exception e) { #if DEBUG MessageWindow window = new MessageWindow(Resources.Message_Error, e.ToString()); #else MessageWindow window = new MessageWindow(Resources.Message_UnableToConnect, Resources.Message_UnableToConnectLong); #endif window.Closed += (o, args) => ((App) Application.Current).SaveShutdown(-1); window.ShowDialog(); } } public static void Save() { Settings.Default.Version = Version; Settings.Default.Save(); } private static void SetFolders() { BaseDataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "OMGPatcher"); TorrentFilesFolder = Path.Combine(BaseDataFolder, "Torrents"); DataFilesFolder = Path.Combine(BaseDataFolder, "Data"); } private static void EnsureFoldersExists() { if (!Directory.Exists(BaseDataFolder)) Directory.CreateDirectory(BaseDataFolder); if (!Directory.Exists(TorrentFilesFolder)) Directory.CreateDirectory(TorrentFilesFolder); if (!Directory.Exists(DataFilesFolder)) Directory.CreateDirectory(DataFilesFolder); } public static void LoadTorrents() { foreach (var file in Directory.GetFiles(TorrentFilesFolder)) { TorrentManager manager = new TorrentManager(Torrent.Load(file), DataFilesFolder, StandartTorrentSettings); MainWindowInstance.CurrentDownloadManager = manager; manager.PieceManager.BlockReceived += (s, args) => MainWindowInstance.SaveSetProgress(MainWindowInstance.CurrentDownloadManager.Progress); ClientEngine.Register(manager); } ClientEngine.StartAll(); } public static void GetMaxVersion() { MaxVersion = PatcherServiceClient.GetNewestVersion(); } public static MainWindow MainWindowInstance { get; set; } public static long MaxVersion { get; private set; } public static string BaseDataFolder { get; private set; } public static string TorrentFilesFolder { get; private set; } public static string DataFilesFolder { get; private set; } public static LauncherServiceClient LauncherServiceClient { get; private set; } public static PatcherServiceClient PatcherServiceClient { get; private set; } public static FileSecurityClient FSClient { get; private set; } public static ClientEngine ClientEngine { get; private set; } public static TorrentSettings StandartTorrentSettings { get; private set; } public static string Mac { get { var configs = NetworkInterface.GetAllNetworkInterfaces(); foreach (var inter in configs) { if (inter.OperationalStatus == OperationalStatus.Up) return inter.GetPhysicalAddress().ToString(); } return ""; } } public static long Version { get { return _v; } set { _v = value; }} public static long _v; public static long StartVersion { get; private set; } } }