registerHost method
Register this host with the relay.
Implementation
Future<String> registerHost({
required String displayName,
Map<String, dynamic>? capabilities,
}) async {
_socket = await WebSocket.connect(
relayUrl,
headers: {if (relayToken != null) 'Authorization': 'Bearer $relayToken'},
);
final registrationId = 'host_${DateTime.now().millisecondsSinceEpoch}';
_socket!.add(
jsonEncode({
'type': 'register',
'hostId': registrationId,
'displayName': displayName,
'capabilities': capabilities ?? {},
}),
);
// Start heartbeat.
_heartbeatTimer = Timer.periodic(const Duration(seconds: 30), (_) {
_socket?.add(jsonEncode({'type': 'heartbeat', 'hostId': registrationId}));
});
_socket!.listen(
(data) {
try {
final message = RemoteMessage.fromJson(
jsonDecode(data as String) as Map<String, dynamic>,
);
_eventController.add(RemoteMessageReceived(message));
} catch (_) {}
},
onDone: () {
_eventController.add(
const RemoteDisconnected('relay', 'Relay disconnected'),
);
},
);
return registrationId;
}