Beispiel #1
0
        public static UpdaterResult CheckForUpdates() {
            UpdaterMode mode = ConfigKey.UpdaterMode.GetEnum<UpdaterMode>();
            if( mode == UpdaterMode.Disabled ) return UpdaterResult.NoUpdate;

            string url = String.Format( UpdateUrl, CurrentRelease.Revision );
            if( RaiseCheckingForUpdatesEvent( ref url ) ) return UpdaterResult.NoUpdate;

            Logger.Log( LogType.SystemActivity, "Checking for fCraft updates..." );
            try {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create( url );

                request.Method = "GET";
                request.UserAgent = "fCraft";
                request.Timeout = UpdateCheckTimeout;
                request.ReadWriteTimeout = UpdateCheckTimeout;
                request.CachePolicy = new HttpRequestCachePolicy( HttpRequestCacheLevel.BypassCache );
                request.UserAgent = UserAgent;

                using( WebResponse response = request.GetResponse() ) {
                    // ReSharper disable AssignNullToNotNullAttribute
                    // ReSharper disable PossibleNullReferenceException
                    using( XmlTextReader reader = new XmlTextReader( response.GetResponseStream() ) ) {
                        // ReSharper restore AssignNullToNotNullAttribute
                        XDocument doc = XDocument.Load( reader );
                        XElement root = doc.Root;
                        if( root.Attribute( "result" ).Value == "update" ) {
                            string downloadUrl = root.Attribute( "url" ).Value;
                            var releases = new List<ReleaseInfo>();
                            // ReSharper disable LoopCanBeConvertedToQuery
                            foreach( XElement el in root.Elements( "Release" ) ) {
                                releases.Add(
                                    new ReleaseInfo(
                                        Int32.Parse( el.Attribute( "v" ).Value ),
                                        Int32.Parse( el.Attribute( "r" ).Value ),
                                        Int64.Parse( el.Attribute( "date" ).Value ).ToDateTime(),
                                        el.Element( "Summary" ).Value,
                                        el.Element( "ChangeLog" ).Value,
                                        ReleaseInfo.StringToReleaseFlags( el.Attribute( "flags" ).Value )
                                    )
                                );
                            }
                            // ReSharper restore LoopCanBeConvertedToQuery
                            // ReSharper restore PossibleNullReferenceException
                            UpdaterResult result = new UpdaterResult( (releases.Count > 0), new Uri( downloadUrl ),
                                                                      releases.ToArray() );
                            RaiseCheckedForUpdatesEvent( UpdateUrl, result );
                            return result;
                        } else {
                            return UpdaterResult.NoUpdate;
                        }
                    }
                }
            } catch( Exception ex ) {
                Logger.Log( LogType.Error,
                            "An error occured while trying to check for updates: {0}: {1}",
                            ex.GetType(), ex.Message );
                return UpdaterResult.NoUpdate;
            }
        }
Beispiel #2
0
        private void SetStartMode(UpdaterMode mode)
        {
            this.mode = mode;

            if (mode == UpdaterMode.Instalation)
            {
                InstalationMode();
            }
            else if (mode == UpdaterMode.Update)
            {
                UpdateMode();
            }
        }
Beispiel #3
0
        static void CheckForUpdates()
        {
            UpdaterMode updaterMode = ConfigKey.UpdaterMode.GetEnum <UpdaterMode>();

            if (updaterMode == UpdaterMode.Disabled)
            {
                return;
            }

            UpdaterResult update = Updater.CheckForUpdates();

            if (!update.UpdateAvailable)
            {
                return;
            }

            Console.WriteLine("** A new version of fCraft is available: {0}, released {1:0} day(s) ago. **",
                              update.LatestRelease.VersionString,
                              update.LatestRelease.Age.TotalDays);
            if (updaterMode != UpdaterMode.Notify)
            {
                WebClient client = new WebClient();
                client.DownloadProgressChanged += OnUpdateDownloadProgress;
                client.DownloadFileCompleted   += OnUpdateDownloadCompleted;
                client.DownloadFileAsync(update.DownloadUri, Paths.UpdaterFileName);
                UpdateDownloadWaiter.WaitOne();
                if (updateFailed)
                {
                    return;
                }

                if (updaterMode == UpdaterMode.Prompt)
                {
                    Console.WriteLine("Restart the server and update now? y/n");
                    var key = Console.ReadKey();
                    if (key.KeyChar == 'y')
                    {
                        RestartForUpdate();
                    }
                    else
                    {
                        Console.WriteLine("You can update manually by shutting down the server and running " +
                                          Paths.UpdaterFileName);
                    }
                }
                else
                {
                    RestartForUpdate();
                }
            }
        }
Beispiel #4
0
 public UpdaterSettingsPopup() {
     InitializeComponent();
     Shown += delegate {
         oldRunBeforeUpdate = RunBeforeUpdate;
         oldRunAfterUpdate = RunAfterUpdate;
         oldUpdaterMode = UpdaterMode;
         oldBackupBeforeUpdate = BackupBeforeUpdate;
     };
     FormClosed += delegate {
         if( DialogResult != DialogResult.OK ) {
             RunBeforeUpdate = oldRunBeforeUpdate;
             RunAfterUpdate = oldRunAfterUpdate;
             UpdaterMode = oldUpdaterMode;
             BackupBeforeUpdate = oldBackupBeforeUpdate;
         }
     };
 }
 public UpdaterSettingsPopup()
 {
     InitializeComponent();
     Shown += delegate {
         oldRunBeforeUpdate    = RunBeforeUpdate;
         oldRunAfterUpdate     = RunAfterUpdate;
         oldUpdaterMode        = UpdaterMode;
         oldBackupBeforeUpdate = BackupBeforeUpdate;
     };
     FormClosed += delegate {
         if (DialogResult != DialogResult.OK)
         {
             RunBeforeUpdate    = oldRunBeforeUpdate;
             RunAfterUpdate     = oldRunAfterUpdate;
             UpdaterMode        = oldUpdaterMode;
             BackupBeforeUpdate = oldBackupBeforeUpdate;
         }
     };
 }
