dev
dart 74 lines 1.71 KB
Raw
1 import 'dart:async';
2 import 'dart:io';
3 import 'dart:typed_data';
4
5 import 'package:cw_core/utils/print_verbose.dart';
6 import 'package:cw_core/utils/proxy_socket/abstract.dart';
7
8 class ProxySocketSecure implements ProxySocket {
9 final SecureSocket socket;
10
11 bool isClosed = false;
12
13 ProxySocketSecure(this.socket);
14
15 ProxyAddress get address =>
16 ProxyAddress(host: socket.remoteAddress.host, port: socket.remotePort);
17
18 @override
19 Future<void> close() async {
20 try {
21 if (isClosed) return;
22 isClosed = true;
23 return socket.close();
24 } catch (e) {
25 printV("ProxySocketSecure: close: $e");
26 return;
27 }
28 }
29
30 @override
31 void destroy() async {
32 try {
33 if (isClosed) return;
34 isClosed = true;
35 socket.destroy();
36 } catch (e) {
37 printV("ProxySocketSecure: destroy: $e");
38 return;
39 }
40 }
41
42 @override
43 void write(String data) {
44 runZonedGuarded(() {
45 try {
46 if (isClosed) {
47 printV("ProxySocketSecure: write: socket is closed");
48 return;
49 }
50
51 socket.write(data);
52 } catch (e) {
53 // Catches synchronous errors
54 printV("ProxySocketSecure: write (sync error): $e");
55 }
56 }, (e, stack) {
57 // Catches asynchronous errors (like the Bad State from the StreamConsumer)
58 printV("ProxySocketSecure: write (async error): $e");
59 });
60 }
61
62 @override
63 StreamSubscription<List<int>> listen(Function(Uint8List event) onData,
64 {Function(Object error)? onError, Function()? onDone, bool cancelOnError = true}) {
65 return socket.listen(
66 (data) {
67 onData(Uint8List.fromList(data));
68 },
69 onError: onError,
70 onDone: onDone,
71 cancelOnError: cancelOnError,
72 );
73 }
74 }