thomasfredericks / OscBridge

A bridge between Serial SLIP, OSC UDP and OSC WebSocket
0 stars 0 forks source link

Split engine from UI (with websockets) #4

Closed thomasfredericks closed 5 months ago

thomasfredericks commented 5 months ago

You can connect to a served webpage and change the status

thomasfredericks commented 5 months ago

https://www.electronjs.org/docs/latest/api/browser-window

thomasfredericks commented 5 months ago

To route or discriminate between different WebSocket message types, you can define a protocol for your messages where each message includes a type field. Then, on the server-side, you can parse incoming messages and handle them differently based on their type.

Here's how you can modify the WebSocket server to handle different message types:

// Import the 'ws' module
const WebSocket = require('ws');

// Create a WebSocket server instance
const wss = new WebSocket.Server({ port: 8080 });

// Event listener for when a client connects to the server
wss.on('connection', function connection(ws) {
  console.log('A client connected');

  // Event listener for when the server receives a message from a client
  ws.on('message', function incoming(message) {
    console.log('Received: %s', message);

    // Parse the incoming message as JSON
    const data = JSON.parse(message);

    // Switch statement to handle different message types
    switch (data.type) {
      case 'chat':
        handleChatMessage(ws, data.payload);
        break;
      case 'status':
        handleStatusMessage(ws, data.payload);
        break;
      // Add more cases for different message types as needed
      default:
        console.log('Unknown message type:', data.type);
    }
  });

  // Event listener for when a client disconnects from the server
  ws.on('close', function close() {
    console.log('A client disconnected');
  });
});

// Function to handle chat messages
function handleChatMessage(ws, payload) {
  // Broadcast the chat message to all clients
  wss.clients.forEach(function each(client) {
    if (client !== ws && client.readyState === WebSocket.OPEN) {
      client.send(JSON.stringify({
        type: 'chat',
        payload: payload
      }));
    }
  });
}

// Function to handle status messages
function handleStatusMessage(ws, payload) {
  // Log the status message
  console.log('Status:', payload);
}

In this example, each incoming message is parsed as JSON, and then the type field is used to determine how to handle the message. Depending on the type, the server calls different functions (handleChatMessage and handleStatusMessage) to process the message payload.

You can define your message types and corresponding payload structures according to your application's needs. Make sure that both the client and server agree on the message format and types to ensure proper communication.