attwad / python-osc

Open Sound Control server and client in pure python
The Unlicense
516 stars 108 forks source link

Using python-osc as script in OBS, OBS is inoperable. #123

Open MarioMey opened 4 years ago

MarioMey commented 4 years ago

I'm trying to use python-osc to make OBS receive and send OSC messages. This OBS plugin uses python-osc to send messages. Inside that code, all osc_server code is commented because it didn't work. But there is a new pull request that allows to do import osc_server, so it would can receive messages.

To receive messages, it is necessary to run server.serve_forever() but this function hangs/freezes OBS waiting for OSC messages. It receives them, it can print messages, it works... but I can't use OBS because it is frozen.

By doing this, I get this:

print(server.serve_forever.__doc__)
Handle one request at a time until shutdown.
         Polls for shutdown every poll_interval seconds. Ignores
         self.timeout. If you need to do periodic tasks, do them in
         another thread.

How should I run server.serve_forever() in another thread?

hackery commented 2 years ago

Perhaps wrap the server_forever call in a Thread, something like

server = osc_server.ThreadingOSCUDPServer(("0.0.0.0", 8080), dispatcher)
thread = Thread(target=server.serve_forever, daemon=True).start()

Use a daemon thread type because there doesn't seem to be an interface to stop() the OSC server.

MarioMey commented 2 years ago

Well, since this thread is a bit old... yes, your suggestion is what I'm actually using since beggining of last year...

Anyway, thanks!