Пример #1
0
        /// <summary>
        /// When implemented in a derived class, <see cref="M:System.ServiceProcess.ServiceBase.OnCustomCommand(System.Int32)"></see> executes when the Service Control Manager (SCM) passes a custom command to the service. Specifies actions to take when a command with the specified parameter value occurs.
        /// </summary>
        /// <param name="command">
        ///     The command message sent to the service :
        ///         1) Rehash des préférences et redémarrage de la surveillance.
        ///         2) Réinitialisation de la connexion databaseUpdate
        ///         3) 1 + 2
        /// </param>
        protected override void OnCustomCommand(int command)
        {
            switch (command)
            {
            case 3:
                //1 + 2
                options = MainOptions.Load();
                goto case 2;
            //Tiens, ça faisait bien une bonne dizaine
            //d'années que je n'avais plus goto :p ^^

            case 2:
                //Réinitialisation de la connexion databaseUpdate
                databaseUpdate.Dispose();
                databaseUpdate = new DatabaseUpdate(options.ConnectionString);
                StopSurveillance();
                StartSurveillance();
                break;

            case 1:
                //Rehash des préférences et redémarrage de la surveillance.
                options = MainOptions.Load();
                StopSurveillance();
                StartSurveillance();
                break;

            default:
                throw new ArgumentException("Commande inconnue : " + command.ToString());
            }
        }
Пример #2
0
        /// <summary>
        /// Initializes the components needed by the application.
        /// </summary>
        /// <returns>if true, we can launch application</returns>
        private static bool Start()
        {
            //Lecture des préférences
            try {
                options = MainOptions.Load();
            } catch (Exception e) {
                //90% of chance to get a InvalidOperationException containing the XML related exception in InnerException property
                if (e.InnerException != null)
                {
                    e = e.InnerException;
                }
                //
                DialogResult result = MessageBox.Show(
                    String.Format(
                        "Fichier de préférence : {0}\n\nErreur : {1}\n\nSi vous venez de modifier manuellement votre fichier, cliquez sur NON, repérez votre erreur et corrigez-la avant de relancer Sycorax.\n\nSouhaitez-vous EFFACER ce fichier et le REMPLACER PAR UNE VERSION PAR DEFAUT ?\n\nSi vous cliquez sur OUI, l'ancien fichier de préférence sera détruit, le nouveau fichier de préférences contiendra les options par défaut.\nAttention, cette opération est irréversible et toutes vos préférences (par exemple, la liste de vos dossiers) seront perdues.\n\nSi vous cliquez sur NON, il vous sera alors loisible d'éditer manuellement le fichier de préférence pour corriger l'erreur. Notre support technique se fera un plaisir de vous y aider, le cas échéant.\n\nSi vous n'arrivez pas à prendre une décision, nous vous recommandons de cliquer sur NON et de déplacer votre fichier sur le bureau avant de relancer Sycorax.\nVous pourrez ainsi par la suite effectuer toutes les modifications nécessaires, par exemple recopier votre liste de dossiers depuis l'ancien fichier vers le nouveau.",
                        MainOptions.DefaultOptionsFile, e.Message
                        ),
                    "[IMPORTANT] Votre fichier de préférence est corrompu.",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button2
                    );
                if (result == DialogResult.Yes)
                {
                    options = MainOptions.CreateNewOptionsFile(MainOptions.DefaultOptionsFile);
                }
                else
                {
                    return(false);
                }
            }

            return(true);
        }
Пример #3
0
 /// <summary>
 /// Start this service.
 /// </summary>
 protected override void OnStart(string[] args)
 {
     //Lecture des préférences
     options = MainOptions.Load();
     //Initialisation de la base de données et de sa classe de mise à jour
     databaseUpdate = new DatabaseUpdate(options.ConnectionString);
     //Lancement de la surveillance des dossiers
     StartSurveillance();
 }
Пример #4
0
        /// <summary>
        /// Thread principal
        /// </summary>
        static public void Do()
        {
            try {
                //Lecture des préférences
                Console.WriteLine("[*] Loading options ...");
                options = MainOptions.Load();

                //Initialisation de la base de données et de sa classe de mise à jour
                Console.WriteLine("[*] Initializing database connection and update facilities ...");
                databaseUpdate = new DatabaseUpdate(options.ConnectionString);

                //Lancement d'une surveillance pour chaque dossier repris dans l'option FoldersToWatch
                Console.WriteLine("[*] Initializing folders watch ...");

                //Let's check if we've folders to watch
                //  CLI is very useful to test if DatabaseUpdate initialization is OK,
                //  it's why we don't test options.FoldersToWatch.Length before !
                if (options.FoldersToWatch.Length == 0)
                {
                    //Nothing to do
                    Console.WriteLine("    ( no folder to watch, exiting )");
                    databaseUpdate.Dispose();
                    return;
                }
                watchers = new SurveillanceDossiers[options.FoldersToWatch.Length];
                for (int i = 0; i < options.FoldersToWatch.Length; i++)
                {
                    watchers[i]        = new SurveillanceDossiers(options.FoldersToWatch[i], databaseUpdate, options.DeleteTunesIfOrphan, options.IndexSubdirectories);
                    watchers[i].Error += new EventHandler <ExceptionEventArgs>(Program_Error);
                    Console.WriteLine("    ° " + options.FoldersToWatch[i]);
                }

                Console.WriteLine("______________________________________________________________________");
                Console.WriteLine();

                //Oki, manage events
                databaseUpdate.LogEntry += new EventHandler <TimestampMessageEventArgs>(databaseUpdate_LogEntry);
            } catch (Exception e) {
                //Options XML deserialize InnerException
                if (e.InnerException != null)
                {
                    e = e.InnerException;
                }
                Console.WriteLine(e.Message);
                if (options != null && options.DebugMode)
                {
                    Console.WriteLine(e.StackTrace);
                }
            }
        }