Coder Social home page Coder Social logo

uk-controller-plugin's Introduction

uk-controller-plugin

The VATSIM UK Controller Plugin for EuroScope 3.2 only. This project works in cooperation with the Plugin API to offer useful functionality to controllers of UK positions on the VATSIM network.

Build semantic-release Commitizen friendly

Setting Up The Project Locally

  • Fork the repo
  • Clone the project
  • Open the project, we suggest you either use Visual Studio Community Edition or Visual Studio Code (both free)
  • You will need to ensure that you have the libraries containing mitigation for the Spectre exploit, information on how to install them may be found in the installation guide

Compiling

There are two build configurations available:

  • Debug: Compile with all debugging symbols for development. Results in decreased performance and an inflated DLL.
  • Release: Compile in release mode, with compiler optimisations.

Compiling may be achieved by:

  • Running CMake followed by nmake - see the workflow file for GitHub Actions.
  • Using your favourite IDE (e.g. Visual Studio / CLion) to build the project.

Running Tests

Tests are powered by Google Test and Google Mock and may be run by compiling and running the three "Test" projects.

Most code editors offer test runner adapters for GoogleTest, to integrate the running of tests into the development environment.

Code Style

Every pull request for this repository is checked using clang-format. Clang format may be configured in your code editor of choice to run locally, as well!

Contributing

To contribute to the project, please have a look at the Contributing Guide.

Design Rationale

There are a number of technical decisions that have been made during the development of the plugin to improve the development experience and also to make the code clean with separation of concerns.

Event Driven

EuroScope is a highly event-driven program, with events being sent to the plugin for everything from flights being updated, to controllers logging on, to radar blips moving across the screen.

The plugin is therefore built around the idea of "event handlers" - classes that follow a particular interface and process events that are passed to them. Each type of event will have a collection of handlers that is called, which allows us to avoid having all the event handling logic directly in the methods that EuroScope calls when an event occurs!

Asynchronous for long running operations

EuroScope plugins run on a single thread, the same thread that most of EuroScope uses, therefore it is necessary to ensure that long-running operations do not block this thread.

Calls to the web API are handled on a separate thread, as well as other HTTP requests to external resources and integrations with other plugins and programs.

Interfaces around External Classes

EuroScope provides a number of classes that represent data within the program, such as Flightplans and Controller Positions. Most of these classes are not directly instantiable and thus are difficult to write tests with. Therefore, the plugin provides interfaces and wrappers for these external classes, allowing them to be mocked for the purposes of testing.

Everything gets a test

Unlike a web application, a program that runs on a VATSIM members machine is much harder to debug when something goes wrong, and everyone's setup is slightly different. Therefore, every class in the plugin, as far as practicable, has an automated test to ensure that nothing gets broken when we change something.

uk-controller-plugin's People

Contributors

aliceford avatar andytwf avatar axonc avatar calumtowers avatar dependabot[bot] avatar hazzas-99 avatar semantic-release-bot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

uk-controller-plugin's Issues

Audio for VATSIM Capability

Things that need to be done for AFV:

  • Ignore any callsign beginning with an asterisk, these are pseudo-positions injected by AFV.

Departure Handoff Indicator

With increased capacity for 'non-standard' event splits, I thought it might be a good idea to have a display feature/pop-up that dynamically displays the active handoff frequency.

Some thoughts on functionality:

  • Default orders would be defined in the API
  • Each SID (or groups of SIDs where relevant?) would be displayed in a box similar in design to the MSL box, with the appropriate frequency
  • Hover over frequency to show callsign(?)
  • When the frequency changes, it should indicate this with a change of colour
  • Area controllers should be able to set non-standard frequencies - then when the plugin detects a change in online controllers, the person that set the non-standard frequency would be prompted to confirm that the non-standard arrangement is still applicable(?)

'Stacked' Aircraft In Hold Manager

Excuse the pun! Aircraft appear to be able to stack up on top of each other in the hold manager if at the same level. Whilst this is really a controller's problem, is there a way to keep an aircraft in the level above or add a new line with a red warning box etc.? Just something to make it more obvious that something has gone awry πŸ˜„

Changelog

