Ejemplo n.º 1
0
        public async Task WatcherRaisesEventsForHistoricalEntriesOnStart()
        {
            using var watcher = new JournalWatcher(_jf);
            var ecEntries = new EventCollector <JournalEntry>(h => watcher.EntryAdded += h, h => watcher.EntryAdded -= h, nameof(WatcherRaisesEventsForHistoricalEntriesOnStart));
            var ecReady   = new EventCollector <EventArgs>(h => watcher.Started += h, h => watcher.Started -= h, nameof(WatcherRaisesEventsForHistoricalEntriesOnStart));

            var readyTask = ecReady.WaitAsync(() => { });
            var entries   = new Queue <JournalEntry>(await ecEntries.WaitAsync(_journalFile1Count, () =>
            {
                watcher.Start();
                Assert.False(watcher.IsWatching);
            }).ConfigureAwait(false));

            var ready = await readyTask.ConfigureAwait(false);

            Assert.NotNull(ready);
            Assert.True(watcher.IsWatching);

            watcher.Stop();
            Assert.False(watcher.IsWatching);

            Assert.Equal(_journalFile1Count, entries.Count);
            Assert.IsType <FileHeader>(entries.Dequeue());
            Assert.IsType <Music>(entries.Dequeue());
            Assert.IsType <UnderAttack>(entries.Dequeue());
            Assert.IsType <StartJump>(entries.Dequeue());
            Assert.IsType <JournalEntry>(entries.Dequeue());
            Assert.IsType <Shutdown>(entries.Dequeue());
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                Console.WriteLine("Don't forget to supply a path where the journal feed is located.");
                return;
            }

            string path = args[0];

            var watcher = new JournalWatcher(path);

            watcher.GetEvent <FileheaderEvent>()?.AddHandler((s, e) => Console.WriteLine("Heading received: gameversion {0}, build {1}.", e.GameVersion, e.Build));
            watcher.GetEvent <FSDJumpEvent>()?.AddHandler((s, e) => Console.WriteLine("Woohoo, jumped to [{0}, {1}, {2}]", e.StarPos.X, e.StarPos.Y, e.StarPos.Z));
            watcher.GetEvent <ScanEvent>()?.AddHandler((s, e) => Console.WriteLine("Scanned a body {0}, it is {1}landable.", e.BodyName, (e.Landable ?? false) ? "" : "not "));
            watcher.GetEvent <DockedEvent>()?.AddHandler((s, e) => Console.WriteLine("Docked at {0}", e.StationName));

            watcher.GetEvent <DiedEvent>()?.AddHandler((s, e) =>
            {
                Console.WriteLine("Killed by {0}",
                                  e.Killers
                                  .Select(k => string.Format("{0} ({2}, flying a {1})", k.Name, k.Ship, k.Rank))
                                  .Aggregate((x, y) => string.Format("{0}, {1}", x, y)));
            });

            watcher.GetEvent <RankEvent>()?.AddHandler((s, e) => Console.WriteLine("Combat rank is {0}, Exploration rank is {1}", e.Combat.ToString(), e.Explore.ToString()));

            watcher.StartWatching();


            Console.ReadLine();

            watcher.StopWatching();
        }
Ejemplo n.º 3
0
        public async Task WatcherRaisesEventsForNewJournalEntries()
        {
            using var dir     = new TestFolder(_jf.FullName);
            using var watcher = new JournalWatcher(new JournalFolder(dir.Name));
            var ecEntries = new EventCollector <JournalEntry>(h => watcher.EntryAdded += h, h => watcher.EntryAdded -= h, nameof(WatcherRaisesEventsForNewJournalEntries));
            var ecReady   = new EventCollector <EventArgs>(h => watcher.Started += h, h => watcher.Started -= h, nameof(WatcherRaisesEventsForNewJournalEntries));

            var ev = await ecReady.WaitAsync(watcher.Start).ConfigureAwait(false);

            Assert.NotNull(ev);
            Assert.True(watcher.IsWatching);

            ev = await ecReady.WaitAsync(watcher.Start, 100).ConfigureAwait(false);

            Assert.Null(ev);

            var entry = await ecEntries.WaitAsync(() => dir.WriteText(_journalFile1, "{ \"event\":\"One\" }\r\n", true)).ConfigureAwait(false);

            Assert.Equal("One", entry.Event);

            var file2 = _journalFile1.Replace(".01.log", ".02.log", StringComparison.Ordinal);

            entry = await ecEntries.WaitAsync(() => dir.WriteText(file2, "{ \"event\":\"Two\" }\r\n")).ConfigureAwait(false);

            Assert.Equal("Two", entry.Event);

            watcher.Stop();
            Assert.False(watcher.IsWatching);
        }
