UNPKG

hft-js

Version:

High-Frequency Trading in Node.js

68 lines (55 loc) 1.44 kB
/* * provider.ts * * Copyright (c) 2025 Xiongfei Shi * * Author: Xiongfei Shi <xiongfei.shi(a)icloud.com> * License: Apache-2.0 * * https://github.com/shixiongfei/hft.js */ import ctp from "napi-ctp"; import { ErrorType, ILifecycleListener } from "./interfaces.js"; export class CTPProvider { protected readonly flowPath: string; protected readonly frontAddrs: string | string[]; constructor(flowPath: string, frontAddrs: string | string[]) { this.flowPath = flowPath; this.frontAddrs = frontAddrs; } private _sleep(ms: number) { return new Promise<void>((resolve) => { setTimeout(resolve, ms); }); } protected async _withRetry(request: () => number | undefined, ms = 100) { for (;;) { const retval = request(); if (retval === 0) { return ctp.getLastRequestId(); } if (-2 !== retval && -3 !== retval) { return retval; } await this._sleep(ms); } } protected _isErrorResp( lifecycle: ILifecycleListener, options: ctp.CallbackOptions, error: ErrorType, ) { if (!options.rspInfo) { return false; } lifecycle.onError( error, `${options.rspInfo.ErrorID}:${options.rspInfo.ErrorMsg}`, ); return true; } protected _parseTime(time: string) { const [hour, minute, second] = time.split(":").map((x) => parseInt(x)); return hour * 10000 + minute * 100 + second; } }