Beispiel #6
0
 // Considering the desired mode : CPU MT/ST or GPU
 // Set the delegates to execute the right function
 // During each frame update
 void SetDelegates()
 {
     if (appMode == 2)
     {
         updaterMode = new UpdaterMode(GPU);
         updater     = new Updater(Update_GPU);
     }
     else
     {
         updater = new Updater(Update_CPU);
         if (appMode == 1)
         {
             updaterMode = new UpdaterMode(MT);
         }
         else
         {
             updaterMode = new UpdaterMode(ST);
         }
     }
 }
Beispiel #7
0
        void StartupThread()
        {
#if !DEBUG
            try {
#endif
            Server.InitLibrary(Environment.GetCommandLineArgs());
            if (shutdownPending)
            {
                return;
            }

            Server.InitServer();
            if (shutdownPending)
            {
                return;
            }

            BeginInvoke((Action)OnInitSuccess);

            // check for updates
            UpdaterMode updaterMode = ConfigKey.UpdaterMode.GetEnum <UpdaterMode>();
            if (updaterMode != UpdaterMode.Disabled)
            {
                UpdaterResult update = Updater.CheckForUpdates();
                if (shutdownPending)
                {
                    return;
                }
                if (update.UpdateAvailable)
                {
                    if (updaterMode == UpdaterMode.Notify)
                    {
                        String updateMsg = String.Format("An fCraft update is available! Visit www.fCraft.net to download. " +
                                                         "Local version: {0}. Latest available version: {1}.",
                                                         Updater.CurrentRelease.VersionString,
                                                         update.LatestRelease.VersionString);
                        Logger.LogToConsole(updateMsg);
                    }
                    else
                    {
                        DialogResult result = new UpdateWindow(update).ShowDialog();
                        if (result == DialogResult.Cancel)
                        {
                            // startup aborted (restart for update)
                            return;
                        }
                    }
                }
            }

            // set process priority
            if (!ConfigKey.ProcessPriority.IsBlank())
            {
                try {
                    Process.GetCurrentProcess().PriorityClass = ConfigKey.ProcessPriority.GetEnum <ProcessPriorityClass>();
                } catch (Exception) {
                    Logger.Log(LogType.Warning,
                               "MainForm.StartServer: Could not set process priority, using defaults.");
                }
            }

            if (shutdownPending)
            {
                return;
            }
            if (Server.StartServer())
            {
                startupComplete = true;
                BeginInvoke((Action)OnStartupSuccess);
            }
            else
            {
                BeginInvoke((Action)OnStartupFailure);
            }
#if !DEBUG
        }

        catch (Exception ex) {
            Logger.LogAndReportCrash("Unhandled exception in ServerGUI.StartUp", "ServerGUI", ex, true);
            Shutdown(ShutdownReason.Crashed);
        }
#endif
        }
Beispiel #8
0
        static void Main(string[] args)
        {
            Logger.Logged        += OnLogged;
            Heartbeat.UriChanged += OnHeartbeatUrlChanged;

#if !DEBUG
            try {
#endif
            Server.InitLibrary(args);

            Server.InitServer();

            UpdaterMode updaterMode = ConfigKey.UpdaterMode.GetEnum <UpdaterMode>();
            if (updaterMode != UpdaterMode.Disabled)
            {
                UpdaterResult update = Updater.CheckForUpdates();
                if (update.UpdateAvailable)
                {
                    Console.WriteLine("** A new version of fCraft is available: {0}, released {1:0} day(s) ago. **",
                                      update.LatestRelease.VersionString,
                                      update.LatestRelease.Age.TotalDays);
                }
            }

            if (!ConfigKey.ProcessPriority.IsBlank())
            {
                try {
                    Process.GetCurrentProcess().PriorityClass = ConfigKey.ProcessPriority.GetEnum <ProcessPriorityClass>();
                } catch (Exception) {
                    Logger.Log("Program.Main: Could not set process priority, using defaults.", LogType.Warning);
                }
            }

            if (Server.StartServer())
            {
                Console.Title = "fCraft " + Updater.CurrentRelease.VersionString + " - " + ConfigKey.ServerName.GetString();
                Console.WriteLine("** Running fCraft version {0}. **", Updater.CurrentRelease.VersionString);
                Console.WriteLine("** Server is now ready. Type /shutdown to exit safely. **");

                while (!Server.IsShuttingDown)
                {
                    string cmd = Console.ReadLine();
                    if (cmd.Equals("/clear", StringComparison.OrdinalIgnoreCase))
                    {
                        Console.Clear();
                    }
                    else
                    {
                        try {
                            Player.Console.ParseMessage(cmd, true);
                        } catch (Exception ex) {
                            Logger.LogAndReportCrash("Error while executing a command from console", "fCraftConsole", ex, false);
                        }
                    }
                }
            }
            else
            {
                ReportFailure(ShutdownReason.FailedToStart);
            }
#if !DEBUG
        }

        catch (Exception ex) {
            ReportFailure(ShutdownReason.Crashed);
            Logger.LogAndReportCrash("Unhandled exception in fCraftConsole", "fCraftConsole", ex, true);
        } finally {
            Console.ResetColor();
        }
#endif
        }