tarsier_websocket_server 0.0.1 copy "tarsier_websocket_server: ^0.0.1" to clipboard
tarsier_websocket_server: ^0.0.1 copied to clipboard

WebSocket server package for Flutter with Pusher-like functionality and a dashboard built-in.

example/main.dart

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:tarsier_websocket_server/tarsier_websocket_server.dart';

void main() async {
  // Initialize WebSocket server
  final server = WebSocketServer();

  // Generate a default app key for testing
  final defaultAppKey = server.generateAppKey(
    name: 'Default App',
    description: 'Default app key for testing',
    validity: Duration(days: 365), // Valid for 1 year
    allowedIps: ['*'], // Allow all IPs
    allowedOrigins: ['*'], // Allow all origins
    maxConnections: 1000,
  );

  debugPrint('🔑 Default App Key: ${defaultAppKey?.key}');

  // Type-safe status change callback
  server.onStatusChanged = (ServerStatus status) {
    debugPrint('🎯 Status Updated:');
    debugPrint('  Running: ${status.isRunning}');
    debugPrint('  Active Connections: ${status.activeConnections}');
    debugPrint('  Total Messages: ${status.totalMessages}');
    debugPrint('  Uptime: ${status.uptimeSeconds} seconds');
    debugPrint('  Memory: ${status.memoryUsageMB.toStringAsFixed(2)} MB');
    debugPrint('  Timestamp: ${status.timestamp}');
    debugPrint('---');
  };

  // Server event callback
  server.onServerEvent = (ServerEvent event) {
    debugPrint('📢 Server Event: ${event.type.name} - ${event.message}');

    if (event.type == ServerEventType.clientConnected) {
      debugPrint('   Client ID: ${event.clientId}');
      debugPrint('   App Key: ${event.appKey}');
    }

    if (event.type == ServerEventType.error) {
      debugPrint('   Error Code: ${event.errorCode}');
      debugPrint('   Details: ${event.errorDetails}');
    }
  };

  // Start server with status monitoring every 10 seconds
  await server.start(port: 3000, statusCheckInterval: 10);

  // Get current status
  final currentStatus = server.getStatus();
  debugPrint('Current Status: $currentStatus');

  // Get status as JSON
  final statusJson = currentStatus.toJson();
  debugPrint('Status JSON: $statusJson');

  // Trigger manual status update
  server.triggerStatusUpdate();

  // Get status trends (last 5 minutes)
  final trends = server.getStatusTrends(period: Duration(minutes: 5));
  debugPrint('Status Trends: $trends');

  // Start the server with app key authentication enabled
  await server.start(
    port: 3000,
    enableDashboard: true,
    requireAppKey: true, // Enable app key authentication
  );

  // Set up callbacks
  server.onClientConnected = (clientId, appKey) {
    debugPrint('Client connected: $clientId with app key: $appKey');
  };
  server.onMessageReceived = (message) {
    debugPrint('Message received: ${message.event} from ${message.clientId}');
  };

  // (Optional) Run dashboard
  runApp(WebSocketDashboard(server: server, title: 'My WebSocket Server'));

  // Example: Broadcast a message every 10 seconds
  Timer.periodic(const Duration(seconds: 10), (timer) {
    server.broadcast('server_time', {
      'timestamp': DateTime.now().toIso8601String(),
      'message': 'Hello from server!',
    });
  });
}
0
likes
60
points
12
downloads
screenshot

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

WebSocket server package for Flutter with Pusher-like functionality and a dashboard built-in.

Repository (GitHub)
View/report issues

Topics

#tarsier #websocket #server #pusher

License

MIT (license)

Dependencies

flutter, intl, provider, shared_preferences, sprintf, uuid

More

Packages that depend on tarsier_websocket_server