UDP OSC is not suitable for many use cases because:
* The process breaks entirely if vrchat fails to receive the oscquery broadcast packet from the client
* The process breaks entirely if the client fails to receive the oscquery broadcast packet from vrchat
* The process is complicated and not suitable to be implemented by any developer comfortable with a standard TCP connection process
* Getting the initial state from oscquery over http is not atomic, which means you can desync while simultaneously receiving updates from OSC
* The avatar's status isn't even guaranteed to be consistent at all because the UDP OSC packets can be dropped
I propose the following:
* Please open OSC on TCP port 9000 and announce over zeroconf. If 9000 is not available, choose a dynamic fallback port.
* Multiple users should be able to connect to the TCP port simultaneously.
* When a user connects, immediately send them a full OSC packet containing the full current state of the avatar with all keys.
* Allow OSC updates to be sent bidirectionally. VRChat and the OSC client should both be able to send OSC updates through the single TCP socket.