basic nostr actors
This commit is contained in:
parent
c14de9c3e9
commit
f1e54f2722
13 changed files with 1081 additions and 2 deletions
42
lib/src/relay_connection.dart
Normal file
42
lib/src/relay_connection.dart
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
import 'dart:async';
|
||||
import 'package:web_socket_channel/web_socket_channel.dart';
|
||||
|
||||
abstract interface class RelayConnection {
|
||||
Future<void> connect();
|
||||
Future<void> send(String message);
|
||||
Stream<String> get messages;
|
||||
Future<void> close();
|
||||
}
|
||||
|
||||
final class WebSocketRelayConnection implements RelayConnection {
|
||||
final String _url;
|
||||
WebSocketChannel? _channel;
|
||||
StreamController<String>? _controller;
|
||||
|
||||
WebSocketRelayConnection(String url) : _url = url;
|
||||
|
||||
@override
|
||||
Future<void> connect() async {
|
||||
_channel = WebSocketChannel.connect(Uri.parse(_url));
|
||||
await _channel!.ready;
|
||||
_controller = StreamController<String>();
|
||||
_channel!.stream.cast<String>().listen(
|
||||
_controller!.add,
|
||||
onError: _controller!.addError,
|
||||
onDone: _controller!.close,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> send(String message) async => _channel!.sink.add(message);
|
||||
|
||||
@override
|
||||
Stream<String> get messages => _controller!.stream;
|
||||
|
||||
@override
|
||||
Future<void> close() async {
|
||||
await _channel?.sink.close();
|
||||
_channel = null;
|
||||
_controller = null;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue