main function
void
main()
Implementation
void main() {
final controller = PowerSyncAsyncSqliteController();
final connector = PowerSyncWorkerConnector(Uri.base);
final messagesForDatabaseWorker = StreamController<MessageEvent>(sync: true);
WebSqlite.workerEntrypoint(
controller: controller,
environment: _Environment(connector, messagesForDatabaseWorker.stream),
);
if (_isSharedWorker) {
final syncWorker = SyncWorker();
void handleMessage(MessageEvent event) {
final message = event.data as SharedWorkerMessage;
if (message.isForSyncWorker) {
syncWorker.trackPort(message.message as MessagePort);
} else {
messagesForDatabaseWorker.add(
MessageEvent(
'message',
MessageEventInit(data: message.message),
),
);
}
}
void handlePort(MessagePort port) {
port.start();
EventStreamProviders.messageEvent.forTarget(port).listen(handleMessage);
}
EventStreamProviders.connectEvent
.forTarget(globalContext as SharedWorkerGlobalScope)
.listen((event) {
for (final port in (event as MessageEvent).ports.toDart) {
handlePort(port);
}
});
} else {
EventStreamProviders.messageEvent
.forTarget(globalContext as DedicatedWorkerGlobalScope)
.listen(messagesForDatabaseWorker.add);
}
}