Ejemplo n.º 4
0
        internal GameStateWatcher(string gameInstallFolder, string gameOptionsFolder, string journalFolder, INativeMethods nativeMethods)
        {
            var gif = new GameInstallFolder(gameInstallFolder);
            var gof = new GameOptionsFolder(gameOptionsFolder);
            var jf  = new JournalFolder(journalFolder);

            _journalWatcher             = new JournalWatcher(jf);
            _journalWatcher.Started    += JournalWatcher_Started;
            _journalWatcher.EntryAdded += JournalWatcher_EntryAdded;

            _statusWatcher          = new StatusWatcher(jf);
            _statusWatcher.Changed += StatusWatcher_Changed;

            _bindingsWatcher          = new BindingsWatcher(gif, gof);
            _bindingsWatcher.Changed += BindingsWatcher_Changed;

            _graphicsConfig          = new GraphicsConfigWatcher(gif, gof);
            _graphicsConfig.Changed += GraphicsConfig_Changed;

            _modifierKeysWatcher          = new ModifierKeysWatcher(nativeMethods);
            _modifierKeysWatcher.Changed += ModifierKeysWatcher_Changed;

            _gameProcessWatcher          = new GameProcessWatcher(gif, nativeMethods);
            _gameProcessWatcher.Changed += GameProcessWatcher_Changed;

            _gameState = new GameState();
        }
Ejemplo n.º 5
0
        static void Main(string[] args)
        {
            //Your Elite Dangerous game path
            string path = "C:\\Users\\your_user_name\\Saved Games\\Frontier Developments\\Elite Dangerous";

            var statusWatcher = new StatusWatcher(path);

            statusWatcher.StatusUpdated += StatusWatcher_StatusUpdated;

            statusWatcher.StartWatching();

            var watcher = new JournalWatcher(path);

            watcher.GetEvent <FileheaderEvent>()?.AddHandler((s, e) => Console.WriteLine("Heading received: gameversion {0}, build {1}.", e.GameVersion, e.Build));
            watcher.GetEvent <ScanEvent>()?.AddHandler((s, e) => Console.WriteLine("Scanned a body {0}, it is {1}landable.", e.BodyName, (e.Landable ?? false) ? "" : "not "));
            watcher.GetEvent <DockedEvent>()?.AddHandler((s, e) => Console.WriteLine("Docked at {0}", e.StationName));

            watcher.GetEvent <FSDTargetEvent>()?.AddHandler((s, e) =>
            {
                Console.WriteLine("FSDTargetEvent");
                TPLink.Patterns.FSDTarget();
                if (IsDocked)
                {
                    TPLink.Patterns.ResetDocked();
                }
            });

            watcher.GetEvent <StartJumpEvent>()?.AddHandler((s, e) =>
            {
                Console.WriteLine("StartJumpEvent [{0}]", e.JumpType);
                TPLink.Patterns.FSDEntry();
            });
            watcher.GetEvent <FSDJumpEvent>()?.AddHandler((s, e) =>
            {
                Console.WriteLine("FSDJumpEvent [{0}]", e.StarSystem);
                TPLink.Patterns.FSDReset();
            });
            //watcher.GetEvent<SupercruiseEntryEvent>()?.AddHandler((s, e) => Console.WriteLine("SupercruiseEntryEvent"));
            watcher.GetEvent <SupercruiseExitEvent>()?.AddHandler((s, e) =>
            {
                Console.WriteLine("SupercruiseExitEvent [{0}, {1}]", e.StarSystem, e.BodyType);
                TPLink.Patterns.FSDReset();
            });

            watcher.GetEvent <DiedEvent>()?.AddHandler((s, e) =>
            {
                Console.WriteLine("Killed by {0}",
                                  e.Killers
                                  .Select(k => string.Format("{0} ({2}, flying a {1})", k.Name, k.Ship, k.Rank))
                                  .Aggregate((x, y) => string.Format("{0}, {1}", x, y)));
            });

            watcher.GetEvent <RankEvent>()?.AddHandler((s, e) => Console.WriteLine("Combat rank is {0}, Exploration rank is {1}", e.Combat.ToString(), e.Explore.ToString()));

            watcher.StartWatching().Wait();

            Console.ReadLine();

            watcher.StopWatching();
        }
