dev
dart 57 lines 1.31 KB
Raw
1 import 'dart:async';
2 import 'dart:typed_data';
3
4 import 'package:cw_core/utils/print_verbose.dart';
5 import 'package:cw_core/utils/proxy_socket/abstract.dart';
6 import 'package:socks_socket/socks_socket.dart';
7
8 class ProxySocketSocks implements ProxySocket {
9 final SOCKSSocket socket;
10 bool isClosed = false;
11 ProxySocketSocks(this.socket);
12
13 @override
14 ProxyAddress get address => ProxyAddress(host: socket.proxyHost, port: socket.proxyPort);
15
16 @override
17 Future<void> close() async {
18 try {
19 if (isClosed) return;
20 isClosed = true;
21 await socket.close();
22 } catch (e) {
23 printV("ProxySocketSocks: close: $e");
24 return;
25 }
26 }
27
28 @override
29 void destroy() => close();
30
31 @override
32 void write(String data) {
33 try {
34 if (isClosed) {
35 printV("ProxySocketSocks: write: socket is closed");
36 return;
37 }
38 socket.write(data);
39 } catch (e) {
40 printV("ProxySocketSocks: write: $e");
41 return;
42 }
43 }
44
45 @override
46 StreamSubscription<List<int>> listen(Function(Uint8List event) onData,
47 {Function(Object error)? onError, Function()? onDone, bool cancelOnError = true}) {
48 return socket.listen(
49 (data) {
50 onData(Uint8List.fromList(data));
51 },
52 onError: onError,
53 onDone: onDone,
54 cancelOnError: cancelOnError,
55 );
56 }
57 }