1 | | | import 'dart:async'; |
2 | | |
|
3 | | | import 'package:logger/web.dart'; |
4 | | |
|
5 | | | import '../_impl/xplat/_worker_channel.dart' |
6 | | | if (dart.library.io) '../_impl/native/_worker_channel.dart' |
7 | | | if (dart.library.html) '../_impl/web/_worker_channel.dart' |
8 | | | if (dart.library.js) '../_impl/web/_worker_channel.dart' |
9 | | | if (dart.library.js_interop) '../_impl/web/_worker_channel.dart' as impl; |
10 | | | import '../channel.dart'; |
11 | | | import '../typedefs.dart'; |
12 | | | import 'worker.dart'; |
13 | | | import 'worker_request.dart'; |
14 | | | import 'worker_response.dart'; |
15 | | |
|
16 | | | typedef PostRequest = void Function(WorkerRequest req); |
17 | | |
|
18 | | | /// A [WorkerChannel] supports communication from a platform worker to the |
19 | | | /// client that posted the [WorkerRequest]. It is used to send [WorkerResponse] |
20 | | | /// back to the client. |
21 | | | abstract interface class WorkerChannel { |
22 | | | /// Connects the [Channel] with the Squadron [Worker]. [channelInfo] is an |
23 | | | /// opaque object than can be deserialized as a [Channel]. This method must |
24 | | | /// be called by the worker upon startup. |
25 | | | void connect(PlatformChannel channelInfo); |
26 | | |
|
27 | | | /// Sends a [WorkerResponse] with the specified data to the worker client. |
28 | | | /// This method must be called from the worker only. On Web patforms, this |
29 | | | /// version does not check arguments for transferable objects. |
30 | | | void reply(dynamic data); |
31 | | |
|
32 | | | /// Sends a [WorkerResponse] with the specified data to the worker client. |
33 | | | /// This method must be called from the worker only. On Web patforms, this |
34 | | | /// version checks arguments for transferable objects. |
35 | | | void inspectAndReply(dynamic data); |
36 | | |
|
37 | | | /// Sends a [WorkerResponse.log] with the specified data to the worker |
38 | | | /// client. |
39 | | | void log(LogEvent message); |
40 | | |
|
41 | | | /// Checks if [stream] can be streamed back to the worker client. |
42 | | | bool canStream(Stream<dynamic> stream); |
43 | | |
|
44 | | | /// Sends a [WorkerResponse.closeStream] to the worker client. |
45 | | | void closeStream(); |
46 | | |
|
47 | | | /// Sends a [WorkerResponse] with the specified error to the worker client. |
48 | | | void error(Object err, [StackTrace? stacktrace, int? command]); |
49 | | |
|
50 | | | /// Deserializes a [Channel] from an opaque [channelInfo]. |
51 | | 10 | static WorkerChannel? deserialize(PlatformChannel? channelInfo, |
52 | | | [Logger? logger]) => |
53 | | 10 | impl.deserialize(channelInfo, logger); |
54 | | | } |