public BotController(ILogger logger, IPPather pather, DataConfig dataConfig, IConfiguration configuration)
        {
            this.logger     = logger;
            this.pather     = pather;
            this.DataConfig = dataConfig;
            this.areaDb     = new AreaDB(logger, dataConfig);

            updatePlayerPostion.Start();
            wowProcess      = new WowProcess();
            WowScreen       = new WowScreen(logger, wowProcess);
            WowProcessInput = new WowProcessInput(logger, wowProcess);

            var frames = DataFrameConfiguration.LoadFrames();

            var scad = new StartupConfigAddonData();

            configuration.GetSection(StartupConfigAddonData.Position).Bind(scad);
            if (scad.Mode == "Network")
            {
                logger.LogInformation("Using NetworkedAddonDataProvider");
                addonDataProvider = new NetworkedAddonDataProvider(logger, scad.myPort, scad.connectTo, scad.connectPort);
            }
            else
            {
                logger.LogInformation("Using AddonDataProvider");
                addonDataProvider = new AddonDataProvider(WowScreen, frames);
            }

            AddonReader = new AddonReader(logger, DataConfig, areaDb, addonDataProvider);

            minimapNodeFinder  = new MinimapNodeFinder(WowScreen, new PixelClassifier());
            MinimapImageFinder = minimapNodeFinder as IImageProvider;

            addonThread = new Thread(AddonRefreshThread);
            addonThread.Start();

            // wait for addon to read the wow state
            var sw = new Stopwatch();

            sw.Start();
            while (AddonReader.PlayerReader.Sequence == 0 || !Enum.GetValues(typeof(PlayerClassEnum)).Cast <PlayerClassEnum>().Contains(AddonReader.PlayerReader.PlayerClass))
            {
                if (sw.ElapsedMilliseconds > 5000)
                {
                    logger.LogWarning("There is a problem with the addon, I have been unable to read the player class. Is it running ?");
                    sw.Restart();
                }
                Thread.Sleep(100);
            }

            logger.LogDebug($"Woohoo, I have read the player class. You are a {AddonReader.PlayerReader.PlayerClass}.");

            npcNameFinder = new NpcNameFinder(logger, WowScreen, WowProcessInput);
            WowScreen.AddDrawAction(npcNameFinder.ShowNames);

            //ActionFactory = new GoalFactory(AddonReader, logger, wowProcess, npcNameFinder);

            screenshotThread = new Thread(ScreenshotRefreshThread);
            screenshotThread.Start();
        }
