WebSocket Gids

Welkom bij de Finch WebSocket Gids! Deze gids legt uit hoe je WebSocket gebruikt in je Finch-applicatie. Finch biedt ondersteuning en handige hulpmiddelen voor real-time applicaties.

WebSocket gebruiken in Finch

Voor het definiëren van WebSocket-routes in Finch gebruik je de SocketManager klasse. Deze klasse beheert WebSocket-verbindingen en je kunt addSocketRoute gebruiken om routes toe te voegen. Gebruik vervolgens een socketController om de verbindingen af te handelen.

SocketManager

De SocketManager klasse beheert verbindingen. Een voorbeeld:

final socketManager = SocketManager(
  app,
  event: SocketEvent(
    onConnect: (socket) {
      app.socketManager?.sendToAll(
        "New user connected! count: ${app.socketManager?.countClients}",
        path: "output",
      );
      socket.send(
        {'message': 'Soccuess connect to socket!'},
        path: 'connected',
      );
    },
    onMessage: (socket, data) {},
    onDisconnect: (socket) {
      var count = app.socketManager?.countClients ?? 0;
      app.socketManager?.sendToAll(
        "User disconnected! count: ${count - 1}",
        path: "output",
      );
    },
  ),
  routes: getSocketRoute(),
);

SocketEvent

SocketEvent definieert gebeurtenissen in een WebSocket-verbinding. Voorbeeld:

  'time': SocketEvent(
      onMessage: (socket, data) {
        socket.send(DateTime.now().toString(), path: 'output');
      },
    ),

WebSocket Route

WebSocket-routes definieer je in getSocketRoute() die een Map<String, SocketEvent> retourneert:

Map<String, SocketEvent> getSocketRoute() {
  return {
    'test': SocketEvent(
      onMessage: (socket, data) {
        socket.send([socket.rq.headers], path: 'test');
      },
    ),
  };
}

Socket routes toevoegen aan FinchApp

getSocketRoute() retourneert een Map<String, SocketEvent> en voeg je toe aan FinchApp met addSocketRoute().

Voorbeeld controller:

class SocketController exatends Controller {
  Future<String> socket() async {
    await socketManager.requestHandle(rq);
    return rq.renderSocket();
  }
}

En route:

FinchRoute(
    key: 'root.ws',
    path: '/ws',
    methods: Methods.ALL,
    index: socketController.socket,
),