import { timer, of, Subscription } from 'rxjs'; import { switchMap, filter, tap } from 'rxjs/operators'; import { DyFM_Async, DyFM_Error } from '@futdevpro/fsm-dynamo'; import { DyNTS_SingletonService } from '../../../_services/base/singleton.service'; import { DyNTS_Bot_Main_ControlService } from './bot-main.control-service'; import { DyNTS_global_settings } from '../../../_collections/global-settings.const'; import { DyNTS_Bot_MessagingProvider_ServiceBase } from './bot-messaging-provider.service-base'; export abstract class DyNTS_Bot_Routines_ControlService extends DyNTS_SingletonService { protected mainBot_CS: DyNTS_Bot_Main_ControlService; protected abstract getMainBotControlService(): DyNTS_Bot_Main_ControlService; /* get provider(): any { return this.mainBot_CS?.provider; } */ get defaultProvider(): DyNTS_Bot_MessagingProvider_ServiceBase { return this.mainBot_CS.defaultProvider; } private _routinesStarted: boolean; get routinesStarted(): boolean { return this._routinesStarted; } /* protected constructor() { super(); } */ async setup(issuer: string): Promise { try { this.mainBot_CS = this.getMainBotControlService(); if (!this.mainBot_CS) { throw new DyFM_Error({ ...this.getDefaultErrorSettings('setup', new Error('Main Bot Control Service not found'), issuer), errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-Bot-RCS-S01`, }) } } catch (error) { throw new DyFM_Error({ ...this.getDefaultErrorSettings('setup', error, issuer), errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-Bot-RCS-S000`, }) } } async start(issuer: string): Promise { try { if (!this.defaultProvider) { throw new DyFM_Error({ ...this.getDefaultErrorSettings( 'start', new Error( 'Bot routines not yet started, ' + 'should only be called after DyNTS_Bot_Main_ControlService.start' ), 'system-init' ), errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-Bot-RCS-ST00`, }) } await this.startRoutines(issuer); this._routinesStarted = true; } catch (error) { throw new DyFM_Error({ ...this.getDefaultErrorSettings('start', error, issuer), errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-Bot-RCS-ST0`, }) } } abstract startRoutines(issuer: string): Promise; }