Changeset 623 in Corrade


Ignore:
Timestamp:
Nov 27, 2017, 6:21:23 PM (3 months ago)
Author:
office
Message:
  • Release 9.171 - hotfix release for Windows 8.1 / Windows 10 addressing tickets #11 and #53
  • Corrade now properly sets the en-US culture in order to be compatible with SecondLife?.
  • The underlying library has been patched to conform to globalization rules and to eliminate redundant warning messages.
  • The path to the group chat log file is now automatically created by Corrade on startup.
  • Corrade now prevents the process from being suspended under platforms that support process suspension (Windows).
  • Saving state is no longer performed whilst cycling simulators but rather on state change.
Location:
Corrade
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • Corrade/Corrade.cs

    r622 r623  
    12611261                var bayesClassifierFile = Path.Combine(CORRADE_CONSTANTS.BAYES_DIRECTORY,
    12621262                    $"{group.UUID}.{CORRADE_CONSTANTS.BAYES_CLASSIFICATION_EXTENSION}");
     1263
    12631264                if (!File.Exists(bayesClassifierFile))
    12641265                    return;
     
    13901391        public static readonly Action SaveGroupSoftBansState = () =>
    13911392        {
    1392             GroupSoftBansWatcher.EnableRaisingEvents = false;
    13931393            try
    13941394            {
     1395                GroupSoftBansWatcher.EnableRaisingEvents = false;
     1396
    13951397                // Create the state directory if it does not exist.
    13961398                Directory.CreateDirectory(CORRADE_CONSTANTS.STATE_DIRECTORY);
     
    14131415                    }
    14141416                }
     1417                GroupSoftBansWatcher.EnableRaisingEvents = true;
    14151418            }
    14161419            catch (Exception e)
     
    14211424                    e.Message);
    14221425            }
    1423             GroupSoftBansWatcher.EnableRaisingEvents = true;
    14241426        };
    14251427
     
    14901492        private static readonly Action SaveGroupSchedulesState = () =>
    14911493        {
    1492             SchedulesWatcher.EnableRaisingEvents = false;
    14931494            try
    14941495            {
     1496                SchedulesWatcher.EnableRaisingEvents = false;
     1497
    14951498                // Create the state directory if it does not exist.
    14961499                Directory.CreateDirectory(CORRADE_CONSTANTS.STATE_DIRECTORY);
     
    15141517                    }
    15151518                }
     1519
     1520                SchedulesWatcher.EnableRaisingEvents = true;
    15161521            }
    15171522            catch (Exception e)
     
    15221527                    e.Message);
    15231528            }
    1524             SchedulesWatcher.EnableRaisingEvents = true;
    15251529        };
    15261530
     
    15861590        private static readonly Action SaveNotificationState = () =>
    15871591        {
    1588             NotificationsWatcher.EnableRaisingEvents = false;
    15891592            try
    15901593            {
     1594                NotificationsWatcher.EnableRaisingEvents = false;
     1595
    15911596                // Create the state directory if it does not exist.
    15921597                Directory.CreateDirectory(CORRADE_CONSTANTS.STATE_DIRECTORY);
     
    16081613                    }
    16091614                }
     1615                NotificationsWatcher.EnableRaisingEvents = true;
    16101616            }
    16111617            catch (Exception e)
     
    16161622                    e.Message);
    16171623            }
    1618             NotificationsWatcher.EnableRaisingEvents = true;
    16191624        };
    16201625
     
    20232028        private static readonly Action SaveGroupFeedState = () =>
    20242029        {
    2025             GroupFeedWatcher.EnableRaisingEvents = false;
    20262030            try
    20272031            {
     2032                GroupFeedWatcher.EnableRaisingEvents = false;
     2033
    20282034                // Create the state directory if it does not exist.
    20292035                Directory.CreateDirectory(CORRADE_CONSTANTS.STATE_DIRECTORY);
     
    20472053                    }
    20482054                }
     2055
     2056                GroupFeedWatcher.EnableRaisingEvents = true;
    20492057            }
    20502058            catch (Exception e)
     
    20552063                    e.Message);
    20562064            }
    2057             GroupFeedWatcher.EnableRaisingEvents = true;
    20582065        };
    20592066
     
    30023009            CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-US", false);
    30033010
     3011            // Prevent process suspension under Windows.
     3012            if (Utils.GetRunningPlatform().Equals(Utils.Platform.Windows))
     3013                NativeMethods.PreventCorradeSuspend();
     3014
    30043015            // Remove OpenMetaverse logging.
    30053016            Settings.LOG_LEVEL = OpenMetaverse.Helpers.LogLevel.None;
     
    30073018            // Set the current directory to the service directory.
    30083019            Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
     3020
    30093021            // Set location of debugging symbols.
    30103022            Environment.SetEnvironmentVariable(@"_NT_SYMBOL_PATH",
     
    30813093                            ConsoleEventHandler += ConsoleXButton;
    30823094                            NativeMethods.SetConsoleCtrlHandler(ConsoleEventHandler, true);
     3095                            NativeMethods.SetCorradeConsole();
    30833096                        }
    30843097                        Console.CancelKeyPress += ConsoleCancelKeyPress;
     
    31743187                        catch (Exception ex)
    31753188                        {
    3176                             Console.WriteLine("{0} {1}",
    3177                                 Reflection.GetDescriptionFromEnumValue(
    3178                                     Enumerations.ConsoleMessage.UNABLE_TO_LOAD_CORRADE_CONFIGURATION),
    3179                                 ex.PrettyPrint());
     3189                            if (Environment.UserInteractive)
     3190                            {
     3191                                Console.WriteLine("{0} {1}",
     3192                                    Reflection.GetDescriptionFromEnumValue(
     3193                                        Enumerations.ConsoleMessage.UNABLE_TO_LOAD_CORRADE_CONFIGURATION),
     3194                                    ex.PrettyPrint());
     3195                            }
    31803196                            return;
    31813197                        }
     
    31943210                        ConsoleEventHandler += ConsoleCtrlCheck;
    31953211                        NativeMethods.SetConsoleCtrlHandler(ConsoleEventHandler, true);
     3212                        NativeMethods.SetCorradeConsole();
    31963213                    }
    31973214                    break;
     
    36633680                    }
    36643681
    3665                 //Client = null;
    3666                 //GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, true);
    3667                 //GC.WaitForPendingFinalizers();
    3668 
    36693682                // Update the configuration.
    36703683                UpdateDynamicConfiguration(corradeConfiguration, firstRun);
     
    37823795                TCPNotificationsThreadState.Reset();
    37833796
    3784                 // Save group soft bans state.
    3785                 SaveGroupSoftBansState.Invoke();
    3786                 // Save conferences state.
    3787                 SaveConferenceState.Invoke();
    3788                 // Save feeds state.
    3789                 SaveGroupFeedState.Invoke();
    3790                 // Save notification states.
    3791                 SaveNotificationState.Invoke();
    3792                 // Save group members.
    3793                 SaveGroupMembersState.Invoke();
    3794                 // Save group schedules.
    3795                 SaveGroupSchedulesState.Invoke();
    3796                 // Save movement state.
    3797                 SaveMovementState.Invoke();
    3798                 // Save Corrade caches.
    3799                 SaveCorradeCache.Invoke();
    3800                 // Save Bayes classifications.
    3801                 SaveGroupBayesClassificiations.Invoke();
    3802                 // Save group cookies.
    3803                 SaveGroupCookiesState.Invoke();
    3804 
    38053797                // Perform the logout now.
    38063798                Locks.ClientInstanceNetworkLock.EnterWriteLock();
     
    38323824                        Settings.AGNI_LOGIN_SERVER, StringComparison.InvariantCultureIgnoreCase) &&
    38333825                    corradeConfiguration.AutoScriptedAgentStatus)
     3826                {
    38343827                    try
    38353828                    {
     
    38533846                            ex.PrettyPrint());
    38543847                    }
     3848                }
     3849               
    38553850            } while (!ConnectionSemaphores['u'].WaitOne(0));
    38563851
     
    84588453        }
    84598454
     8455        // Console quick edit mode.
     8456        const uint ENABLE_QUICK_EDIT = 0x0040;
     8457
     8458        // STD_INPUT_HANDLE (DWORD): -10 is the standard input device.
     8459        const int STD_INPUT_HANDLE = -10;
     8460
     8461        [DllImport("kernel32.dll", SetLastError = true)]
     8462        static extern IntPtr GetStdHandle(int nStdHandle);
     8463
     8464        [DllImport("kernel32.dll")]
     8465        static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode);
     8466
     8467        [DllImport("kernel32.dll")]
     8468        static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode);
     8469        public static bool SetCorradeConsole()
     8470        {
     8471            IntPtr consoleHandle = GetStdHandle(STD_INPUT_HANDLE);
     8472
     8473            // get current console mode
     8474            uint consoleMode;
     8475            if (!GetConsoleMode(consoleHandle, out consoleMode))
     8476            {
     8477                // ERROR: Unable to get console mode.
     8478                return false;
     8479            }
     8480
     8481            // Clear the quick edit bit in the mode flags
     8482            consoleMode &= ~ENABLE_QUICK_EDIT;
     8483
     8484            // set the new mode
     8485            if (!SetConsoleMode(consoleHandle, consoleMode))
     8486            {
     8487                // ERROR: Unable to set console mode
     8488                return false;
     8489            }
     8490
     8491            return true;
     8492        }
     8493
     8494        // Import SetThreadExecutionState Win32 API and necessary flags
     8495        [DllImport("kernel32.dll")]
     8496        public static extern uint SetThreadExecutionState(uint esFlags);
     8497        const uint ES_CONTINUOUS = 0x80000000;
     8498        const uint ES_SYSTEM_REQUIRED = 0x00000001;
     8499        const uint ES_AWAYMODE_REQUIRED = 0x00000040;
     8500
     8501        public static bool PreventCorradeSuspend()
     8502        {
     8503            var result = SetThreadExecutionState(
     8504                ES_CONTINUOUS |
     8505                ES_SYSTEM_REQUIRED |
     8506                ES_AWAYMODE_REQUIRED);
     8507
     8508            return !result.Equals(0);
     8509        }
     8510
    84608511        /// <summary>
    84618512        ///     Import console handler for windows.
  • Corrade/Properties/AssemblyInfo.cs

    r618 r623  
    4141//
    4242
    43 [assembly: AssemblyVersion("9.170.*")]
     43[assembly: AssemblyVersion("9.171.*")]
    4444[assembly: AssemblyMetadata("configuration", "1.34")]
Note: See TracChangeset for help on using the changeset viewer.