Implement a changelog into the plugin so members can view previous (and future, if they don't have the most up-to-date version) changes.

Asynchronous Crash

Crash reported in crtbase.dll. Seems to be around the point of squawk assignment (in reported case, events are deferred on login but the assignment never happens).

ES mentions in its documents that FP instances may become invalid between calls, presumably the same holds true when working asynchronously.

Therefore we need to move the actual assignment of the API allocated squawk onto the main ES thread to stop this possibility from occurring.

Force Remove Aircraft From Hold Manager

I had a (perhaps rare) instance of an aircraft that had since disconnected still contained within the hold manager yesterday. Perhaps it would be possible to add a command to force delete an aircraft from the hold manager?

Remove MFC From UKCP

  • The Microsoft Foundation Classes (MFC) are used to power the History Trails and General Settings dialog.
  • MFC has dependency consequences, as it requires you to use afxwin.h
  • Other dependencies that would be good to use (e.g. Boost) require windows.h and don't agree with MFC much.
  • MFC is very old and not encouraged
  • We should replace MFC.

Not Detecting User Login

  • One incident recorded in 18 months... This is a placeholder incase we actually need to revisit this.

QNH change notification

METARs turning pink are great, but when on London it’s quite difficult to know if any of the QNHs have actually changed. Perhaps there might be some way of indicating this, maybe by means of an automated message...?

Prenotes Not Sent To Student If Mentor Online

If mentors and students are both online with Primary frequency ticked, due to M being before T, the mentor always ends up "owning" an airport. This means that the student doesn't get prenotes etc.

UK Sector File Update Notifications

Request from a member:

  • Have the plugin track the current latest version of UKSF.
  • If the user is using an old version of UKSF, prompt them that an update is available.

Hoppie CPDLC Capability

Add capability for en-route CPDLC/ACARS by integration with Hoppie ACARS system.
Maybe also include PDC/DCL (already served by vSMR)
Pilot take-up on this may soon increase dramatically ;)

Menu Has A Random Order

The popup menu has a seemingly random order...

This is because the ConfigurableDisplayCollection has a set of pointers, which are not guaranteed to allocate contiguously. This needs to be made into a list, so that insertion order is preserved.

Heathrow CPT Squawks Not Assigning

Heathrow CPT departures aren't having squawks assigned. This is because ES tells the plugin that the aircraft are too far from origin. Find a way to increase the allowable distance to allow this to work.

Automatically Check VC++ Redistributable Version

  • Do a registry key check to check that then redist is installed.
  • Terminate plugin if not and give useful message.

Key HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x86

Log Folder Not Created

Despite the fixes in #63 there appears to be one more case where users cannot create the logs folder when bootstrapping UKCP.

C-mode & departure list

I switched from Easy VATSIM to C-mode correlation, and the EOBT/EDT/AOBT all disappeared!

Configurable timer

Settings to be able to configure which timings are shown on the countdown timer - should be mirrored across ASRs

LoggerBootstrap Crash

  • UKCP crashes during logger bootstrap as for users where it doesn't default to MyDocuments/EuroScope/ukcp, it hasn't created the ukcp folder by this point.

History trail large(?) maximum doesn't save

When changing the history trail length to say, 99, saving the settings (and hence closing the history trail setting dialog) enacts such a command. i.e. there will be 99 blip trails

However, when opening the history trail dialog again, the previously saved length does not save - this doesn't seem to occur for lower value numbers

Active danger area display

The TopSky plugin (somehow) automatically displays only active danger areas according to the day's NOTAMs and the time restrictions set on them

It might also be an idea to allow an online form for vRAF members to request the activation of particular danger areas that would then display on the controller's scope


There are many great features of TopSky, and it is a shame that often developers across VATSIM tend to not work together - but this post here (http://forum.vatsim-scandinavia.org/topic/1730-topsky-plugin-public-beta/) leads you to Juha Holopainen who it might be worth a dialogue with perhaps?

Finish Regional Pressures

  • API is already done, mostly - just need to hook up to Websockets and tidy up.
  • Display Regional Pressures in the front-end.

Plugin and ES Crash When Changing Primaries

Steps To Reproduce:

  • Tick a primary frequency
  • Tick another, different one

ES throws an exception warning and then crashes. This is caused by ActiveCallsignCollection - ES adds the new user position before it deactivates the old one.

Resetting API Key

  • Allow users to provide a new API key for the plugin to use without having to do it by trying to find the settings file.

Custom Holds

In addition to the standard holds in hold manager, consider if we can allow custom ones.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.