import { EventService } from '../lib/core/EventService'; import { MessageMapper } from '../lib/core/MessageMapper' import { Message } from '../model/Message'; import { Contact } from '../model/Contact'; import { Response } from '../model/Response'; import { InputSet } from '../model/InputSet'; import { InputSetMapper } from '../lib/core/InputSetMapper'; export enum Event { OnInstall = 'onInstall', onUninstall = 'onUninstall', onNewMessage = 'onNewMessage', OnCall = 'onCall', OnInteraction = 'onInteraction', OnCommand = 'onCommand', } export abstract class BaseComponent { eventService: EventService; abstract async onInstall(accountAddress: String): Promise; abstract async onUninstall(accountAddress: String): Promise; abstract async onCall(command: string, message: Message): Promise; abstract async onInteraction(message: Message, inputSet: InputSet): Promise; abstract async onCommand(command: string, message: Message): Promise; abstract async onNewMessage(message: Message): Promise; constructor() { this.eventService = new EventService(); this.eventService .onNewEvent((event: any) => { this.onNewEvent(event) }) this.eventService .onNewMessage((msg: Message) => { this.onNewMessage(msg) }) } onNewEvent(e: any) { let mapper = new MessageMapper(); let inputSetMapper = new InputSetMapper(); switch (e.event) { case Event.OnInstall: this.onInstall(e.accountAddress); break; case Event.onUninstall: this.onUninstall(e.accountAddress); break; case Event.OnCall: this.onCall( e.data, mapper .toMessage(e.reference) .setAccountAddress(e.account_address) .setFrom(new Contact(e.account_address).setName('')) ); break; case Event.OnInteraction: let _message = mapper .toMessage(e.reference) .setAccountAddress(e.account_address) .setFrom(new Contact(e.account_address).setName('')) this.onInteraction(_message, inputSetMapper.toInputSet(e.input_set)); break; case Event.OnCommand: this.onCommand( e.data, mapper .toMessage(e.reference) .setAccountAddress(e.account_address) .setFrom(new Contact(e.account_address).setName('')) ); break; default: console.log('An unknown event was received'); } } handleResponse(response: Response, message: Message) { if (response.Event == Event.OnCommand || response.Event == Event.OnCall) this.onCommand(response.Command, message); else if (response.Event == Event.OnInteraction) this.onInteraction(message, response.InputSet); } }