예제 #1
0
        private void DownloadNugetPackage(string moduleName)
        {
            var folderPath = string.Format("{0}\\{1}", ApplicationConfig.AppModulePath, moduleName.Replace("/", "_"));
            var filePath   = string.Format("{0}.zip", folderPath);

            try
            {
                if (!File.Exists(filePath))
                {
                    WebClient client      = new WebClientWithTimeout();
                    var       downloadUrl = string.Format("{0}{1}", "https://www.nuget.org/api/v2/package/", moduleName);
                    client.DownloadFile(downloadUrl, filePath);
                }
                ZipFile.ExtractToDirectory(filePath, folderPath);
            }
            catch (Exception ex)
            {
                try
                {
                    File.Delete(filePath);
                    Directory.Delete(folderPath, true);
                }
                catch (Exception e)
                {
                    _logger.Error(e.Message, e);
                }
                _logger.Error(string.Format("Error in downloading nuger package {0}, Error: {1}", moduleName, ex.Message), ex);
            }
        }
예제 #2
0
 private void DownloadRemoteProductStorage()
 {
     try
     {
         using (var webClient = new WebClientWithTimeout(WebRequestTimeout))
         {
             webClient.DownloadFile(storeRemoteProductRepo, storeLocalTempProductRepo);
         }
     }
     catch (Exception e)
     {
         LogProvider.Log.Error(this, "Remote storage of product app store has not been downloaded.", e);
     }
 }
