private static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionEventHandler; Console.Title = "NecroBot starting"; Console.CancelKeyPress += (sender, eArgs) => { QuitEvent.Set(); eArgs.Cancel = true; }; var culture = CultureInfo.CreateSpecificCulture("en-US"); CultureInfo.DefaultThreadCurrentCulture = culture; Thread.CurrentThread.CurrentCulture = culture; if (args.Length > 0) subPath = args[0]; Logger.SetLogger(new ConsoleLogger(LogLevel.Info), subPath); var settings = GlobalSettings.Load(subPath); if (settings == null) { Logger.Write("Press a Key to continue...", LogLevel.Warning); Console.ReadKey(); return; } var session = new Session(new ClientSettings(settings), new LogicSettings(settings)); session.Client.ApiFailure = new ApiFailureStrategy(session); /*SimpleSession session = new SimpleSession { _client = new PokemonGo.RocketAPI.Client(new ClientSettings(settings)), _dispatcher = new EventDispatcher(), _localizer = new Localizer() }; BotService service = new BotService { _session = session, _loginTask = new Login(session) }; service.Run(); */ var machine = new StateMachine(); var stats = new Statistics(); stats.DirtyEvent += () => Console.Title = stats.GetTemplatedStats( session.Translation.GetTranslation(TranslationString.StatsTemplateString), session.Translation.GetTranslation(TranslationString.StatsXpTemplateString)); var aggregator = new StatisticsAggregator(stats); var listener = new ConsoleEventListener(); var websocket = new WebSocketInterface(settings.WebSocketPort, session); session.EventDispatcher.EventReceived += evt => listener.Listen(evt, session); session.EventDispatcher.EventReceived += evt => aggregator.Listen(evt, session); session.EventDispatcher.EventReceived += evt => websocket.Listen(evt, session); machine.SetFailureState(new LoginState()); Logger.SetLoggerContext(session); session.Navigation.UpdatePositionEvent += (lat, lng) => session.EventDispatcher.Send(new UpdatePositionEvent {Latitude = lat, Longitude = lng}); session.Navigation.UpdatePositionEvent += Navigation_UpdatePositionEvent; machine.AsyncStart(new VersionCheckState(), session); if (session.LogicSettings.UseSnipeLocationServer) SnipePokemonTask.AsyncStart(session); QuitEvent.WaitOne(); }
private static void Main(string[] args) { string strCulture = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName; var culture = CultureInfo.CreateSpecificCulture( "en" ); CultureInfo.DefaultThreadCurrentCulture = culture; Thread.CurrentThread.CurrentCulture = culture; AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionEventHandler; Console.Title = "NecroBot"; Console.CancelKeyPress += (sender, eArgs) => { QuitEvent.Set(); eArgs.Cancel = true; }; if (args.Length > 0) subPath = args[0]; Logger.SetLogger(new ConsoleLogger(LogLevel.LevelUp), subPath); if (CheckKillSwitch()) return; var profilePath = Path.Combine(Directory.GetCurrentDirectory(), subPath); var profileConfigPath = Path.Combine(profilePath, "config"); var configFile = Path.Combine(profileConfigPath, "config.json"); GlobalSettings settings; Boolean boolNeedsSetup = false; if( File.Exists( configFile ) ) { // Load the settings from the config file // If the current program is not the latest version, ensure we skip saving the file after loading // This is to prevent saving the file with new options at their default values so we can check for differences settings = GlobalSettings.Load( subPath, !VersionCheckState.IsLatest() ); } else { settings = new GlobalSettings(); settings.ProfilePath = profilePath; settings.ProfileConfigPath = profileConfigPath; settings.GeneralConfigPath = Path.Combine( Directory.GetCurrentDirectory(), "config" ); settings.TranslationLanguageCode = strCulture; boolNeedsSetup = true; } if (args.Length > 1) { string[] crds = args[1].Split(','); double lat, lng; try { lat = Double.Parse(crds[0]); lng = Double.Parse(crds[1]); settings.DefaultLatitude = lat; settings.DefaultLongitude = lng; } catch (Exception) { } } var session = new Session(new ClientSettings(settings), new LogicSettings(settings)); if (boolNeedsSetup) { if (GlobalSettings.PromptForSetup(session.Translation) && !settings.isGui) { session = GlobalSettings.SetupSettings(session, settings, configFile); if (!settings.isGui) { var fileName = Assembly.GetExecutingAssembly().Location; System.Diagnostics.Process.Start(fileName); Environment.Exit(0); } } else { GlobalSettings.Load(subPath); Logger.Write("Press a Key to continue...", LogLevel.Warning); Console.ReadKey(); return; } } ProgressBar.start("NecroBot is starting up", 10); session.Client.ApiFailure = new ApiFailureStrategy(session); ProgressBar.fill(20); /*SimpleSession session = new SimpleSession { _client = new PokemonGo.RocketAPI.Client(new ClientSettings(settings)), _dispatcher = new EventDispatcher(), _localizer = new Localizer() }; BotService service = new BotService { _session = session, _loginTask = new Login(session) }; service.Run(); */ var machine = new StateMachine(); var stats = new Statistics(); ProgressBar.fill(30); string strVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(3); stats.DirtyEvent += () => Console.Title = $"[Necrobot v{strVersion}] " + stats.GetTemplatedStats( session.Translation.GetTranslation(TranslationString.StatsTemplateString), session.Translation.GetTranslation(TranslationString.StatsXpTemplateString)); ProgressBar.fill(40); var aggregator = new StatisticsAggregator(stats); ProgressBar.fill(50); var listener = new ConsoleEventListener(); ProgressBar.fill(60); session.EventDispatcher.EventReceived += evt => listener.Listen(evt, session); session.EventDispatcher.EventReceived += evt => aggregator.Listen(evt, session); if (settings.UseWebsocket) { var websocket = new WebSocketInterface(settings.WebSocketPort, session); session.EventDispatcher.EventReceived += evt => websocket.Listen(evt, session); } ProgressBar.fill(70); machine.SetFailureState(new LoginState()); ProgressBar.fill(80); Logger.SetLoggerContext(session); ProgressBar.fill(90); session.Navigation.UpdatePositionEvent += (lat, lng) => session.EventDispatcher.Send(new UpdatePositionEvent { Latitude = lat, Longitude = lng }); session.Navigation.UpdatePositionEvent += Navigation_UpdatePositionEvent; ProgressBar.fill(100); machine.AsyncStart(new VersionCheckState(), session); if (settings.UseTelegramAPI) { session.Telegram = new Logic.Service.TelegramService(settings.TelegramAPIKey, session); } if (session.LogicSettings.UseSnipeLocationServer) SnipePokemonTask.AsyncStart(session); try { Console.Clear(); } catch (IOException) { } settings.checkProxy(); QuitEvent.WaitOne(); }
private static void Main(string[] args) { var subPath = ""; if (args.Length > 0) subPath = args[0]; Logger.SetLogger(new ConsoleLogger(LogLevel.Info), subPath); var settings = GlobalSettings.Load(subPath); if (settings == null) { Logger.Write("This is your first start and the bot has generated the default config!", LogLevel.Warning); Logger.Write("We will now shutdown to let you configure the bot and then launch it again.", LogLevel.Warning); Thread.Sleep(2000); Environment.Exit(0); return; } var session = new Session(new ClientSettings(settings), new LogicSettings(settings)); /*SimpleSession session = new SimpleSession { _client = new PokemonGo.RocketAPI.Client(new ClientSettings(settings)), _dispatcher = new EventDispatcher(), _localizer = new Localizer() }; BotService service = new BotService { _session = session, _loginTask = new Login(session) }; service.Run(); */ var machine = new StateMachine(); var stats = new Statistics(); stats.DirtyEvent += () => Console.Title = stats.GetTemplatedStats(session.Translation.GetTranslation(Logic.Common.TranslationString.StatsTemplateString), session.Translation.GetTranslation(Logic.Common.TranslationString.StatsXpTemplateString)); var aggregator = new StatisticsAggregator(stats); var listener = new ConsoleEventListener(); var websocket = new WebSocketInterface(settings.WebSocketPort, session.Translation); session.EventDispatcher.EventReceived += (IEvent evt) => listener.Listen(evt, session); session.EventDispatcher.EventReceived += (IEvent evt) => aggregator.Listen(evt, session); session.EventDispatcher.EventReceived += (IEvent evt) => websocket.Listen(evt, session); machine.SetFailureState(new LoginState()); Logger.SetLoggerContext(session); session.Navigation.UpdatePositionEvent += (lat, lng) => session.EventDispatcher.Send(new UpdatePositionEvent {Latitude = lat, Longitude = lng}); machine.AsyncStart(new VersionCheckState(), session); //Non-blocking key reader //This will allow to process console key presses in another code parts while (true) { if (Console.KeyAvailable) { var info = Console.ReadKey(); if (info.Key == ConsoleKey.Enter) break; } Thread.Sleep(5); } }
private static void Main(string[] args) { var culture = CultureInfo.CreateSpecificCulture("en-US"); CultureInfo.DefaultThreadCurrentCulture = culture; Thread.CurrentThread.CurrentCulture = culture; var subPath = ""; if (args.Length > 0) subPath = args[0]; Logger.SetLogger(new ConsoleLogger(LogLevel.Info), subPath); var settings = GlobalSettings.Load(subPath); if (settings == null) { Logger.Write("This is your first start and the bot has generated the default config!", LogLevel.Warning); Logger.Write("Press a Key to continue...", LogLevel.Warning); Console.ReadKey(); } var session = new Session(new ClientSettings(settings), new LogicSettings(settings)); session.Client.ApiFailure = new ApiFailureStrategy(session); /*SimpleSession session = new SimpleSession { _client = new PokemonGo.RocketAPI.Client(new ClientSettings(settings)), _dispatcher = new EventDispatcher(), _localizer = new Localizer() }; BotService service = new BotService { _session = session, _loginTask = new Login(session) }; service.Run(); */ var machine = new StateMachine(); var stats = new Statistics(); stats.DirtyEvent += () => Console.Title = stats.GetTemplatedStats( session.Translation.GetTranslation(TranslationString.StatsTemplateString), session.Translation.GetTranslation(TranslationString.StatsXpTemplateString)); var aggregator = new StatisticsAggregator(stats); var listener = new ConsoleEventListener(); var websocket = new WebSocketInterface(settings.WebSocketPort, session); session.EventDispatcher.EventReceived += evt => listener.Listen(evt, session); session.EventDispatcher.EventReceived += evt => aggregator.Listen(evt, session); session.EventDispatcher.EventReceived += evt => websocket.Listen(evt, session); machine.SetFailureState(new LoginState()); Logger.SetLoggerContext(session); session.Navigation.UpdatePositionEvent += (lat, lng) => session.EventDispatcher.Send(new UpdatePositionEvent {Latitude = lat, Longitude = lng}); machine.AsyncStart(new VersionCheckState(), session); if (session.LogicSettings.UseSnipeLocationServer) SnipePokemonTask.AsyncStart(session); //Non-blocking key reader //This will allow to process console key presses in another code parts while (true) { if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Enter) { break; } Thread.Sleep(5); } }