Exemple #2
0
        static void Main(string[] args)
        {
            int port = 9050;

            Parser.Default.ParseArguments <Options>(args)
            .WithParsed(o =>
            {
                if (o.Port != 0)
                {
                    port = o.Port;
                }
            });

            CreateLogger();
            WaitForProcess();

            var wowProcess = new WowProcess();
            var wowScreen  = new WowScreen(logger, wowProcess);

            if (!DataFrameConfiguration.Exists())
            {
                Log.Logger.Error("DataFrameConfiguration not exists");
                CreateConfig(wowScreen);
            }
            else
            {
                var           frames   = DataFrameConfiguration.LoadFrames();
                IDataProvider provider = new DataProvider(logger, wowScreen, frames);
                Server        server   = new Server(logger, port, provider);
                server.ListenServer();
            }
        }
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public static void ConfigureServices(IServiceCollection services)
        {
            var logger = new SerilogLoggerProvider(Log.Logger).CreateLogger(nameof(Program));

            services.AddSingleton <Microsoft.Extensions.Logging.ILogger>(logger);

            if (DataFrameConfiguration.ConfigurationExists())
            {
                var pather        = GetPather(logger);
                var botController = new BotController(logger, pather);
                services.AddSingleton <IBotController>(botController);
                services.AddSingleton <IAddonReader>(botController.AddonReader);
                botController.InitialiseBot();
            }
            else
            {
                services.AddSingleton <IBotController>(new ConfigBotController());
                services.AddSingleton <IAddonReader>(new ConfigAddonReader());
            }

            services.AddRazorPages();
            services.AddServerSideBlazor();

            //services.AddSingleton<RouteInfo>(botController.WowBot.RouteInfo);
        }
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            var logger = new SerilogLoggerProvider(Log.Logger).CreateLogger(nameof(Program));

            services.AddSingleton(logger);

            var wowProcess = new WowProcess();
            var wowScreen  = new WowScreen(logger, wowProcess);

            wowScreen.GetRectangle(out var rect);

            var addonConfig       = AddonConfig.Load();
            var addonConfigurator = new AddonConfigurator(logger, addonConfig);

            if (!addonConfig.IsDefault() && !addonConfigurator.Installed())
            {
                // At this point the webpage never loads so fallback to configuration page
                AddonConfig.Delete();
                DataFrameConfiguration.RemoveConfiguration();
            }

            if (DataFrameConfiguration.Exists() &&
                !DataFrameConfiguration.IsValid(rect, addonConfigurator.GetInstalledVersion()))
            {
                // At this point the webpage never loads so fallback to configuration page
                DataFrameConfiguration.RemoveConfiguration();
            }

            if (AddonConfig.Exists() && DataFrameConfiguration.Exists())
            {
                var dataConfig    = DataConfig.Load();
                var pather        = GetPather(logger, dataConfig);
                var botController = new BotController(logger, pather, dataConfig, Configuration);
                services.AddSingleton <IBotController>(botController);
                services.AddSingleton <IGrindSessionHandler>(botController.GrindSessionHandler);
                services.AddSingleton <IGrindSession>(botController.GrindSession);
                services.AddSingleton <IAddonReader>(botController.AddonReader);
                services.AddMatBlazor();
            }
            else
            {
                services.AddSingleton <IBotController>(new ConfigBotController());
                services.AddSingleton <IAddonReader>(new ConfigAddonReader());
            }

            services.AddRazorPages();
            services.AddServerSideBlazor();
            services.AddBlazorTable();
        }
Exemple #5
0
        private static void CreateConfig(WowScreen wowScreen)
        {
            // Requirement enabled addon
            var enabledAddon = wowScreen.GetBitmap(1, 1);
            var firstPixel   = enabledAddon.GetPixel(0, 0);

            while (firstPixel.ToArgb() != System.Drawing.Color.Black.ToArgb())
            {
                Log.Logger.Information("Addon not visible!");

                Thread.Sleep(1000);
                enabledAddon = wowScreen.GetBitmap(1, 1);
                firstPixel   = enabledAddon.GetPixel(0, 0);
            }

            // Enabled Addon visible
            Log.Logger.Information("Addon Visible");

            var dataFrameMeta = DataFrameMeta.Empty;

            while (dataFrameMeta == DataFrameMeta.Empty)
            {
                var metaBmp = wowScreen.GetBitmap(5, 5);
                dataFrameMeta = DataFrameConfiguration.GetMeta(metaBmp);
                Thread.Sleep(1000);

                Log.Logger.Information("Enter Addon Configure mode!");
            }

            wowScreen.GetRectangle(out var rect);
            var size       = dataFrameMeta.EstimatedSize(rect);
            var screenshot = wowScreen.GetBitmap(size.Width, size.Height);
            var dataFrames = DataFrameConfiguration.CreateFrames(dataFrameMeta, screenshot);

            while (dataFrames.Count != dataFrameMeta.frames)
            {
                dataFrames = DataFrameConfiguration.CreateFrames(dataFrameMeta, screenshot);
                Thread.Sleep(1000);

                Log.Logger.Information($"Size missmatch {dataFrames.Count} != {dataFrameMeta.frames}");
            }

            DataFrameConfiguration.SaveConfiguration(rect, null, dataFrameMeta, dataFrames);
            Log.Logger.Information("DataFrameConfiguration Saved!");
            Log.Logger.Information("Leave Addon Configure mode!");
            Log.Logger.Information("Please Restart!");

            System.Console.ReadLine();
        }