Ejemplo n.º 1
0
        public void RunCore()
        {
            Logging.Log.Instance.DiscordLibraryLevel.Level = System.Diagnostics.SourceLevels.Warning;
            Console.Write("Discord Authentication Token > ");
            string DiscordAuthorizationToken = Console.ReadLine();
            string ImgurAuthenticationSecret = "Q", OAuthAccessToken = "Q", OAuthRefreshToken = "Q";

            Console.Write("Imgur Authentication ID > ");
            string ImgurAuthenticationID = Console.ReadLine();

            Console.Write("Imgur Authentication Secret > ");
            ImgurAuthenticationSecret = Console.ReadLine();
            Console.Write("Imgur OAuth Access Token > ");
            OAuthAccessToken = Console.ReadLine();

            /*
             * Console.Write("Imgur OAuth Refresh Token > ");
             * OAuthRefreshToken=Console.ReadLine();
             */
            SingleThreadReadWriteLock ShutdownLock = new SingleThreadReadWriteLock();

            Discord.DiscordInterfacerMain         _Discord;
            Imgur.ImgurInterfacer                 _Imgur;
            Application.CacheingTaglistRepository RepositoryTaglists;
            Program Core = new Program(
                new ProcessLatestCommentsActivity(
                    _Imgur = new Imgur.ImgurInterfacerMain(
                        new DataAccess.SettingsRepositoryMain(@"DataAccess\Settings1.xml"),
                        ImgurAuthenticationID, ImgurAuthenticationSecret,
                        "wereleven", 77530931,
                        OAuthAccessToken, OAuthRefreshToken, "bearer",
                        DateTimeOffset.UtcNow + TimeSpan.FromDays(11),
                        TimeSpan.FromSeconds(11), 0.1F, 140, "#",
                        ShutdownLock
                        ),
                    new DataAccess.SettingsRepositoryMain(@"DataAccess\Settings1.xml"),
                    RepositoryTaglists = new CacheingTaglistRepository(new DataAccess.TaglistRepositoryMain(@"DataAccess\Taglists.xml")),
                    new ProcessCommentActivity(
                        new Imgur.ImgurCommandParser("@Tagaroo2", _Imgur),
                        new ProcessTagCommandActivity(
                            _Imgur,
                            _Discord = new Discord.DiscordInterfacerMain(
                                DiscordAuthorizationToken,
                                388542416225042435UL, 388542416225042439UL,
                                388542416225042439UL, "/",
                                2000
                                ),
                            RepositoryTaglists
                            )
                        )
                    ),
                _Imgur,
                _Discord,
                new DataAccess.TaglistRepositoryMain(@"DataAccess\Taglists.xml"),
                new DataAccess.SettingsRepositoryMain(@"DataAccess\Settings1.xml"),
                ShutdownLock
                );

            Core.Run();
        }