예제 #3
0
        private static void ValidateUrl(string url, string title, string genre)
        {
            Console.WriteLine("Trying url: {0}", url);

            try
            {
                Uri    uri      = new Uri(url);
                string hostName = uri.DnsSafeHost;

                //if (!QueryDnsWithTimeout(hostName, 300))
                //{
                //    Console.WriteLine("\t   -> Url: {0} is not valid (DNS error)", url);
                //    return;
                //}

                List <String> urlsToCkeck = new List <string>();

                if (IsPlaylist(url))
                {
                    string fileName = Path.GetFileName(uri.LocalPath);
                    string tempFile = @"c:\temp.pls";

                    using (WebClientWithTimeout wc = new WebClientWithTimeout())
                    {
                        wc.Timeout = 500;
                        wc.Proxy   = AppSettings.GetWebProxy();
                        wc.DownloadFile(uri, tempFile);
                    }

                    if (File.Exists(tempFile))
                    {
                        Playlist p = new Playlist();
                        p.LoadPlaylist(tempFile);

                        File.Delete(tempFile);

                        foreach (PlaylistItem item in p.AllItems)
                        {
                            urlsToCkeck.Add(item.Path);
                        }
                    }
                }
                else
                {
                    urlsToCkeck.Add(url);
                }

                foreach (string url2 in urlsToCkeck)
                {
                    //if (!QueryDnsWithTimeout(url2, 300))
                    //  continue;

                    ShoutcastStream ss = new ShoutcastStream(url2, 500);
                    if (ss.Connected)
                    {
                        RadioStation rs = new RadioStation {
                            Genre = genre, Title = title, Url = url2
                        };
                        data.RadioStations.Add(rs);

                        Console.WriteLine("\t   -> Added radio station: {0}", url2);

                        ss.Close();
                        ss.Dispose();
                        ss = null;
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("\t   ->" + ex.Message);
            }

            Console.WriteLine("\t   -> Url: {0} is not valid", url);
        }
예제 #4
0
        private static void ValidateUrl(string url, string title, string genre)
        {
            Console.WriteLine("Trying url: {0}", url);

            try
            {
                Uri uri = new Uri(url);
                string hostName = uri.DnsSafeHost;

                //if (!QueryDnsWithTimeout(hostName, 300))
                //{
                //    Console.WriteLine("\t   -> Url: {0} is not valid (DNS error)", url);
                //    return;
                //}

                List<String> urlsToCkeck = new List<string>();

                if (IsPlaylist(url))
                {
                    string fileName = Path.GetFileName(uri.LocalPath);
                    string tempFile = @"c:\temp.pls";

                    using (WebClientWithTimeout wc = new WebClientWithTimeout())
                    {
                        wc.Timeout = 500;
                        wc.Proxy = AppSettings.GetWebProxy();
                        wc.DownloadFile(uri, tempFile);
                    }

                    if (File.Exists(tempFile))
                    {
                        Playlist p = new Playlist();
                        p.LoadPlaylist(tempFile);

                        File.Delete(tempFile);

                        foreach (PlaylistItem item in p.AllItems)
                        {
                            urlsToCkeck.Add(item.Path);
                        }
                    }
                }
                else
                {
                    urlsToCkeck.Add(url);
                }

                foreach(string url2 in urlsToCkeck)
                {
                    //if (!QueryDnsWithTimeout(url2, 300))
                      //  continue;

                    ShoutcastStream ss = new ShoutcastStream(url2, 500);
                    if (ss.Connected)
                    {
                        RadioStation rs = new RadioStation { Genre = genre, Title = title, Url = url2 };
                        data.RadioStations.Add(rs);

                        Console.WriteLine("\t   -> Added radio station: {0}", url2);

                        ss.Close();
                        ss.Dispose();
                        ss = null;
                    }
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine("\t   ->" + ex.Message);
            }

            Console.WriteLine("\t   -> Url: {0} is not valid", url);

        }
예제 #5
0
        public void DoModNetJob()
        {
            File.Delete("ModManager.dat");

            if (!Directory.Exists("modules"))
            {
                Directory.CreateDirectory("modules");
            }
            if (!Directory.Exists("scripts"))
            {
                Directory.CreateDirectory("scripts");
            }
            String[] GlobalFiles         = new string[] { "dinput8.dll", "global.ini" };
            String[] ModNetReloadedFiles = new string[] { "7z.dll", "PocoFoundation.dll", "PocoNet.dll", "ModLoader.asi" };
            String[] ModNetLegacyFiles   = new string[] { "modules/udpcrc.soapbox.module", "modules/udpcrypt1.soapbox.module", "modules/udpcrypt2.soapbox.module", "modules/xmppsubject.soapbox.module",
                                                          "scripts/global.ini", "lightfx.dll", "ModManager.asi", "global.ini" };

            String[] RemoveAllFiles = GlobalFiles.Concat(ModNetReloadedFiles).Concat(ModNetLegacyFiles).ToArray();

            foreach (string file in RemoveAllFiles)
            {
                if (File.Exists(file))
                {
                    try {
                        File.Delete(file);
                    } catch {
                        MessageBox.Show($"File {file} cannot be deleted.", "GameLauncher", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }

            actionText.Text = "Detecting ModNetSupport for " + serverText.SelectedItem.ToString();
            String jsonModNet = ModNetReloaded.ModNetSupported(serverText.SelectedValue.ToString());

            if (jsonModNet != String.Empty)
            {
                actionText.Text = "ModNetReloaded support detected, downloading required files...";

                string[] newFiles = GlobalFiles.Concat(ModNetReloadedFiles).ToArray();
                try {
                    try { if (File.Exists("lightfx.dll"))
                          {
                              File.Delete("lightfx.dll");
                          }
                    } catch { }

                    WebClientWithTimeout newModNetFilesDownload = new WebClientWithTimeout();
                    foreach (string file in newFiles)
                    {
                        actionText.Text = "Fetching ModNetReloaded Files: " + file;
                        Application.DoEvents();
                        newModNetFilesDownload.DownloadFile("https://cdn.soapboxrace.world/modules/" + file, file);
                    }

                    try {
                        newModNetFilesDownload.DownloadFile("https://launcher.worldunited.gg/legacy/global.ini", "global.ini");
                    }
                    catch { }

                    SimpleJSON.JSONNode MainJson = SimpleJSON.JSON.Parse(jsonModNet);

                    Uri    newIndexFile = new Uri(MainJson["basePath"] + "/index.json");
                    String jsonindex    = new WebClientWithTimeout().DownloadString(newIndexFile);

                    SimpleJSON.JSONNode IndexJson = SimpleJSON.JSON.Parse(jsonindex);

                    CountFilesTotal = IndexJson["entries"].Count;

                    String path = Path.Combine("MODS", MDFive.HashPassword(MainJson["serverID"]).ToLower());
                    if (!Directory.Exists(path))
                    {
                        Directory.CreateDirectory(path);
                    }

                    foreach (JSONNode modfile in IndexJson["entries"])
                    {
                        if (SHA.HashFile(path + "/" + modfile["Name"]).ToLower() != modfile["Checksum"])
                        {
                            WebClientWithTimeout client2 = new WebClientWithTimeout();
                            client2.DownloadFileAsync(new Uri(MainJson["basePath"] + "/" + modfile["Name"]), path + "/" + modfile["Name"]);

                            client2.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
                            client2.DownloadFileCompleted   += (test, stuff) => {
                                if (SHA.HashFile(path + "/" + modfile["Name"]).ToLower() == modfile["Checksum"])
                                {
                                    CountFiles++;

                                    if (CountFiles == CountFilesTotal)
                                    {
                                        launchGame();
                                    }
                                }
                                else
                                {
                                    File.Delete(path + "/" + modfile["Name"]);
                                    Console.WriteLine(modfile["Name"] + " must be removed.");
                                    DoModNetJob();
                                }
                            };
                        }
                        else
                        {
                            CountFiles++;

                            if (CountFiles == CountFilesTotal)
                            {
                                launchGame();
                            }
                        }
                    }
                } catch (Exception ex) {
                    MessageBox.Show(ex.Message);
                }
            }
            else
            {
                string[] newFiles = GlobalFiles.Concat(ModNetLegacyFiles).ToArray();

                WebClientWithTimeout newModNetFilesDownload = new WebClientWithTimeout();
                foreach (string file in newFiles)
                {
                    actionText.Text = "Fetching LegacyModnet Files: " + file;
                    Application.DoEvents();
                    newModNetFilesDownload.DownloadFile("http://launcher.worldunited.gg/legacy/" + file, file);
                }

                if (result["modsUrl"] != null)
                {
                    actionText.Text = "Electron support detected, checking mods...";

                    Uri    newIndexFile           = new Uri(result["modsUrl"] + "/index.json");
                    String jsonindex              = new WebClientWithTimeout().DownloadString(newIndexFile);
                    SimpleJSON.JSONNode IndexJson = SimpleJSON.JSON.Parse(jsonindex);

                    CountFilesTotal = IndexJson.Count;

                    String electronpath = (new Uri(serverText.SelectedValue.ToString()).Host).Replace(".", "-");
                    String path         = Path.Combine("MODS", electronpath);
                    if (!Directory.Exists(path))
                    {
                        Directory.CreateDirectory(path);
                    }

                    File.WriteAllText(path + ".json", jsonindex);

                    using (var fs = new FileStream("ModManager.dat", FileMode.Create))
                        using (var bw = new BinaryWriter(fs)) {
                            bw.Write(CountFilesTotal);

                            foreach (JSONNode file in IndexJson)
                            {
                                var originalPath = Path.Combine(file["file"]).Replace("/", "\\").ToUpper();
                                var modPath      = Path.Combine(path, file["file"]).Replace("/", "\\").ToUpper();

                                bw.Write(originalPath.Length);
                                bw.Write(originalPath.ToCharArray());
                                bw.Write(modPath.Length);
                                bw.Write(modPath.ToCharArray());
                            }
                        }

                    foreach (JSONNode modfile in IndexJson)
                    {
                        String directorycreate = Path.GetDirectoryName(path + "/" + modfile["file"]);
                        Directory.CreateDirectory(directorycreate);

                        if (ElectronModNet.calculateHash(path + "/" + modfile["file"]) != modfile["hash"])
                        {
                            WebClientWithTimeout client2 = new WebClientWithTimeout();
                            client2.DownloadFileAsync(new Uri(result["modsUrl"] + "/" + modfile["file"]), path + "/" + modfile["file"]);

                            client2.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
                            client2.DownloadFileCompleted   += (test, stuff) => {
                                if (ElectronModNet.calculateHash(path + "/" + modfile["file"]) == modfile["hash"])
                                {
                                    CountFiles++;

                                    if (CountFiles == CountFilesTotal)
                                    {
                                        launchGame();
                                    }
                                }
                                else
                                {
                                    File.Delete(path + "/" + modfile["file"]);
                                    Console.WriteLine(modfile["file"] + " must be removed.");
                                    DoModNetJob();
                                }
                            };
                        }
                        else
                        {
                            CountFiles++;

                            if (CountFiles == CountFilesTotal)
                            {
                                launchGame();
                            }
                        }
                    }
                }
                else if ((bool)result["rwacallow"] == true)
                {
                    actionText.Text = "RWAC support detected, checking mods...";

                    String rwacpath   = MDFive.HashPassword(new Uri(serverText.SelectedValue.ToString()).Host);
                    String path       = Path.Combine("MODS", rwacpath);
                    Uri    rwac_wev2  = new Uri(result["homePageUrl"] + "/rwac/fileschecker_sbrw.xml");
                    String getcontent = new WebClient().DownloadString(rwac_wev2);

                    XmlDocument xmlDoc = new XmlDocument();
                    xmlDoc.LoadXml(getcontent);
                    var nodes = xmlDoc.SelectNodes("rwac/files/file");

                    CountFilesTotal = nodes.Count;

                    //ModManager.dat
                    using (var fs = new FileStream("ModManager.dat", FileMode.Create))
                        using (var bw = new BinaryWriter(fs)) {
                            bw.Write(nodes.Count);

                            foreach (XmlNode files in nodes)
                            {
                                string realfilepath    = Path.Combine(files.Attributes["path"].Value, files.Attributes["name"].Value);
                                String directorycreate = Path.GetDirectoryName(path + "/" + realfilepath);

                                var originalPath = Path.Combine(realfilepath).Replace("/", "\\").ToUpper();
                                var modPath      = Path.Combine(path, realfilepath).Replace("/", "\\").ToUpper();

                                bw.Write(originalPath.Length);
                                bw.Write(originalPath.ToCharArray());
                                bw.Write(modPath.Length);
                                bw.Write(modPath.ToCharArray());

                                Directory.CreateDirectory(directorycreate);
                                if (files.Attributes["download"].Value != String.Empty)
                                {
                                    if (MDFive.HashFile(path + "/" + realfilepath).ToLower() != files.InnerText)
                                    {
                                        WebClientWithTimeout client2 = new WebClientWithTimeout();
                                        client2.DownloadFileAsync(new Uri(files.Attributes["download"].Value), path + "/" + realfilepath);

                                        client2.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
                                        client2.DownloadFileCompleted   += (test, stuff) => {
                                            if (MDFive.HashFile(path + "/" + realfilepath).ToLower() == files.InnerText)
                                            {
                                                CountFiles++;

                                                if (CountFiles == CountFilesTotal)
                                                {
                                                    launchGame();
                                                }
                                            }
                                            else
                                            {
                                                File.Delete(path + "/" + realfilepath);
                                                Console.WriteLine(realfilepath + " must be removed.");
                                                DoModNetJob();
                                            }
                                        };
                                    }
                                    else
                                    {
                                        CountFiles++;

                                        if (CountFiles == CountFilesTotal)
                                        {
                                            launchGame();
                                        }
                                    }
                                }
                                else
                                {
                                    CountFiles++;

                                    if (CountFiles == CountFilesTotal)
                                    {
                                        launchGame();
                                    }
                                }
                            }
                        }
                }
                else
                {
                    actionText.Text = "Deprecated modnet detected. Aborting...";
                    launchGame();
                }
            }
        }