Hook up shared process sorta
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
import { ReadWriteConnection, InitData, OperatingSystem } from "../common/connection";
|
||||
import { ReadWriteConnection, InitData, OperatingSystem, ISharedProcessData } from "../common/connection";
|
||||
import { NewEvalMessage, ServerMessage, EvalDoneMessage, EvalFailedMessage, TypedValue, ClientMessage, NewSessionMessage, TTYDimensions, SessionOutputMessage, CloseSessionInputMessage, WorkingInitMessage, NewConnectionMessage } from "../proto";
|
||||
import { Emitter } from "@coder/events";
|
||||
import { Emitter, Event } from "@coder/events";
|
||||
import { logger, field } from "@coder/logger";
|
||||
import { ChildProcess, SpawnOptions, ServerProcess, ServerSocket, Socket } from "./command";
|
||||
|
||||
@ -19,17 +19,17 @@ export class Client {
|
||||
private readonly connections: Map<number, ServerSocket> = new Map();
|
||||
|
||||
private _initData: InitData | undefined;
|
||||
private initDataEmitter: Emitter<InitData> = new Emitter();
|
||||
private initDataEmitter = new Emitter<InitData>();
|
||||
private initDataPromise: Promise<InitData>;
|
||||
|
||||
private sharedProcessActiveEmitter = new Emitter<ISharedProcessData>();
|
||||
|
||||
/**
|
||||
* @param connection Established connection to the server
|
||||
*/
|
||||
public constructor(
|
||||
private readonly connection: ReadWriteConnection,
|
||||
) {
|
||||
this.initDataEmitter = new Emitter();
|
||||
|
||||
connection.onMessage((data) => {
|
||||
try {
|
||||
this.handleMessage(ServerMessage.deserializeBinary(data));
|
||||
@ -47,6 +47,10 @@ export class Client {
|
||||
return this.initDataPromise;
|
||||
}
|
||||
|
||||
public get onSharedProcessActive(): Event<ISharedProcessData> {
|
||||
return this.sharedProcessActiveEmitter.event;
|
||||
}
|
||||
|
||||
public evaluate<R>(func: () => R | Promise<R>): Promise<R>;
|
||||
public evaluate<R, T1>(func: (a1: T1) => R | Promise<R>, a1: T1): Promise<R>;
|
||||
public evaluate<R, T1, T2>(func: (a1: T1, a2: T2) => R | Promise<R>, a1: T1, a2: T2): Promise<R>;
|
||||
@ -315,6 +319,10 @@ export class Client {
|
||||
}
|
||||
c.emit("end");
|
||||
this.connections.delete(message.getConnectionFailure()!.getId());
|
||||
} else if (message.hasSharedProcessActive()) {
|
||||
this.sharedProcessActiveEmitter.emit({
|
||||
socketPath: message.getSharedProcessActive()!.getSocketPath(),
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
import * as net from "net";
|
||||
import { Client } from '../client';
|
||||
import { Client } from "../client";
|
||||
|
||||
type NodeNet = typeof net;
|
||||
|
||||
@ -24,6 +24,7 @@ export class Net implements NodeNet {
|
||||
throw new Error("not implemented");
|
||||
}
|
||||
|
||||
// tslint:disable-next-line no-any
|
||||
public createConnection(...args: any[]): net.Socket {
|
||||
//@ts-ignore
|
||||
return this.client.createConnection(...args) as net.Socket;
|
||||
|
@ -20,4 +20,8 @@ export interface InitData {
|
||||
readonly workingDirectory: string;
|
||||
readonly homeDirectory: string;
|
||||
readonly tmpDirectory: string;
|
||||
}
|
||||
}
|
||||
|
||||
export interface ISharedProcessData {
|
||||
readonly socketPath: string;
|
||||
}
|
||||
|
Reference in New Issue
Block a user