Ejemplo n.º 2
0
        /// <returns>
        /// Non-zero <see cref="Return_ConfigurationLoadError"/> if there is a problem reading Configuration data from Settings.xml;
        /// non-zero <see cref="Return_ApplicationStartError"/> if there is some other problem during startup,
        /// 0 otherwise
        /// </returns>
        public static int _Main(string SettingsFilePath = null)
        {
            CrashHandler ProcessCrashHandler = new CrashHandler(AppDomain.CurrentDomain, Console.Error);

            //Log to STDOUT by default
            Log.Instance.AddTraceListener(new TextWriterTraceListener(Console.Out, "StdOutListener"), true);
            //Log all messages sent to the Bootstrap logger until the application's Configuration can be read and applied (other loggers are not used until after the Configuration is applied)
            Log.Instance.BootstrapLevel.Level = SourceLevels.Verbose;
            Log.Bootstrap_.LogInfo("Tagaroo {0}; application starting", typeof(EntryPoint).Assembly.GetName().Version.ToString(3));
            //Robustness — Use locale-invariant comparison/formatting/e.t.c. rules by default, to mitigate aginst bugs caused by varying host system locales
            CultureInfo.CurrentCulture = CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;
            SettingsRepository RepositorySettings = new SettingsRepositoryMain(
                SettingsFilePath ?? DefaultSettingsFilePath
                );

            Log.Bootstrap_.LogVerbose("Initializing Settings repository");
            RepositorySettings.Initialize();
            Log.Bootstrap_.LogInfo("Loading Configuration");
            ApplicationConfiguration Configuration;

            try{
                Configuration = RepositorySettings.LoadConfiguration().GetAwaiter().GetResult();
            }catch (DataAccessException Error) {
                Log.Bootstrap_.LogError("Unable to start; could not load application configuration: " + Error.Message);
                return(Return_ConfigurationLoadError);
            }
            Log.Bootstrap_.LogInfo("Applying Configuration");
            Log.Bootstrap_.LogVerbose("Applying Configuration: Logging");
            Log.Instance.BootstrapLevel.Level      = Configuration.LogLevelBootstrap;
            Log.Instance.ApplicationLevel.Level    = Configuration.LogLevelApplication;
            Log.Instance.ImgurLevel.Level          = Configuration.LogLevelImgur;
            Log.Instance.DiscordLevel.Level        = Configuration.LogLevelDiscord;
            Log.Instance.DiscordLibraryLevel.Level = Configuration.LogLevelDiscordLibrary;
            Log.Instance.ImgurBandwidthLevel.Level = Configuration.LogLevelImgurBandwidth;
            Log.Bootstrap_.LogVerbose("Applying Configuration: Constructing Application");
            SingleThreadReadWriteLock ApplicationShutdownLock = new SingleThreadReadWriteLock();
            TaglistRepository         RepositoryTaglists      = new TaglistRepositoryMain(
                Configuration.TaglistDataFilePath
                );
            CacheingTaglistRepository RepositoryTaglistsCacheing = new CacheingTaglistRepository(RepositoryTaglists);
            ImgurInterfacer           Imgur = new ImgurInterfacerMain(
                RepositorySettings,
                Configuration.ImgurClientID,
                Configuration.ImgurClientSecret,
                Configuration.ImgurUserAccountUsername,
                Configuration.ImgurUserAccountID,
                Configuration.ImgurOAuthAccessToken,
                Configuration.ImgurOAuthRefreshToken,
                Configuration.ImgurOAuthTokenType,
                Configuration.ImgurOAuthTokenExpiry,
                Configuration.ImgurPostCommentDelay,
                Configuration.ImgurAPIBandwidthWarningThreshhold,
                Configuration.ImgurMaximumCommentLengthUTF16CodeUnits,
                Configuration.ImgurMentionPrefix,
                ApplicationShutdownLock
                );
            DiscordInterfacer Discord = new DiscordInterfacerMain(
                Configuration.DiscordAuthenticationToken,
                Configuration.DiscordGuildID,
                Configuration.DiscordChannelIDLog,
                Configuration.DiscordChannelIDCommands,
                Configuration.DiscordCommandPrefix,
                Configuration.DiscordMaximumMessageLengthUTF16CodeUnits
                );
            Program Application = new Program(
                new ProcessLatestCommentsActivity(
                    Imgur, RepositorySettings, RepositoryTaglistsCacheing,
                    new ProcessCommentActivity(
                        new ImgurCommandParser(Configuration.ImgurCommandPrefix, Imgur),
                        new ProcessTagCommandActivity(
                            Imgur, Discord, RepositoryTaglistsCacheing
                            )
                        )
                    ),
                Imgur, Discord, RepositoryTaglists, RepositorySettings,
                ApplicationShutdownLock
                );

            //Create Discord logging output if configured to do so
            Log.Bootstrap_.LogVerbose("Applying Configuration: Logging output");
            if (Configuration.LogToDiscord)
            {
                Log.Instance.AddTraceListener(
                    new DiscordTraceListener("DiscordListener", Discord, new TextWriterTraceListener(Console.Out)),
                    false
                    );
                Log.Instance.RemoveTraceListener("StdOutListener");
                Log.Instance.DiscordLibrary.AddListener(new TextWriterTraceListener(Console.Out, "StdOutListener"));
            }
            Log.Bootstrap_.LogInfo("Configuration applied; starting application");
            //Execution will be within this method while the application is running
            bool startupsuccess = Application.Run();

            Log.Bootstrap_.LogInfo("Application ended");
            if (!startupsuccess)
            {
                return(Return_ApplicationStartError);
            }
            return(0);
        }