Rather than WebSocket based on dart.io, used web_socket_channel , which is an official dart package for cross-platform WebSockets

This commit is contained in:
vishalxl 2022-08-08 02:22:46 +05:30
parent 572d64aca7
commit de7e624fa3
3 changed files with 24 additions and 20 deletions

View File

@ -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<void> main(List<String> arguments) async {
List<Event> 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<void> main(List<String> 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<void> main(List<String> arguments) async {
print('====================all events =================');
List<String> 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);

View File

@ -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<String, Future<WebSocket> > relays;
Map<String, IOWebSocketChannel > relays;
List<String> users; // is used to that duplicate requests aren't sent for same user
Relays(this.relays, this.users);
factory Relays.relay(String relay) {
Future<WebSocket> fws = WebSocket.connect(relay);
IOWebSocketChannel fws = IOWebSocketChannel.connect(relay);
print('In Relay.relay: connecting to relay $relay');
Map<String, Future<WebSocket>> r = Map();
Map<String, IOWebSocketChannel> r = Map();
r[relay] = fws;
return Relays(r, []);
}
@ -50,7 +53,7 @@ class Relays {
void sendRequest(String relay, String request, List<Event> events) {
Future<WebSocket>? 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<WebSocket>? getWS(String relay) {
IOWebSocketChannel? getWS(String relay) {
return relays[relay];
}

View File

@ -14,3 +14,4 @@ dev_dependencies:
test: ^1.16.0
dependencies:
args: ^2.3.1
web_socket_channel: ^2.2.0