forked from neomjs/neo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathData.mjs
114 lines (97 loc) · 2.73 KB
/
Data.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import Neo from '../Neo.mjs';
import Base from './Base.mjs';
import Compare from '../core/Compare.mjs';
import Fetch from '../Fetch.mjs';
import StoreManager from '../manager/Store.mjs';
import Util from '../core/Util.mjs';
import Xhr from '../Xhr.mjs';
/**
* The Data worker is responsible to handle all of the communication to the backend (e.g. Ajax-calls).
* See the tutorials for further infos.
* @class Neo.worker.Data
* @extends Neo.worker.Base
* @singleton
*/
class Data extends Base {
static config = {
/**
* @member {String} className='Neo.worker.Data'
* @protected
*/
className: 'Neo.worker.Data',
/**
* @member {Boolean} singleton=true
* @protected
*/
singleton: true,
/**
* @member {String} workerId='data'
* @protected
*/
workerId: 'data'
}
/**
* @member {Boolean} rpcApiManagerLoaded=false
* @protected
*/
rpcApiManagerLoaded = false
/**
* @member {Boolean} rpcMessageManagerLoaded=false
* @protected
*/
rpcMessageManagerLoaded = false
/**
*
*/
afterConnect() {
let me = this,
channel = new MessageChannel(),
{port1, port2} = channel;
port1.onmessage = me.onMessage.bind(me);
me.sendMessage('app', {action: 'registerPort', transfer: port2}, [port2]);
me.channelPorts.app = port1;
}
/**
*
*/
onLoad() {
console.log('worker.Data onLoad');
}
/**
* @param {Object} msg
* @param {Object} msg.data the API content
*/
onRegisterApi(msg) {
import('../manager/rpc/Api.mjs').then(module => {
module.default.registerApi(msg.data);
this.rpcApiManagerLoaded = true
})
}
/**
* @param {Object} msg
*/
onRegisterNeoConfig(msg) {
super.onRegisterNeoConfig(msg);
Neo.config.remotesApiUrl && import('../manager/rpc/Message.mjs').then(module => {
this.rpcMessageManagerLoaded = true
})
}
/**
* @param {Object} msg
*/
async onRpc(msg) {
console.log('onRpc', msg);
let me = this,
response;
if (!me.rpcMessageManagerLoaded) {
// todo: we could store calls which arrive too early and pass them to the manager once it is ready
console.warn('manager.RemotesApi not loaded yet', msg);
me.reject(msg);
} else {
response = await Neo.manager.rpc.Message.onMessage(msg);
me.resolve(msg, response);
}
}
}
let instance = Neo.applyClassConfig(Data);
export default instance;