sendRequest method
Send a message and wait for a response.
Implementation
Future<RemoteMessage> sendRequest(
String action,
Map<String, dynamic> payload, {
Duration timeout = const Duration(seconds: 30),
}) async {
if (_state != RemoteSessionState.connected) {
throw StateError('Not connected');
}
final id = _nextMessageId();
final message = RemoteMessage(
id: id,
type: 'request',
action: action,
payload: payload,
timestamp: DateTime.now(),
);
final completer = Completer<RemoteMessage>();
_pendingRequests[id] = completer;
_socket!.add(jsonEncode(message.toJson()));
// Update session info.
_sessionInfo = _sessionInfo?.copyWith(
lastActivity: DateTime.now(),
messageCount: (_sessionInfo?.messageCount ?? 0) + 1,
);
// Timeout.
return completer.future.timeout(
timeout,
onTimeout: () {
_pendingRequests.remove(id);
throw TimeoutException('Request timed out', timeout);
},
);
}