Skip to content

Added UDP multicast for plugin discovery#153

Merged
jason-watkins merged 20 commits intonasa:developfrom
JanC:discovery
Mar 14, 2019
Merged

Added UDP multicast for plugin discovery#153
jason-watkins merged 20 commits intonasa:developfrom
JanC:discovery

Conversation

@JanC
Copy link
Copy Markdown
Contributor

@JanC JanC commented Mar 2, 2019

Hi,
as discussed in #147, here is the implementation of the UDP discovery of the plugin.

The format of the UDP packet is:

4 bytes: BECN
1 byte: 0
2 bytes: XPlaneConnect server port e.g. '49009'
4 bytes: X-Plane version e.g. '11260'
null terminated string: XPlaneConnect plugin version e.g. '1.3-rc.1'

The changes are

  • Use C++11 needed by <thread>
  • Added a helper Timer class that can run a callback every x milliseconds
  • Start a timer in XPluginEnable to UDP multicast the BECN packet

Compiles fine on all platforms. I'll provide the binaries once this is reviewed.

What is not part of this pull request are the client side implementations but I believe this can be done separately.

Tested on macOS, Linux and Windows

@jason-watkins
Copy link
Copy Markdown
Contributor

Hi Jan,

Sorry for the late response. The code looks good. While I'm fine with leaving out most of the client stuff, I would like to see at least one test to make sure the code works. If you could at support to one of the clients and add a test for it I would appreciate it.

Thanks,
Jason

@JanC
Copy link
Copy Markdown
Contributor Author

JanC commented Mar 8, 2019

Hi Jason,
sure, I’ll implement that as well.
Thanks for looking into this

Jan

Copy link
Copy Markdown
Contributor

@jason-watkins jason-watkins left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've taken a closer look at the changes and made a few notes. In addition, it looks like spaces and tabs are intermixed inconsistently, which happens to be a pet peave of mine. If you wouldn't mind doing a search/replace to make sure the plugin source is consistent it will save me the trouble.

Once the comments are addressed, I think this is ready to merge.

#include <cmath>
#include <cstring>

#define MULTICAST_GROUP "239.255.1.1"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where does this value come from? Is it a good default value that should be baked in? If there was some non-arbitrary reason for this value, let's mention it in a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I used the same group (but a different port) as the native X-Plane BECN packet. See this comment #147 (comment) I believe we are free to choose whatever arbitrary multicast group.

class Timer
{

bool running = false;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bool isn't guaranteed to be thread-safe. I think std::atomic_flag would be the most appropriate replacement.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

bool running = false;

public:
std::thread th;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does the thread need to be public?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

correct. Moved to private


public:
std::thread th;
typedef std::function<void(void)> Callback;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I prefer the C++11 style of using Callback = std::function<void(void)>

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

@jason-watkins jason-watkins merged commit 50335c4 into nasa:develop Mar 14, 2019
JanC added a commit to JanC/XPConnectKit that referenced this pull request Mar 16, 2019
jason-watkins added a commit that referenced this pull request Jul 20, 2019
* Minor improvements to the handling of landing gear by the SetGear and HandlePOSI functions

* sendPOSI command change (double for lat/lon/h) (#111)

* Updated POSI to use doubles for lat/lon/alt, as step size for floats was unacceptably large at high longitudes.

* Updated Java library for MATLAB, updated Java project, and updated Windows plugin binaries

* Rolled back Java version to 1.7 for MATLAB compatibility

* Update MessageHandlers.cpp

* Update DataManager.cpp

* Added pause functionality for individual a/c

Adds new cases such that:
0: Unpauses all a/c
1: Pauses all a/c
2: Switches case for all a/c
100:119: Pauses a/c 0:19
200:219: Unpauses a/c 0:19

Updates log messages.

Keeps the 0,1,2 arguments as they previously were.

* Finished individual pause functionality

* Update DataManager.cpp

* Updated flags to allow for individual pause commands

* Individual pause command documentation

* Updated flags to allow for individual pause commands

* Adding individual pause to documentation

* Updated flags to allow for individual pause commands

* Requested changes, cleaning

* Update CMakeLists.txt

Include "-fno-stack-protector" for linking and compiling for systems that do not have this have this flag as a default.

* Enabling AI after setting position (#118)

Previously, the code enabled the AI before setting the position of a/c, which negated its purpose.

* Updated XPlane SDK to version 2.1.3

* Resolve function ambiguity for std::abs on mac

Fixes #126

* Update copyright notice

* Update Windows binaries

* Update Linux binaries

* Update version numbers

* fix osx abs ambiguity (#142)

* fix indexing error (#143)

* Runway camera location control (#144)

* update ignore

* basics working

* set cam pos remotely

* log cam position

* keep default behaviour, if short view message is received

Compatibility with existing software

* all to tabs

* rename variable

* option to use camera direction fields

* Added UDP multicast for plugin discovery (#153)

* Added Timer

* Added UDPSocket::GetAddr

* Added MessageHandlers::SendBeacon()

* PoC of starting a timer on PluginEnable

* C++11

* Added Timer to xcode project

* C++11 in cmake

* added Timer to cmake

* use function pointer in Timer

* moved Timer to namespace

+ wait for thread to join when stopping the timer

* Windows: changed uint to unisgned short

* Windows: Added Timer.h/cpp to project

* GetAddr static

* Send xplane and plugin version with BECN

* SendBeacon with params

* fixed file copyrights

* Include functional

to fix Linux compile error

* review fixes

* Send plugin receive port in BECN

* review fixes

* Fixed tabs vs spaces indentations (#157)

* Java client BECN implementation (#155)

* Added MS Azure Dev Ops CI integration (#162)

* Do not build for i386 on macOS

Use ARCHS_STANDARD  to avoid the error “The i386 architecture is deprecated. You should update your ARCHS build setting to remove the i386 architecture.”

* Fixed missing include

The Visual Studio solution was not compiling

* Fixed isnan ambigious refernce

Ambigious reference when compiling on travis

https://stackoverflow.com/questions/33770374/why-is-isnan-ambiguous-and-how-to-avoid-it

* Set MSVC warning level to 3

Too many warnings were generated when building a Release build making Travis job to fail because of too much output

* Use default toolset for Visual Studio

AppVeyor recommends to set the default toolset

* #include <cstdint>

* Use MSVC ToolsVersion="14.0"

# Conflicts:
#	xpcPlugin/xpcPlugin/xpcPlugin.vcxproj

* Removed binaries from repository

# Conflicts:
#	xpcPlugin/XPlaneConnect/64/win.xpl
#	xpcPlugin/XPlaneConnect/win.xpl

* Added ms azure ci

xcode

linux

linux + macos

linux + macos

removed branch filter

win tests

win tests

Test all platfroms

artifacts tests

* output all binaries to ‘XPlaneConnect’

All platforms produce a binary in
xpcPlugin/XPlaneConnect/
xpcPlugin/XPlaneConnect/64/

* Added ms azure GH deploy

deploy stage

GH release test

trigger tags

* Clean up yml file

- Added variables
- Added job decriptions

* Ignore script to ignore .exp files

+ fixed output path

* Renamed ms azure GH connection

* Update service connection for azure pipeline

* Added Python3 compatible xpc client. (#156)

* Update Azure Pipelines service connection
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants