Skip to content
Snippets Groups Projects
Select Git revision
  • c7a586d0f892cb3e8ed8c08b15f3a30506d9cef5
  • master default protected
  • spilo-wale-removal
  • dependabot/go_modules/golang.org/x/oauth2-0.27.0
  • bug-upgrade
  • gh-pages
  • patroni-4-integration
  • remove-zappr
  • ignore-auto-upgrade
  • arm-pooler
  • update-go-and-deps
  • pluralsh-liveness-probe
  • silenium-dev-master
  • bump-v1.9.1
  • enable-query-logging
  • bump-v1.7.1
  • resize-mixed-mode
  • instance-annotation
  • bump-v1.8.2
  • clone-bucket-prefix
  • bump-v1.8.1
  • v1.14.0
  • v1.13.0
  • v1.12.2
  • v1.12.1
  • v1.12.0
  • v1.11.0
  • v1.10.1
  • v1.10.0
  • v1.9.0
  • v1.8.2
  • v1.8.1
  • v1.8.0
  • v1.7.1
  • v1.7.0
  • v1.6.3
  • v1.6.2
  • v1.6.1
  • v1.6.0
  • v1.5.0
  • v1.4.0
41 results

k8sres.go

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;
        }
    }