Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

byebye message not sent when calling bus.stop() #5

Open
davidatingenuity opened this issue Mar 19, 2019 · 3 comments
Open

byebye message not sent when calling bus.stop() #5

davidatingenuity opened this issue Mar 19, 2019 · 3 comments

Comments

@davidatingenuity
Copy link

HI @achingbrain,
I'm using your library, and integrating it with express, as per your example:
const upnp = require('@achingbrain/ssdp')(options.ssdpOptions);
const ssdp = require('./ssdp/ssdp');
upnp.on('error', console.error) // Log errors
.advertise(ssdp.services) // Advertise the services configured
.then(ssdp.serviceHosting) // Configure Express to serve the details.xml file
.then(addRoutes); // then add all the other routes

where:

  • options.ssdpOptions specifies a guid for the udn,
  • ssdp.services contains the USN, the location and the details for the service,
  • ssdp.serviceHosting contains the routing for express, and
  • addRoutes adds all the remaining routes to express.

To get to this point, I needed to modify stop-advert.js slightly. To integrate with express, I need to specify a location, but if the location is specified, no shutdownServers function is created in create-location.js, and an unhandled promise rejection is thrown in stop-advert.js when it tries to call plumbing.shutdownServers. All I'm doing is checking if shutdownServers exists before it's called.

The issue I'm having is when I call upnp.stop(), a transport:outgoing-message is emitted for the byebye, but I never see the corresponding packet in wireshark. The socket.send call never seems to return.

I can submit a PR for the unhandled promise rejection, but I'm stuck on the other issue. Any ideas?

@achingbrain
Copy link
Owner

Please do submit a PR, that sounds like it should be handled - thanks.

The actual sending of the UDP message will likely be done asynchronously - Is the process shutting down before the packet gets sent?

@davidatingenuity
Copy link
Author

davidatingenuity commented Mar 20, 2019

I've submitted #6, but upon further inspection, it looks like the 2nd issue is a result of my fix for the first - the nested promises are being processed in parallel, not sequentially as I expected. This means the sockets are closed before the broadcastAdvert has finished.

@davidatingenuity
Copy link
Author

I couldn't work out how to wait until the byebye broadcast event had finished, so I've put a 1 second delay between the broadcastAdvert and when the sockets are closed. It's not pretty, but it works well enough for our purposes. I'll let someone more capable than I fix it properly, but if you're interested, my fix is here: davidatingenuity@7fc6475

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

No branches or pull requests

2 participants