From de7e624fa376469d430fb62fd9bfe2c0c27d2a9f Mon Sep 17 00:00:00 2001 From: vishalxl <> Date: Mon, 8 Aug 2022 02:22:46 +0530 Subject: [PATCH] Rather than WebSocket based on dart.io, used web_socket_channel , which is an official dart package for cross-platform WebSockets --- bin/nostr_console.dart | 13 +++++++------ lib/relays.dart | 30 ++++++++++++++++-------------- pubspec.yaml | 1 + 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/bin/nostr_console.dart b/bin/nostr_console.dart index 180c66c..4ae2bf2 100644 --- a/bin/nostr_console.dart +++ b/bin/nostr_console.dart @@ -12,7 +12,7 @@ const request = "request"; void printEventsAsTree(events) { if( events.length == 0) { - stdout.write("events length = 0\n"); + print("events length = 0"); return; } events.removeWhere( (item) => item.eventData.kind != 1 ); @@ -34,13 +34,9 @@ Future main(List arguments) async { List events = []; int numEvents = 6; - String requestString = ""; - //final parser = ArgParser()..addFlag(request, negatable: false, abbr: 'r')..addOption(request); final parser = ArgParser()..addOption(request, abbr: 'r'); - ArgResults argResults = parser.parse(arguments); - if( argResults[request] != null) { stdout.write("got argument request ${argResults[request]}"); sendRequest("wss://nostr-pub.wellorder.net", argResults[request], events); @@ -51,6 +47,11 @@ Future main(List arguments) async { return; } + + // the default in case no arguments are given is: + // get a user's events, then from its type 3 event, gets events of its follows, + // then get the events of user-id's mentioned in p-tags of received events + // then display them all getUserEvents(defaultServerUrl, userPublickey, events, numEvents); print('waiting for user events to come in'); @@ -70,7 +71,7 @@ Future main(List arguments) async { print('====================all events ================='); List pTags = getpTags(events); - stdout.write("Total number of pTags = ${pTags.length}\n"); + print("Total number of pTags = ${pTags.length}\n"); for(int i = 0; i < pTags.length; i++) { getUserEvents( defaultServerUrl, pTags[i], events, 10); diff --git a/lib/relays.dart b/lib/relays.dart index 919c9be..30ad7ab 100644 --- a/lib/relays.dart +++ b/lib/relays.dart @@ -2,6 +2,9 @@ import 'dart:io'; import 'package:nostr_console/nostr_console_ds.dart'; +import 'package:web_socket_channel/io.dart'; +import 'package:web_socket_channel/status.dart' as status; + int getLatestNum = 2; String getSubscriptionRequest(String publicKey, int numUserEvents) { @@ -18,15 +21,15 @@ void handleSocketError() { * @class Relays Contains connections to all relays. */ class Relays { - Map > relays; + Map relays; List users; // is used to that duplicate requests aren't sent for same user Relays(this.relays, this.users); factory Relays.relay(String relay) { - Future fws = WebSocket.connect(relay); + IOWebSocketChannel fws = IOWebSocketChannel.connect(relay); print('In Relay.relay: connecting to relay $relay'); - Map> r = Map(); + Map r = Map(); r[relay] = fws; return Relays(r, []); } @@ -50,7 +53,7 @@ class Relays { void sendRequest(String relay, String request, List events) { - Future? fws; + IOWebSocketChannel? fws; if(relays.containsKey(relay)) { fws = relays[relay]; } @@ -58,10 +61,9 @@ class Relays { print('connecting to $relay'); try { - fws = WebSocket.connect(relay); + fws = IOWebSocketChannel.connect(relay); relays[relay] = fws; - fws.then((WebSocket ws) { - ws.listen( + fws.stream.listen( (d) { //print(d); Event e; @@ -76,27 +78,27 @@ class Relays { } }, onError: (e) { print("error"); print(e); }, - onDone: () { print('in onDone'); ws.close() ; } - );}).catchError((err) { - print('Error: Could not connect to $relay'); + onDone: () { print('in onDone'); } + ); + //print('Error: Could not connect to $relay'); //throw Exception('Some arbitrary error'); - }); + } on WebSocketException { print('WebSocketException exception'); return; } catch(e) { - print('exception generic'); + print('exception generic $e'); return; } } print('sending request: $request to $relay'); - fws?.then((WebSocket ws) { ws.add(request); }); + fws?.sink.add(request); } - Future? getWS(String relay) { + IOWebSocketChannel? getWS(String relay) { return relays[relay]; } diff --git a/pubspec.yaml b/pubspec.yaml index e1a8cf4..4d610b2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -14,3 +14,4 @@ dev_dependencies: test: ^1.16.0 dependencies: args: ^2.3.1 + web_socket_channel: ^2.2.0