cleanup: one shot vs stream
This commit is contained in:
@@ -41,7 +41,7 @@ async function rpcStream(instanceId: string): Promise<void> {
|
|||||||
|
|
||||||
await new Promise<void>((resolve, reject) => {
|
await new Promise<void>((resolve, reject) => {
|
||||||
socket.once("connect", () => {
|
socket.once("connect", () => {
|
||||||
socket.write(encodeMessage({ type: "rpc", instanceId }));
|
socket.write(encodeMessage({ type: "rpc_stream", instanceId }));
|
||||||
resolve();
|
resolve();
|
||||||
});
|
});
|
||||||
socket.once("error", reject);
|
socket.once("error", reject);
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import type {
|
|||||||
RpcBridgeResponse,
|
RpcBridgeResponse,
|
||||||
RpcReadyResponse,
|
RpcReadyResponse,
|
||||||
RpcRequest,
|
RpcRequest,
|
||||||
|
RpcStreamRequest,
|
||||||
SpawnRequest,
|
SpawnRequest,
|
||||||
SpawnResponse,
|
SpawnResponse,
|
||||||
StatusRequest,
|
StatusRequest,
|
||||||
@@ -50,9 +51,8 @@ export async function handleIpcRequest(request: SpawnRequest): Promise<SpawnResp
|
|||||||
export async function handleIpcRequest(request: ListRequest): Promise<ListResponse | ErrorResponse>;
|
export async function handleIpcRequest(request: ListRequest): Promise<ListResponse | ErrorResponse>;
|
||||||
export async function handleIpcRequest(request: StopRequest): Promise<StopResponse | ErrorResponse>;
|
export async function handleIpcRequest(request: StopRequest): Promise<StopResponse | ErrorResponse>;
|
||||||
export async function handleIpcRequest(request: StatusRequest): Promise<StatusResponse | ErrorResponse>;
|
export async function handleIpcRequest(request: StatusRequest): Promise<StatusResponse | ErrorResponse>;
|
||||||
export async function handleIpcRequest(
|
export async function handleIpcRequest(request: RpcRequest): Promise<RpcBridgeResponse | ErrorResponse>;
|
||||||
request: RpcRequest,
|
export async function handleIpcRequest(request: RpcStreamRequest): Promise<RpcReadyResponse | ErrorResponse>;
|
||||||
): Promise<RpcBridgeResponse | RpcReadyResponse | ErrorResponse>;
|
|
||||||
export async function handleIpcRequest(request: OrchestratorRequest): Promise<OrchestratorResponse>;
|
export async function handleIpcRequest(request: OrchestratorRequest): Promise<OrchestratorResponse>;
|
||||||
export async function handleIpcRequest(request: OrchestratorRequest): Promise<OrchestratorResponse> {
|
export async function handleIpcRequest(request: OrchestratorRequest): Promise<OrchestratorResponse> {
|
||||||
switch (request.type) {
|
switch (request.type) {
|
||||||
@@ -103,17 +103,6 @@ export async function handleIpcRequest(request: OrchestratorRequest): Promise<Or
|
|||||||
}
|
}
|
||||||
|
|
||||||
case "rpc": {
|
case "rpc": {
|
||||||
if (!request.command) {
|
|
||||||
const instance = supervisor.getInstance(request.instanceId);
|
|
||||||
if (!instance) {
|
|
||||||
return unknownInstanceError(request.instanceId);
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
type: "rpc_ready",
|
|
||||||
ok: true,
|
|
||||||
instance: toInstanceSummary(instance),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
const response = await supervisor.handleRpc(request.instanceId, request.command);
|
const response = await supervisor.handleRpc(request.instanceId, request.command);
|
||||||
if (!response) {
|
if (!response) {
|
||||||
return unknownInstanceError(request.instanceId);
|
return unknownInstanceError(request.instanceId);
|
||||||
@@ -125,6 +114,18 @@ export async function handleIpcRequest(request: OrchestratorRequest): Promise<Or
|
|||||||
response,
|
response,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case "rpc_stream": {
|
||||||
|
const instance = supervisor.getInstance(request.instanceId);
|
||||||
|
if (!instance) {
|
||||||
|
return unknownInstanceError(request.instanceId);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
type: "rpc_ready",
|
||||||
|
ok: true,
|
||||||
|
instance: toInstanceSummary(instance),
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,12 @@ export interface StatusRequest {
|
|||||||
export interface RpcRequest {
|
export interface RpcRequest {
|
||||||
type: "rpc";
|
type: "rpc";
|
||||||
instanceId: string;
|
instanceId: string;
|
||||||
command?: RpcCommand;
|
command: RpcCommand;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RpcStreamRequest {
|
||||||
|
type: "rpc_stream";
|
||||||
|
instanceId: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface RequestMap {
|
export interface RequestMap {
|
||||||
@@ -41,6 +46,7 @@ export interface RequestMap {
|
|||||||
stop: StopRequest;
|
stop: StopRequest;
|
||||||
status: StatusRequest;
|
status: StatusRequest;
|
||||||
rpc: RpcRequest;
|
rpc: RpcRequest;
|
||||||
|
rpc_stream: RpcStreamRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type OrchestratorRequest = RequestMap[keyof RequestMap];
|
export type OrchestratorRequest = RequestMap[keyof RequestMap];
|
||||||
@@ -101,7 +107,8 @@ export interface ResponseMap {
|
|||||||
list: ListResponse;
|
list: ListResponse;
|
||||||
stop: StopResponse;
|
stop: StopResponse;
|
||||||
status: StatusResponse;
|
status: StatusResponse;
|
||||||
rpc: RpcBridgeResponse | RpcReadyResponse;
|
rpc: RpcBridgeResponse;
|
||||||
|
rpc_stream: RpcReadyResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type OrchestratorResponse = ResponseMap[keyof ResponseMap] | ErrorResponse;
|
export type OrchestratorResponse = ResponseMap[keyof ResponseMap] | ErrorResponse;
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import {
|
|||||||
type RpcClientMessage,
|
type RpcClientMessage,
|
||||||
type RpcReadyResponse,
|
type RpcReadyResponse,
|
||||||
type RpcRequest,
|
type RpcRequest,
|
||||||
|
type RpcStreamRequest,
|
||||||
type SpawnRequest,
|
type SpawnRequest,
|
||||||
type SpawnResponse,
|
type SpawnResponse,
|
||||||
type StatusRequest,
|
type StatusRequest,
|
||||||
@@ -26,13 +27,8 @@ export interface IpcRequestHandler {
|
|||||||
(request: ListRequest): Promise<ListResponse | ErrorResponse> | ListResponse | ErrorResponse;
|
(request: ListRequest): Promise<ListResponse | ErrorResponse> | ListResponse | ErrorResponse;
|
||||||
(request: StopRequest): Promise<StopResponse | ErrorResponse> | StopResponse | ErrorResponse;
|
(request: StopRequest): Promise<StopResponse | ErrorResponse> | StopResponse | ErrorResponse;
|
||||||
(request: StatusRequest): Promise<StatusResponse | ErrorResponse> | StatusResponse | ErrorResponse;
|
(request: StatusRequest): Promise<StatusResponse | ErrorResponse> | StatusResponse | ErrorResponse;
|
||||||
(
|
(request: RpcRequest): Promise<RpcBridgeResponse | ErrorResponse> | RpcBridgeResponse | ErrorResponse;
|
||||||
request: RpcRequest,
|
(request: RpcStreamRequest): Promise<RpcReadyResponse | ErrorResponse> | RpcReadyResponse | ErrorResponse;
|
||||||
):
|
|
||||||
| Promise<RpcBridgeResponse | RpcReadyResponse | ErrorResponse>
|
|
||||||
| RpcBridgeResponse
|
|
||||||
| RpcReadyResponse
|
|
||||||
| ErrorResponse;
|
|
||||||
(request: OrchestratorRequest): Promise<OrchestratorResponse> | OrchestratorResponse;
|
(request: OrchestratorRequest): Promise<OrchestratorResponse> | OrchestratorResponse;
|
||||||
attach(
|
attach(
|
||||||
instanceId: string,
|
instanceId: string,
|
||||||
@@ -69,7 +65,7 @@ export async function startIpcServer(handler: IpcRequestHandler): Promise<Server
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const request = parseRequestLine(line);
|
const request = parseRequestLine(line);
|
||||||
if (request.type === "rpc" && request.command === undefined) {
|
if (request.type === "rpc_stream") {
|
||||||
const response = await handler(request);
|
const response = await handler(request);
|
||||||
if (!response.ok || response.type !== "rpc_ready" || !response.instance) {
|
if (!response.ok || response.type !== "rpc_ready" || !response.instance) {
|
||||||
socket.end(encodeMessage(response));
|
socket.end(encodeMessage(response));
|
||||||
|
|||||||
@@ -94,7 +94,6 @@ export class OrchestratorSupervisor {
|
|||||||
| {
|
| {
|
||||||
handleRpc(command: RpcCommand): Promise<RpcResponse>;
|
handleRpc(command: RpcCommand): Promise<RpcResponse>;
|
||||||
handleUiResponse(response: RpcExtensionUIResponse): void;
|
handleUiResponse(response: RpcExtensionUIResponse): void;
|
||||||
setHostTheme(theme: unknown): void;
|
|
||||||
close(): void;
|
close(): void;
|
||||||
}
|
}
|
||||||
| undefined {
|
| undefined {
|
||||||
@@ -113,7 +112,6 @@ export class OrchestratorSupervisor {
|
|||||||
handleUiResponse: (response) => {
|
handleUiResponse: (response) => {
|
||||||
live.rpc.handleUiResponse(response);
|
live.rpc.handleUiResponse(response);
|
||||||
},
|
},
|
||||||
setHostTheme: (_theme) => {},
|
|
||||||
close: () => {
|
close: () => {
|
||||||
if (live.onUiRequest === onUiRequest) {
|
if (live.onUiRequest === onUiRequest) {
|
||||||
live.onUiRequest = undefined;
|
live.onUiRequest = undefined;
|
||||||
|
|||||||
Reference in New Issue
Block a user