tarsier_websocket_server 0.0.1
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!',
});
});
}