import EventService from '../lib/core/EventService'; import Message from '../model/Message'; import Contact from '../model/Contact'; import MessageMapper from '../lib/core/MessageMapper' import { InputSet } from '../model/InputSet'; enum Event { OnInstall = 'onInstall', onUninstall = 'onUninstall', OnCall = 'onCall', OnInteraction = 'onInteraction', OnCommand = 'onCommand', } 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(); switch (e.event) { case Event.OnInstall: // console.log(JSON.stringify(e, null, 2)) this.onInstall(e.accountAddress); break; case Event.onUninstall: // console.log(JSON.stringify(e, null, 2)) this.onUninstall(e.accountAddress); break; case Event.OnCall: // console.log(JSON.stringify(e, null, 2)) this.onCall( e.data, mapper .toMessage(e.reference) .setAccountAddress(e.account_address) //.setInputs(e.input) .setFrom(new Contact(e.account_address).setName('')) ); break; case Event.OnInteraction: // console.log(JSON.stringify(e, null, 2)) /* let inputs = {}; for(let v of e.input) { inputs[v.id] = v.name; } */ let _message = mapper .toMessage(e.reference) .setAccountAddress(e.account_address) //.setInputs(e.input) .setFrom(new Contact(e.account_address).setName('')) this.onInteraction(_message, _message.InputSet); break; case Event.OnCommand: // console.log(JSON.stringify(e, null, 2)) this.onCommand( e.data, mapper .toMessage(e.reference) .setAccountAddress(e.account_address) //.setInputs(e.input) .setFrom(new Contact(e.account_address).setName('')) ); break; default: console.log('An unknown event was received'); } } } export default BaseComponent;