colinbdclark / osc.js-examples

Sample code illustrating how to use osc.js in a variety of scenarios.
104 stars 28 forks source link

osc.WebSocket connection failed from other endpoint in the same network #23

Closed KonVas closed 1 year ago

KonVas commented 1 year ago

I am following this example in my app running using Express and WebSockets to establish bi-directional communication with browser <-> server <-> supercollider and works fine when my endpoint(s) are on the same computer. Still, I am trying to access the app from a remote computer in the same network using the host's remote IP 192.168.1.102:8081 when opening a browser window but it returns this message: WebSocket connection to ws://localhost:8081 failed osc-browser.min.js:813

When I am omitting the IP in the client code with 192.168.1.102 (host IP) it works just fine.

//server.js
var udpPort = new osc.UDPPort({
    localAddress: "0.0.0.0",
    localPort: 57121,
    remoteAddress: "127.0.0.1",
    remotePort: 57120
});

const wss = new WebSocket.Server({
    port:8081
});

wss.on("connection", function (socket) {
    console.log("A Web Socket connection has been established!");
    var socketPort = new osc.WebSocketPort({
        socket: socket
    });
    /*relaying from socketport to udp,
      server hits back OSC from SC to browser
      [Browser(WBsocks) <--> UDP <--> SC]*/
    var relay = new osc.Relay(udpPort, socketPort, {
        raw: true
    });
});

//index.js
var oscPort = new osc.WebSocketPort({
  url: "ws://192.168.1.102:8081"
});

But that means I will always need to get the host's remote IP and omit it in my code, not ideal but it works this way.

A question might be worthy of squeezing it here, I am not sure this is covered but is it possible to bind osc.WebSocket Port in the same Port of the app, that is express app accessed on 8000? T

Tried some ways to do that but it won't work, some examples might come in handy. Something like this doesn't work at this point:


//server.js
var osc = require('osc'),
    WebSocket = require('ws');

let server = httpServer.listen(8000, () => {
    console.info(`App listening on port ${8000}`)
})

const wss = new WebSocket.Server({
    server: server
});

wss.on("connection", function (socket) {
    console.log("A Web Socket connection has been established!");
    var socketPort = new osc.WebSocketPort({
        socket: socket
    });
    /*relaying from socketport to udp,
      server hits back OSC from SC to browser
      [Browser(WBsocks) <--> UDP <--> SC]*/
    var relay = new osc.Relay(udpPort, socketPort, {
        raw: true
    });
});

//Index.js
var oscPort = new osc.WebSocketPort({
  url: "ws://localhost:8000"
});
gilfuser commented 1 year ago

Hi @KonVas Could you show your browser part, please? I'm trying to do something similar, but when I try to send a message from the browser the server crashes and I get this long error message:

node:events:491
      throw er; // Unhandled 'error' event
      ^

TypeError: Cannot read properties of undefined (reading 'writer')
    at osc.writeArgument (/home/skmecs/deslugarejo/node_modules/osc/src/osc.js:762:46)
    at osc.collectArguments (/home/skmecs/deslugarejo/node_modules/osc/src/osc.js:792:34)
    at osc.collectMessageParts (/home/skmecs/deslugarejo/node_modules/osc/src/osc.js:845:20)
    at osc.writeMessage (/home/skmecs/deslugarejo/node_modules/osc/src/osc.js:863:33)
    at osc.writePacket (/home/skmecs/deslugarejo/node_modules/osc/src/osc.js:985:24)
    at p.encodeOSC (/home/skmecs/deslugarejo/node_modules/osc/src/osc-transports.js:70:27)
    at p.send (/home/skmecs/deslugarejo/node_modules/osc/src/osc-transports.js:56:28)
    at osc.WebSocketPort.listener (/home/skmecs/deslugarejo/node_modules/osc/src/osc-transports.js:143:28)
    at osc.WebSocketPort.emit (node:events:513:28)
    at p.decodeOSC (/home/skmecs/deslugarejo/node_modules/osc/src/osc-transports.js:84:18)
Emitted 'error' event on  instance at:
    at p.decodeOSC (/home/skmecs/deslugarejo/node_modules/osc/src/osc-transports.js:87:18)
    at osc.WebSocketPort.emit (node:events:513:28)
    at socket.onmessage (/home/skmecs/deslugarejo/node_modules/osc/src/platforms/osc-websocket-client.js:58:18)
    at callListener (/home/skmecs/deslugarejo/node_modules/ws/lib/event-target.js:290:14)
    at WebSocket.onMessage (/home/skmecs/deslugarejo/node_modules/ws/lib/event-target.js:209:9)
    at WebSocket.emit (node:events:513:28)
    at Receiver.receiverOnMessage (/home/skmecs/deslugarejo/node_modules/ws/lib/websocket.js:1180:20)
    at Receiver.emit (node:events:513:28)
    at Receiver.dataMessage (/home/skmecs/deslugarejo/node_modules/ws/lib/receiver.js:526:14)
    at Receiver.getData (/home/skmecs/deslugarejo/node_modules/ws/lib/receiver.js:459:17)
colinbdclark commented 1 year ago

Closing due to lack of reproducible test cases or sufficiently clear examples of the issue.