OpenHPS/openhps-rest

View on GitHub
src/server/nodes/source/RESTServerSource.ts

Summary

Maintainability
C
1 day
Test Coverage
import { DataFrame, SourceNode, ModelBuilder, Edge } from '@openhps/core';
import { RESTServerNode } from '../RESTServerNode';
import { ServerOptions } from '../ServerOptions';

/**
 * @category Server
 */
export class RESTServerSource<Out extends DataFrame> extends SourceNode<Out> {
    private _remoteNode: RESTServerNode<Out, Out>;

    constructor(options: ServerOptions, outputType?: new () => Out) {
        super(options);
        this._remoteNode = new RESTServerNode<Out, Out>(options, outputType);

        this.once('build', this._onRemoteBuild.bind(this));
    }

    private _onRemoteBuild(graphBuilder: ModelBuilder<any, any>): Promise<boolean> {
        // Add a remote node before this node
        this._remoteNode.graph = this.graph;
        this._remoteNode.logger = this.logger;
        graphBuilder.addNode(this._remoteNode);
        graphBuilder.addEdge(new Edge(this._remoteNode, this));
        return this._remoteNode.emitAsync('build', graphBuilder);
    }

    public onPull(): Promise<Out> {
        return new Promise((resolve, reject) => {
            this._remoteNode
                .pull()
                .then(() => {
                    resolve(undefined);
                })
                .catch(reject);
        });
    }
}