Ejemplo n.º 6
0
        public ServerCore(EDFIPServerConsole serverConsole)
        {
            ServerConsole = serverConsole;

            // Set up the Journal feeds to be passed to clients
            var userHome = Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%");

            JournalFileFolder = userHome + Constants.GameStateFolder;
            Log.Instance.Info("Tracking game data from folder: {journalfilefolder}", JournalFileFolder);
            StatusWatcher  = new StatusWatcher(JournalFileFolder);
            JournalWatcher = new JournalWatcher(JournalFileFolder);


            // Add events to watch list
            StatusEventHandler           = new StatusEventHandler(this);
            StatusWatcher.StatusUpdated += StatusEventHandler.HandleEvent;

            TargetEventHandler = new TargetEventHandler(this);
            JournalWatcher.GetEvent <ShipTargetedEvent>().Fired += TargetEventHandler.HandleEvent;

            // Start Matric Integration
            matricapi.Connect();

            // If Immediate start is enabled, start the server
            if (Properties.Settings.Default.ImmediateStart == true)
            {
                this.Start();
            }
        }
Ejemplo n.º 7
0
        public void WatcherThrowsWhenTheJournalFolderIsNotAValidJournalFolder()
        {
            Assert.Throws <ArgumentNullException>(() => { using var x = new JournalWatcher(null); });

            var ex = Assert.Throws <ArgumentException>(() => { using var x = new JournalWatcher(new JournalFolder(@"TestFiles")); });

            Assert.Contains("' is not a valid Elite:Dangerous journal folder.", ex.Message, StringComparison.Ordinal);
        }
Ejemplo n.º 8
0
        public void WatcherDoesNotThrowWhenDisposingTwice()
        {
            var watcher = new JournalWatcher(_jf);

#pragma warning disable IDISP016, IDISP017
            watcher.Dispose();
            watcher.Dispose();
#pragma warning restore IDISP016, IDISP017
        }
Ejemplo n.º 9
0
        static void Main(string[] args)
        {
            // Uncomment this line of code to allow for debugging
            //while (!System.Diagnostics.Debugger.IsAttached) { System.Threading.Thread.Sleep(100); }

            Logger.Instance.LogMessage(TracingLevel.INFO, "Init Elite Api");

            try
            {
                GetKeyBindings(null);


                var journalPath = StandardDirectory.FullName;

                Logger.Instance.LogMessage(TracingLevel.INFO, "journal path " + journalPath);

                if (!Directory.Exists(journalPath))
                {
                    Logger.Instance.LogMessage(TracingLevel.FATAL, $"Directory doesn't exist {journalPath}");
                }

                var defaultFilter = @"Journal.*.log";
//#if DEBUG
                //defaultFilter = @"JournalAlpha.*.log";
//#endif

                StatusWatcher = new StatusWatcher(journalPath);

                StatusWatcher.StatusUpdated += EliteData.HandleStatusEvents;

                StatusWatcher.StartWatching();

                JournalWatcher = new JournalWatcher(journalPath, defaultFilter);

                JournalWatcher.AllEventHandler += EliteData.HandleEliteEvents;

                JournalWatcher.StartWatching().Wait();

                CargoWatcher = new CargoWatcher(journalPath);

                CargoWatcher.CargoUpdated += EliteData.HandleCargoEvents;

                CargoWatcher.StartWatching();
            }
            catch (Exception ex)
            {
                Logger.Instance.LogMessage(TracingLevel.FATAL, $"Elite Api: {ex}");
            }


            //EliteAPI.Events.AllEvent += (sender, e) => Console.Beep();

            Profile.ReadProfiles();


            SDWrapper.Run(args);
        }
        /// <summary>
        /// Sets up the journal watcher and registers events that you want to watch
        /// </summary>
        /// <param name="vaProxy">VoiceAttackProxy object</param>
        public static void Init(VoiceAttackProxy vaProxy)
        {
            LastKnownSystem = Constants.DefaultLastKnownSystem;
            JournalWatcher watcher = new JournalWatcher(JournalPath);

            watcher.GetEvent <SupercruiseExitEvent>()?.AddHandler((s, e) =>
            {
                LastKnownSystem = e.StarSystem;
            });

            watcher.StartWatching().Wait();
        }
