start method
Start listening for incoming clients.
Implementation
@override
void start() {
receivePort.listen((data) {
if (data is SendPort) {
var id = _uuid.v4();
_clients[id] = data;
data.send(MessageHandler().encodeSendPortResponseMessage(id));
} else if (data is Map<String, Object?>) {
var (id, method, requestId, params) = MessageHandler()
.decodeRequestMessage(data);
var (clientId, eventName, subscriptionId, value) = MessageHandler()
.decodeRequestParams(params);
var sp = _clients[id];
if (sp == null) {
// There's nobody to respond to, so don't send anything to anyone
return;
}
if (method == 'publish') {
if (eventName == null || value == null) {
sp.send(MessageHandler().encodePublishResponseError(requestId));
}
var rq = _IsolatePublishRequestImpl(
requestId,
clientId,
eventName,
value,
sp,
);
_onPublish.add(rq);
} else if (method == 'subscribe') {
if (eventName == null) {
sp.send(
MessageHandler().encodeSubscriptionResponseError(requestId),
);
}
var rq = _IsolateSubscriptionRequestImpl(
clientId,
eventName,
sp,
requestId,
_uuid,
);
_onSubscribe.add(rq);
} else if (method == 'unsubscribe') {
if (subscriptionId == null) {
sp.send(
MessageHandler().encodeUnsubscriptionResponseError(requestId),
);
}
var rq = _IsolateUnsubscriptionRequestImpl(
clientId,
subscriptionId,
sp,
requestId,
);
_onUnsubscribe.add(rq);
} else {
sp.send(
MessageHandler().encodeUnknownMethodResponseError(
requestId,
method,
),
);
}
}
});
}