39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
import Container from 'typedi';
|
|
import { RedisService } from './redis.service';
|
|
import type { RedisServicePubSubSubscriber } from './redis/RedisServicePubSubSubscriber';
|
|
import type { WorkerCommandReceivedHandlerOptions } from './orchestration/worker/types';
|
|
import type { MainResponseReceivedHandlerOptions } from './orchestration/main/types';
|
|
|
|
export abstract class OrchestrationHandlerService {
|
|
protected initialized = false;
|
|
|
|
redisSubscriber: RedisServicePubSubSubscriber;
|
|
|
|
readonly redisService: RedisService;
|
|
|
|
constructor() {
|
|
this.redisService = Container.get(RedisService);
|
|
}
|
|
|
|
async init() {
|
|
await this.initSubscriber();
|
|
this.initialized = true;
|
|
}
|
|
|
|
async initWithOptions(
|
|
options: WorkerCommandReceivedHandlerOptions | MainResponseReceivedHandlerOptions,
|
|
) {
|
|
await this.initSubscriber(options);
|
|
this.initialized = true;
|
|
}
|
|
|
|
async shutdown() {
|
|
await this.redisSubscriber?.destroy();
|
|
this.initialized = false;
|
|
}
|
|
|
|
protected abstract initSubscriber(
|
|
options?: WorkerCommandReceivedHandlerOptions | MainResponseReceivedHandlerOptions,
|
|
): Promise<void>;
|
|
}
|