constexpr const char CB_ANNOTATION[] =
R"__dart_cb(
/// Generated by tidlc <VERSION>
+
+// ignore_for_file: public_member_api_docs, omit_local_variable_types
)__dart_cb";
constexpr const char CB_IMPORT[] =
int id = 0;
bool once = false;
int sequenceId = 0;
- Function? callback;
+ Function callback;
static int sequenceNum = 0;
Future<void> onReceivedEvent(Parcel parcel);
@override
Future<void> onReceivedEvent(Parcel parcel) async {
<DELEGATE_PARCEL_READ>
- callback?.call(<DELEGATE_PARAMS>);
+ (callback as <DELEGATE_NAME>)(<DELEGATE_PARAMS>);
}
}
)__dart_cb";
}
}
- Parcel _consumeCommand(Port port) {
- final Parcel parcel = Parcel.fromPort(port);
- final int cmd = parcel.readInt32();
- if (cmd != _MethodId.result.id) {
- print('Received parcel is invalid. $cmd');
- }
-
- return parcel;
- }
-
/// Disposes of registered delegate interface.
void disposeCallback(Function callback) {
_delegates
R"__dart_cb(
late Parcel parcelReceived;
while (true) {
- parcelReceived = _consumeCommand(port);
+ parcelReceived = Parcel.fromPort(port);
+ final int cmd = parcelReceived.readInt32();
+ if (cmd != _MethodId.result.id) {
+ continue;
+ }
final ParcelHeader headerReceived = parcelReceived.header;
if (headerReceived.tag.isEmpty) {
break;
/// This is used when creating a service instance.
typedef ServiceBuilder = ServiceBase Function(String sender, String instance);
+typedef _MethodHandler = Future<void> Function(ServiceBase, Port, Parcel);
+
/// [<INTERFACE_NAME>] class for RPC.
class <INTERFACE_NAME> extends StubBase {
/// Constructor for this class.
/// The indexable collection of [ServiceBase] class.
final List<ServiceBase> services = <ServiceBase>[];
- final Map<int, dynamic> _methodHandlers = <int, dynamic>{};
+ final Map<int, _MethodHandler> _methodHandlers = <int, _MethodHandler>{};
final ServiceBuilder _serviceBuilder;
@override
final Port port = getPort(instance, PortType.main);
final int cmd = parcel.readInt32();
if (_methodHandlers.containsKey(cmd)) {
- await _methodHandlers[cmd](service, port, parcel);
+ await _methodHandlers[cmd]!(service, port, parcel);
}
}
}