Ejemplo n.º 11
0
        static void Main(string[] args)
        {
            // Uncomment this line of code to allow for debugging
            //while (!System.Diagnostics.Debugger.IsAttached) { System.Threading.Thread.Sleep(100); }

            Logger.Instance.LogMessage(TracingLevel.INFO, "Init Elite Api");

            try
            {
                var journalPath = StandardDirectory.FullName;

                Logger.Instance.LogMessage(TracingLevel.INFO, "journal path " + journalPath);

                if (!Directory.Exists(journalPath))
                {
                    Logger.Instance.LogMessage(TracingLevel.FATAL, $"Directory doesn't exist {journalPath}");
                }

                statusWatcher = new StatusWatcher(journalPath);

                statusWatcher.StatusUpdated += EliteData.HandleStatusEvents;

                statusWatcher.StartWatching();

                watcher = new JournalWatcher(journalPath);

                watcher.AllEventHandler += EliteData.HandleEliteEvents;

                watcher.StartWatching().Wait();

                var bindingsPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), @"Frontier Developments\Elite Dangerous\Options\Bindings");

                Logger.Instance.LogMessage(TracingLevel.INFO, "bindings path " + bindingsPath);

                if (!Directory.Exists(bindingsPath))
                {
                    Logger.Instance.LogMessage(TracingLevel.FATAL, $"Directory doesn't exist {bindingsPath}");
                }

                var bindsName = File.ReadAllText(Path.Combine(bindingsPath, "StartPreset.start"));

                var fileName = Path.Combine(bindingsPath, bindsName + ".3.0.binds");

                if (!File.Exists(fileName))
                {
                    //Logger.Instance.LogMessage(TracingLevel.ERROR, "file not found " + fileName);

                    fileName = fileName.Replace(".3.0.binds", ".binds");

                    if (!File.Exists(fileName))
                    {
                        bindingsPath = SteamPath.FindSteamEliteDirectory();

                        if (!string.IsNullOrEmpty(bindingsPath))
                        {
                            fileName = Path.Combine(bindingsPath, bindsName + ".3.0.binds");

                            if (!File.Exists(fileName))
                            {
                                //Logger.Instance.LogMessage(TracingLevel.ERROR, "file not found " + fileName);

                                fileName = fileName.Replace(".3.0.binds", ".binds");
                            }
                        }
                    }
                }

                var serializer = new XmlSerializer(typeof(UserBindings));

                Logger.Instance.LogMessage(TracingLevel.INFO, "using " + fileName);

                var reader = new StreamReader(fileName);
                Bindings = (UserBindings)serializer.Deserialize(reader);
                reader.Close();
            }
            catch (Exception ex)
            {
                Logger.Instance.LogMessage(TracingLevel.FATAL, $"Elite Api: {ex}");
            }


            //EliteAPI.Events.AllEvent += (sender, e) => Console.Beep();


            SDWrapper.Run(args);
        }