1 | import EventService from '../lib/core/EventService';
|
2 | import Message from '../model/Message';
|
3 | import Contact from '../model/Contact';
|
4 | import MessageMapper from '../lib/core/MessageMapper'
|
5 | import { InputSet } from '../model/InputSet';
|
6 |
|
7 | enum Event {
|
8 | OnInstall = 'onInstall',
|
9 | onUninstall = 'onUninstall',
|
10 | OnCall = 'onCall',
|
11 | OnInteraction = 'onInteraction',
|
12 | OnCommand = 'onCommand',
|
13 | }
|
14 |
|
15 | abstract class BaseComponent {
|
16 | eventService: EventService;
|
17 |
|
18 | abstract async onInstall (accountAddress: String): Promise<void>;
|
19 | abstract async onUninstall (accountAddress: String): Promise<void>;
|
20 | abstract async onCall (command: string, message: Message): Promise<void>;
|
21 | abstract async onInteraction (message: Message, inputSet: InputSet): Promise<void>;
|
22 | abstract async onCommand (command: string, message: Message): Promise<void>;
|
23 | abstract async onNewMessage (message: Message): Promise<void>;
|
24 |
|
25 | constructor() {
|
26 | this.eventService = new EventService();
|
27 |
|
28 | this.eventService
|
29 | .onNewEvent((event: any) => {
|
30 | this.onNewEvent(event)
|
31 | })
|
32 |
|
33 | this.eventService
|
34 | .onNewMessage((msg: Message) => {
|
35 | this.onNewMessage(msg)
|
36 | })
|
37 | }
|
38 |
|
39 | onNewEvent (e: any) {
|
40 | let mapper = new MessageMapper();
|
41 | switch (e.event) {
|
42 | case Event.OnInstall:
|
43 |
|
44 | this.onInstall(e.accountAddress);
|
45 | break;
|
46 | case Event.onUninstall:
|
47 |
|
48 | this.onUninstall(e.accountAddress);
|
49 | break;
|
50 | case Event.OnCall:
|
51 |
|
52 | this.onCall(
|
53 | e.data,
|
54 | mapper
|
55 | .toMessage(e.reference)
|
56 | .setAccountAddress(e.account_address)
|
57 |
|
58 | .setFrom(new Contact(e.account_address).setName(''))
|
59 | );
|
60 | break;
|
61 | case Event.OnInteraction:
|
62 |
|
63 | |
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 | let _message = mapper
|
70 | .toMessage(e.reference)
|
71 | .setAccountAddress(e.account_address)
|
72 |
|
73 | .setFrom(new Contact(e.account_address).setName(''))
|
74 | this.onInteraction(_message, _message.InputSet);
|
75 | break;
|
76 | case Event.OnCommand:
|
77 |
|
78 | this.onCommand(
|
79 | e.data,
|
80 | mapper
|
81 | .toMessage(e.reference)
|
82 | .setAccountAddress(e.account_address)
|
83 |
|
84 | .setFrom(new Contact(e.account_address).setName(''))
|
85 | );
|
86 | break;
|
87 | default:
|
88 | console.log('An unknown event was received');
|
89 | }
|
90 | }
|
91 | }
|
92 |
|
93 | export default BaseComponent;
|