kivy / oscpy

An efficient OSC implementation compatible with python2.7 and 3.5+
MIT License
109 stars 27 forks source link

Unable to change port using listen method #75

Open programsounds opened 11 months ago

programsounds commented 11 months ago

The listen method does not seem to change the current port. Please see below for a code snippet where I try to change a port with the changePort method. If defaut=True, I get this error:

RuntimeError: Only one default socket authorized! Please set default=False to other calls to listen()

And, if defaut=False, I just stop receiving messages on the port. Is this a sort of bug, or is there a right way to change port with OSCpy?

OS: macOS 12.6.6 Python: 3.9.16 OSCpy: 0.6.0

from oscpy.server import OSCThreadServer

SERVER_ADDRESS = "127.0.0.1"
PORT = 3000
OSC_ADDRESS = b"/testAddress"

class OSCTest:
    def __init__(self):
        self.server = OSCThreadServer()
        self.socket = self.server.listen(address=SERVER_ADDRESS,
                                         port=PORT, default=True)
        self.server.bind(OSC_ADDRESS, self.handler)

    def handler(self, *data):
        print(data)

    def close(self):
        self.server.stop(self.socket)

    def changePort(self, newPort):
        """Change the server port to a newPort."""
        # Close the current port
        self.server.stop(self.socket)
        # Listen on the new port
        self.socket = self.server.listen(address=SERVER_ADDRESS,
                                         port=newPort, default=False)
        # Re-bind the server to handle incoming OSC messages
        self.server.bind(OSC_ADDRESS, self.handler)