Exemple #1
0
        public bool Run(ulong initialConnectLobbyID, TextWriter writer)
        {
            Status = "Connecting to steam API";
            using (var steam = new SteamClientHelper())
            {
                steam.ConnectToSteam();

                Status = "Starting";
                var chobyl       = new ChobbylaLocalListener(this, steam, initialConnectLobbyID);
                var loopbackPort = chobyl.StartListening();

                var ret = LaunchChobby(paths, internalName, engine, loopbackPort, writer).Result;
                return(ret);
            }
        }
        public bool Run(ulong initialConnectLobbyID, TextWriter writer)
        {
            Status = "Connecting to steam API";
            using (var steam = new SteamClientHelper())
            {
                steam.ConnectToSteam();

                Status = "Starting";
                var chobyl       = new ChobbylaLocalListener(this, steam, initialConnectLobbyID);
                var loopbackPort = chobyl.StartListening();

                var workshopItems = steam.GetWorkshopItems();
                paths.AddDataDirectories(workshopItems.OrderByDescending(x => x.ItemID).Select(x => x.Folder).ToList());

                var ret = LaunchChobby(paths, internalName, engine, loopbackPort, writer).Result;
                return(ret);
            }
        }
        public async Task<bool> Prepare()
        {
            try
            {
                PackageDownloader.Version ver = null;
                internalName = null;

                if (!isDev)
                {
                    if (!Debugger.IsAttached)
                    {
                        Status = "Checking for self-upgrade";
                        var selfUpdater = new SelfUpdater();
                        selfUpdater.ProgramUpdated += delegate
                        {
                            if (Environment.OSVersion.Platform == PlatformID.Unix)
                            {
                                Process.Start(Application.ExecutablePath);
                                Environment.Exit(0);
                            } else Application.Restart();
                        };
                        var task = new Task<bool>(() => selfUpdater.CheckForUpdate());
                        task.Start();
                        await task;
                    }
                    
                    if (!await DownloadFile("Checking for chobby update", DownloadType.RAPID, chobbyTag)) return false;
                    if (!await DownloadFile("Checking for game update", DownloadType.RAPID, "zk:stable")) return false;
                    
                    ver = downloader.PackageDownloader.GetByTag(chobbyTag);
                    if (ver == null)
                    {
                        Status = "Rapid package appears to be corrupted, please clear the folder";
                        return false;
                    }

                    internalName = ver.InternalName;
                }
                else internalName = "Chobby $VERSION";


                engine = engine ?? QueryDefaultEngine() ?? ExtractEngineFromLua(ver) ?? GlobalConst.DefaultEngineOverride;

                if (!await DownloadFile("Downloading engine", DownloadType.ENGINE, engine)) return false;

                if (!await UpdateMissions())
                {
                    Trace.TraceWarning("Mission update has failed");
                    Status = "Error updating missions";
                }


                if (!isDev)
                {
                    Status = "Reseting configs";
                    ConfigVersions.ResetConfigs(paths, ver);

                    Status = "Extracting default configs";
                    ExtractDefaultConfigs(paths, ver);
                }
                
                Status = "Starting";

                var chobyl = new ChobbylaLocalListener(this);
                loopbackPort = chobyl.StartListening();
                
                return true;
            }
            catch (Exception ex)
            {
                Trace.TraceError("Unexpected error: {0}", ex);
                Status = "Unexpected error preparing chobby launch: " + ex.Message;
                return false;
            }
        }