Skip to content
Snippets Groups Projects
Select Git revision
  • 399d2f424824b97a5ac1bb30e6bb19439326aaa8
  • main default protected
  • renovate/github.com-prometheus-common-0.x
  • renovate/github.com-prometheus-client_golang-1.x
  • renovate/kubernetes-go
  • renovate/cloudflare-5.x
  • renovate/docker.io-library-nextcloud-31.x
  • renovate/docker.io-bitnamilegacy-kubectl-1.x
  • renovate/quay.io-shivering-isles-shelly-action-exporter-1.x
  • renovate/hcloud-exporter-4.x
  • renovate/docker.io-library-nextcloud-30.x
  • renovate/docker.io-syncthing-syncthing-2.x
  • renovate/gcr.io-projectsigstore-cosign-2.x
  • renovate/siderolabs-kubelet-1.x
  • renovate/siderolabs-kubelet-1.33.x
  • renovate/kubernetes-kubernetes-1.x
  • renovate/docker.io-library-debian-13.x
  • renovate/docker.io-library-debian-12.x
  • renovate/mikefarah-yq-4.x
  • renovate/quay.io-shivering-isles-koolbox-2025.x
  • renovate/go-1.x
  • v25.09
  • v25.08
  • v25.07
  • v25.06
  • v25.05
  • v25.04
  • v25.03
  • v25.02
  • v25.01
  • v24.12
  • v24.11
  • v24.10
  • v24.09
  • v24.08
  • v24.07
  • v24.06
  • v24.05
  • v24.04
  • v24.03
  • v24.02
41 results

postgresql-database.json

Blame
  • WorkerManager.ts 1.20 KiB
    /*
    Copyright 2024 New Vector Ltd.
    Copyright 2022 The Matrix.org Foundation C.I.C.
    
    SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
    Please see LICENSE files in the repository root for full details.
    */
    
    import { defer, IDeferred } from "matrix-js-sdk/src/utils";
    
    import { WorkerPayload } from "./workers/worker";
    
    export class WorkerManager<Request extends {}, Response> {
        private readonly worker: Worker;
        private seq = 0;
        private pendingDeferredMap = new Map<number, IDeferred<Response>>();
    
        public constructor(worker: Worker) {
            this.worker = worker;
            this.worker.onmessage = this.onMessage;
        }
    
        private onMessage = (ev: MessageEvent<Response & WorkerPayload>): void => {
            const deferred = this.pendingDeferredMap.get(ev.data.seq);
            if (deferred) {
                this.pendingDeferredMap.delete(ev.data.seq);
                deferred.resolve(ev.data);
            }
        };
    
        public call(request: Request): Promise<Response> {
            const seq = this.seq++;
            const deferred = defer<Response>();
            this.pendingDeferredMap.set(seq, deferred);
            this.worker.postMessage({ seq, ...request });
            return deferred.promise;
        }
    }