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
This commit is contained in:
committed by
Jason Watkins
parent
f9bfd6e3b9
commit
50335c4a5c
@@ -26,6 +26,9 @@
|
||||
#include <cmath>
|
||||
#include <cstring>
|
||||
|
||||
#define MULTICAST_GROUP "239.255.1.1"
|
||||
#define MULITCAST_PORT 49710
|
||||
|
||||
|
||||
namespace XPC
|
||||
{
|
||||
@@ -35,6 +38,8 @@ namespace XPC
|
||||
std::string MessageHandlers::connectionKey;
|
||||
MessageHandlers::ConnectionInfo MessageHandlers::connection;
|
||||
UDPSocket* MessageHandlers::sock;
|
||||
|
||||
static sockaddr multicast_address = UDPSocket::GetAddr(MULTICAST_GROUP, MULITCAST_PORT);
|
||||
|
||||
void MessageHandlers::SetSocket(UDPSocket* socket)
|
||||
{
|
||||
@@ -130,6 +135,28 @@ namespace XPC
|
||||
MessageHandlers::HandleUnknown(msg);
|
||||
}
|
||||
}
|
||||
|
||||
void MessageHandlers::SendBeacon(const std::string& pluginVersion, unsigned short pluginReceivePort, int xplaneVersion) {
|
||||
|
||||
unsigned char response[128] = "BECN";
|
||||
|
||||
std::size_t cur = 5;
|
||||
|
||||
// 2 bytes plugin port
|
||||
*((uint16_t *)(response + cur)) = pluginReceivePort;
|
||||
cur += sizeof(uint16_t);
|
||||
|
||||
// 4 bytes xplane version
|
||||
*((uint32_t*)(response + cur)) = xplaneVersion;
|
||||
cur += sizeof(uint32_t);
|
||||
|
||||
// plugin version
|
||||
int len = pluginVersion.length();
|
||||
memcpy(response + cur, pluginVersion.c_str(), len);
|
||||
cur += strlen(pluginVersion.c_str()) + len;
|
||||
|
||||
sock->SendTo(response, cur, &multicast_address);
|
||||
}
|
||||
|
||||
void MessageHandlers::HandleConn(const Message& msg)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user