start method
Implementation
void start({ProtocolMessageHandler? onMessage, void Function()? onDone, void Function(Object? error)? onError}) {
if (_sendLoop != null) {
throw StateError('protocol already started');
}
if (onMessage != null) {
addHandler('*', onMessage);
}
_open = true;
channel.start(
onDataReceived,
onDone: () {
_setCloseState(kind: ProtocolCloseKind.server);
_shutdown();
if (!_done.isCompleted) {
_done.complete(null);
}
onDone?.call();
},
onError: (Object? error) {
_setCloseState(kind: ProtocolCloseKind.error, reason: error?.toString());
_shutdown();
if (!_done.isCompleted) {
_done.complete(error);
}
onError?.call(error);
},
);
_sendLoop = _runSendLoop();
}