|
|
@ -3,7 +3,7 @@ import assert from "assert"; |
|
|
|
import { Microservice } from "@autoplex/microservice"; |
|
|
|
import AbstractIpcService from "./AbstractIpcService"; |
|
|
|
import { IIpcResponse, IIpcRequest, IPC } from "./schema"; |
|
|
|
import { IpcConnectionError, IpcTimeoutError } from "./IpcError"; |
|
|
|
import { IpcConnectionError, IpcError, IpcResponseError, IpcTimeoutError } from "./IpcError"; |
|
|
|
|
|
|
|
export abstract class IpcClientService<M extends Microservice = Microservice> extends AbstractIpcService<M> |
|
|
|
{ |
|
|
@ -123,8 +123,8 @@ export abstract class IpcClientService<M extends Microservice = Microservice> ex |
|
|
|
/** |
|
|
|
* Perform a general request and wait for a response |
|
|
|
*/ |
|
|
|
protected async request(method: string, data?: any, timeout: number|null = null) { |
|
|
|
return new Promise<IIpcResponse>((resolve, reject) => { |
|
|
|
protected async request<T = any>(method: string, data?: T, timeout: number|null = null) { |
|
|
|
return new Promise<IIpcResponse<T>>((resolve, reject) => { |
|
|
|
// If the client is not connected to a server, reject immediately
|
|
|
|
if (!this.__isConnected || this.__socket === null) { |
|
|
|
reject(new IpcConnectionError("Not connected")); |
|
|
@ -143,12 +143,16 @@ export abstract class IpcClientService<M extends Microservice = Microservice> ex |
|
|
|
this.__socket.off("destroy", respond); |
|
|
|
}; |
|
|
|
// Handle the response
|
|
|
|
let respond = (response: IIpcResponse) => { |
|
|
|
let respond = (response: IIpcResponse<T>) => { |
|
|
|
cleanUp(); |
|
|
|
if (response.error !== undefined) { |
|
|
|
reject(new IpcResponseError<T>(response.error, response.data)); |
|
|
|
return; |
|
|
|
} |
|
|
|
resolve(response); |
|
|
|
}; |
|
|
|
// Abort the request
|
|
|
|
let abort = (error: Error) => { |
|
|
|
let abort = (error: IpcError) => { |
|
|
|
cleanUp(); |
|
|
|
reject(error); |
|
|
|
}; |
|
|
|