Skip to content

Hooks

Using WebSocket hooks API, you can define a WebSocket server that works across runtimes with same synax.


Spry WebSocket provides a cross-platform API to define WebSocket servers. An implementation with these hooks works across runtimes without needing you to go into details of any of them (while you always have the power to control low-level hooks). You can only define the life-cycle hooks that you only need and only those will be called on runtime.

WARNING

Spry WebSocket API is still under development and can change.

dart
import 'package:spry/websocket.dart';

class MyHooks implements Hooks {
  @override
  FutureOr fallback(Event event) {
    // If the platform does not support WebSocket or the upgrade fails,
    // it will be called.
    print('[ws] Not support.');
    return const Response(null, status: 426);
  }

  @override
  FutureOr<void> onClose(Peer peer, {int? code, String? reason}) {
    // Received a hook from a connected client or actively closed the websocket
    // call on the server side.
    print('[ws] close');
  }

  @override
  FutureOr<void> onError(Peer peer, error) {
    // Hook for errors from the server side.
    print('[ws] error: ${Error.safeToString(error)}');
  }

  @override
  FutureOr<void> onMessage(Peer peer, Message message) {
    // Hook when receiving messages from connected clients.
    final text = message.text();
    print('[ws] message: $text');

    if (text.contains('ping')) {
      peer.sendText('pong');
    }
  }

  @override
  FutureOr<CreatePeerOptions> onUpgrade(Event event) {
    // Called when upgrading request to WebSocket
    return CreatePeerOptions(...);
  }
}

Released under the MIT License.