flok 0.0.36 → 0.0.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +1 -0
- data/app/drivers/chrome/build_context.rb +1 -1
- data/app/drivers/chrome/config.yml +10 -0
- data/app/drivers/chrome/pipe.rb +24 -1
- data/app/drivers/chrome/src/persist.js +29 -0
- data/app/drivers/chrome/src/sockio.js +3 -1
- data/app/drivers/chrome/src/vendor/store2.js +3 -0
- data/app/kern/callout.js +55 -0
- data/app/kern/controller.js +3 -0
- data/app/kern/crc32.js +22 -0
- data/app/kern/dispatch.js +16 -0
- data/app/kern/mod/event.js +3 -0
- data/app/kern/mod/persist.js +1 -0
- data/app/kern/mod/timer.js +5 -0
- data/app/kern/pagers/mem_pager.js +2 -0
- data/app/kern/pagers/sockio_pager.js +66 -0
- data/app/kern/pagers/spec0.js +35 -0
- data/app/kern/pagers/spec1.js +24 -0
- data/app/kern/pagers/spec2.js +31 -0
- data/app/kern/services/test.rb +7 -0
- data/app/kern/services/vm.rb +141 -0
- data/app/kern/spec_helper.js +5 -0
- data/bin/flok +27 -5
- data/docs/callout.md +8 -0
- data/docs/client_api.md +1 -1
- data/docs/compilation.md +14 -8
- data/docs/controllers.md +2 -1
- data/docs/datatypes.md +3 -1
- data/docs/environmentals.md +6 -0
- data/docs/interactive.md +6 -1
- data/docs/kernel_api.md +3 -0
- data/docs/mod/event.md +5 -1
- data/docs/mod/persist.md +14 -31
- data/docs/mod/timer.md +4 -2
- data/docs/project.md +16 -5
- data/docs/scheduling.md +1 -0
- data/docs/services.md +141 -56
- data/docs/services/vm.md +128 -0
- data/docs/services/vm/pagers.md +46 -0
- data/lib/flok/build.rb +11 -16
- data/lib/flok/platform.rb +29 -6
- data/lib/flok/project_template/app/scripts/script.js +3 -0
- data/lib/flok/project_template/app/services/service.rb +1 -0
- data/lib/flok/project_template/config/config.yml +1 -0
- data/lib/flok/project_template/config/platforms/chrome/config.yml +1 -0
- data/lib/flok/project_template/config/services.rb +1 -0
- data/lib/flok/service_compiler_templates/services.js.erb +78 -9
- data/lib/flok/services_compiler.rb +117 -20
- data/lib/flok/user_compiler.rb +14 -6
- data/lib/flok/user_compiler_templates/ctable.js.erb +10 -0
- data/lib/flok/version.rb +1 -1
- data/spec/env/etc.rb +1 -1
- data/spec/env/global.rb +2 -0
- data/spec/env/iface.rb +20 -4
- data/spec/env/kern.rb +8 -3
- data/spec/etc/cli_spec.rb +319 -165
- data/spec/etc/lib/assets/config.yml +3 -0
- data/spec/etc/lib/platform_spec.rb +14 -10
- data/spec/etc/lib/project_spec.rb +22 -0
- data/spec/etc/service_compiler/config0.rb +1 -0
- data/spec/etc/service_compiler/config1.rb +1 -0
- data/spec/etc/service_compiler/config2.rb +3 -0
- data/spec/etc/service_compiler/service0.rb +22 -6
- data/spec/etc/service_compiler/service1.rb +26 -0
- data/spec/etc/service_compiler/service_bad_type.rb +20 -0
- data/spec/etc/services_compiler_spec.rb +35 -16
- data/spec/etc/user_compiler/data.js +2 -0
- data/spec/etc/user_compiler_spec.rb +7 -1
- data/spec/iface/driver/persist_spec.rb +106 -0
- data/spec/iface/driver/pipe_spec.rb +5 -0
- data/spec/iface/kern/ping_spec.rb +4 -3
- data/spec/kern/assets/blank.rb +0 -0
- data/spec/kern/assets/service0.rb +24 -0
- data/spec/kern/assets/service1.rb +22 -0
- data/spec/kern/assets/service2.rb +27 -0
- data/spec/kern/assets/service_config0.rb +2 -0
- data/spec/kern/assets/service_config1.rb +2 -0
- data/spec/kern/assets/service_controller0.rb +13 -0
- data/spec/kern/assets/service_controller1.rb +32 -0
- data/spec/kern/assets/service_controller2.rb +38 -0
- data/spec/kern/assets/service_controller3.rb +38 -0
- data/spec/kern/assets/vm/config0.rb +2 -0
- data/spec/kern/assets/vm/config1.rb +12 -0
- data/spec/kern/assets/vm/config2.rb +12 -0
- data/spec/kern/assets/vm/config3.rb +12 -0
- data/spec/kern/assets/vm/controller0.rb +8 -0
- data/spec/kern/assets/vm/controller1.rb +18 -0
- data/spec/kern/assets/vm/controller2.rb +18 -0
- data/spec/kern/assets/vm/controller3.rb +20 -0
- data/spec/kern/assets/vm/controller4.rb +22 -0
- data/spec/kern/assets/vm/controller5.rb +22 -0
- data/spec/kern/assets/vm/controller6.rb +21 -0
- data/spec/kern/assets/vm/service0.rb +24 -0
- data/spec/kern/assets/vm/service_controller0.rb +7 -0
- data/spec/kern/callout_spec.rb +153 -0
- data/spec/kern/functions_spec.rb +29 -0
- data/spec/kern/service_controller_spec.rb +213 -0
- data/spec/kern/vm_service_spec.rb +195 -0
- metadata +98 -12
- data/app/kern/services/rest.rb +0 -310
- data/app/kern/services/timer.rb +0 -30
- data/docs/services/timer.md +0 -21
- data/spec/kern/assets/rest_service.rb +0 -20
- data/spec/kern/assets/timer_service.rb +0 -19
- data/spec/kern/timer_service_spec.rb +0 -40
data/app/kern/services/rest.rb
DELETED
@@ -1,310 +0,0 @@
|
|
1
|
-
service("rest") do
|
2
|
-
on_init %{
|
3
|
-
//Code inserted here is put into the global space, add initialization
|
4
|
-
//procedures, functions that need to be called, etc.
|
5
|
-
//
|
6
|
-
//You may use the function respond(info) within here to
|
7
|
-
|
8
|
-
//Store the in-progress requests as a list of hashes
|
9
|
-
//that contain an array in the order of [event_pointer, evenct_name]
|
10
|
-
var service_rest_tp_to_einfo = {}
|
11
|
-
|
12
|
-
function service_rest_callback(tp, success, info) {
|
13
|
-
////Lookup event info
|
14
|
-
var einfo = service_rest_tp_to_einfo[tp];
|
15
|
-
|
16
|
-
////Send info back to service
|
17
|
-
int_event(einfo[0], einfo[1], {success: success, info: info});
|
18
|
-
|
19
|
-
//Remove entries in telepointer table and rest service info
|
20
|
-
tel_del(tp);
|
21
|
-
delete service_rest_tp_to_einfo[tp];
|
22
|
-
}
|
23
|
-
|
24
|
-
/*
|
25
|
-
* Secure Hash Algorithm (SHA512)
|
26
|
-
* http://www.happycode.info/
|
27
|
-
*/
|
28
|
-
|
29
|
-
function SHA512(str) {
|
30
|
-
function int64(msint_32, lsint_32) {
|
31
|
-
this.highOrder = msint_32;
|
32
|
-
this.lowOrder = lsint_32;
|
33
|
-
}
|
34
|
-
|
35
|
-
var H = [new int64(0x6a09e667, 0xf3bcc908), new int64(0xbb67ae85, 0x84caa73b),
|
36
|
-
new int64(0x3c6ef372, 0xfe94f82b), new int64(0xa54ff53a, 0x5f1d36f1),
|
37
|
-
new int64(0x510e527f, 0xade682d1), new int64(0x9b05688c, 0x2b3e6c1f),
|
38
|
-
new int64(0x1f83d9ab, 0xfb41bd6b), new int64(0x5be0cd19, 0x137e2179)];
|
39
|
-
|
40
|
-
var K = [new int64(0x428a2f98, 0xd728ae22), new int64(0x71374491, 0x23ef65cd),
|
41
|
-
new int64(0xb5c0fbcf, 0xec4d3b2f), new int64(0xe9b5dba5, 0x8189dbbc),
|
42
|
-
new int64(0x3956c25b, 0xf348b538), new int64(0x59f111f1, 0xb605d019),
|
43
|
-
new int64(0x923f82a4, 0xaf194f9b), new int64(0xab1c5ed5, 0xda6d8118),
|
44
|
-
new int64(0xd807aa98, 0xa3030242), new int64(0x12835b01, 0x45706fbe),
|
45
|
-
new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, 0xd5ffb4e2),
|
46
|
-
new int64(0x72be5d74, 0xf27b896f), new int64(0x80deb1fe, 0x3b1696b1),
|
47
|
-
new int64(0x9bdc06a7, 0x25c71235), new int64(0xc19bf174, 0xcf692694),
|
48
|
-
new int64(0xe49b69c1, 0x9ef14ad2), new int64(0xefbe4786, 0x384f25e3),
|
49
|
-
new int64(0x0fc19dc6, 0x8b8cd5b5), new int64(0x240ca1cc, 0x77ac9c65),
|
50
|
-
new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483),
|
51
|
-
new int64(0x5cb0a9dc, 0xbd41fbd4), new int64(0x76f988da, 0x831153b5),
|
52
|
-
new int64(0x983e5152, 0xee66dfab), new int64(0xa831c66d, 0x2db43210),
|
53
|
-
new int64(0xb00327c8, 0x98fb213f), new int64(0xbf597fc7, 0xbeef0ee4),
|
54
|
-
new int64(0xc6e00bf3, 0x3da88fc2), new int64(0xd5a79147, 0x930aa725),
|
55
|
-
new int64(0x06ca6351, 0xe003826f), new int64(0x14292967, 0x0a0e6e70),
|
56
|
-
new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926),
|
57
|
-
new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, 0x9d95b3df),
|
58
|
-
new int64(0x650a7354, 0x8baf63de), new int64(0x766a0abb, 0x3c77b2a8),
|
59
|
-
new int64(0x81c2c92e, 0x47edaee6), new int64(0x92722c85, 0x1482353b),
|
60
|
-
new int64(0xa2bfe8a1, 0x4cf10364), new int64(0xa81a664b, 0xbc423001),
|
61
|
-
new int64(0xc24b8b70, 0xd0f89791), new int64(0xc76c51a3, 0x0654be30),
|
62
|
-
new int64(0xd192e819, 0xd6ef5218), new int64(0xd6990624, 0x5565a910),
|
63
|
-
new int64(0xf40e3585, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8),
|
64
|
-
new int64(0x19a4c116, 0xb8d2d0c8), new int64(0x1e376c08, 0x5141ab53),
|
65
|
-
new int64(0x2748774c, 0xdf8eeb99), new int64(0x34b0bcb5, 0xe19b48a8),
|
66
|
-
new int64(0x391c0cb3, 0xc5c95a63), new int64(0x4ed8aa4a, 0xe3418acb),
|
67
|
-
new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, 0xd6b2b8a3),
|
68
|
-
new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60),
|
69
|
-
new int64(0x84c87814, 0xa1f0ab72), new int64(0x8cc70208, 0x1a6439ec),
|
70
|
-
new int64(0x90befffa, 0x23631e28), new int64(0xa4506ceb, 0xde82bde9),
|
71
|
-
new int64(0xbef9a3f7, 0xb2c67915), new int64(0xc67178f2, 0xe372532b),
|
72
|
-
new int64(0xca273ece, 0xea26619c), new int64(0xd186b8c7, 0x21c0c207),
|
73
|
-
new int64(0xeada7dd6, 0xcde0eb1e), new int64(0xf57d4f7f, 0xee6ed178),
|
74
|
-
new int64(0x06f067aa, 0x72176fba), new int64(0x0a637dc5, 0xa2c898a6),
|
75
|
-
new int64(0x113f9804, 0xbef90dae), new int64(0x1b710b35, 0x131c471b),
|
76
|
-
new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493),
|
77
|
-
new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, 0x9c100d4c),
|
78
|
-
new int64(0x4cc5d4be, 0xcb3e42b6), new int64(0x597f299c, 0xfc657e2a),
|
79
|
-
new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817)];
|
80
|
-
|
81
|
-
var W = new Array(64);
|
82
|
-
var a, b, c, d, e, f, g, h, i, j;
|
83
|
-
var T1, T2;
|
84
|
-
var charsize = 8;
|
85
|
-
|
86
|
-
function utf8_encode(str) {
|
87
|
-
return unescape(encodeURIComponent(str));
|
88
|
-
}
|
89
|
-
|
90
|
-
function str2binb(str) {
|
91
|
-
var bin = [];
|
92
|
-
var mask = (1 << charsize) - 1;
|
93
|
-
var len = str.length * charsize;
|
94
|
-
|
95
|
-
for (var i = 0; i < len; i += charsize) {
|
96
|
-
bin[i >> 5] |= (str.charCodeAt(i / charsize) & mask) << (32 - charsize - (i % 32));
|
97
|
-
}
|
98
|
-
|
99
|
-
return bin;
|
100
|
-
}
|
101
|
-
|
102
|
-
function binb2hex(binarray) {
|
103
|
-
var hex_tab = "0123456789abcdef";
|
104
|
-
var str = "";
|
105
|
-
var length = binarray.length * 4;
|
106
|
-
var srcByte;
|
107
|
-
|
108
|
-
for (var i = 0; i < length; i += 1) {
|
109
|
-
srcByte = binarray[i >> 2] >> ((3 - (i % 4)) * 8);
|
110
|
-
str += hex_tab.charAt((srcByte >> 4) & 0xF) + hex_tab.charAt(srcByte & 0xF);
|
111
|
-
}
|
112
|
-
|
113
|
-
return str;
|
114
|
-
}
|
115
|
-
|
116
|
-
function safe_add_2(x, y) {
|
117
|
-
var lsw, msw, lowOrder, highOrder;
|
118
|
-
|
119
|
-
lsw = (x.lowOrder & 0xFFFF) + (y.lowOrder & 0xFFFF);
|
120
|
-
msw = (x.lowOrder >>> 16) + (y.lowOrder >>> 16) + (lsw >>> 16);
|
121
|
-
lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
|
122
|
-
|
123
|
-
lsw = (x.highOrder & 0xFFFF) + (y.highOrder & 0xFFFF) + (msw >>> 16);
|
124
|
-
msw = (x.highOrder >>> 16) + (y.highOrder >>> 16) + (lsw >>> 16);
|
125
|
-
highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
|
126
|
-
|
127
|
-
return new int64(highOrder, lowOrder);
|
128
|
-
}
|
129
|
-
|
130
|
-
function safe_add_4(a, b, c, d) {
|
131
|
-
var lsw, msw, lowOrder, highOrder;
|
132
|
-
|
133
|
-
lsw = (a.lowOrder & 0xFFFF) + (b.lowOrder & 0xFFFF) + (c.lowOrder & 0xFFFF) + (d.lowOrder & 0xFFFF);
|
134
|
-
msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (lsw >>> 16);
|
135
|
-
lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
|
136
|
-
|
137
|
-
lsw = (a.highOrder & 0xFFFF) + (b.highOrder & 0xFFFF) + (c.highOrder & 0xFFFF) + (d.highOrder & 0xFFFF) + (msw >>> 16);
|
138
|
-
msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (lsw >>> 16);
|
139
|
-
highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
|
140
|
-
|
141
|
-
return new int64(highOrder, lowOrder);
|
142
|
-
}
|
143
|
-
|
144
|
-
function safe_add_5(a, b, c, d, e) {
|
145
|
-
var lsw, msw, lowOrder, highOrder;
|
146
|
-
|
147
|
-
lsw = (a.lowOrder & 0xFFFF) + (b.lowOrder & 0xFFFF) + (c.lowOrder & 0xFFFF) + (d.lowOrder & 0xFFFF) + (e.lowOrder & 0xFFFF);
|
148
|
-
msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (e.lowOrder >>> 16) + (lsw >>> 16);
|
149
|
-
lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
|
150
|
-
|
151
|
-
lsw = (a.highOrder & 0xFFFF) + (b.highOrder & 0xFFFF) + (c.highOrder & 0xFFFF) + (d.highOrder & 0xFFFF) + (e.highOrder & 0xFFFF) + (msw >>> 16);
|
152
|
-
msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (e.highOrder >>> 16) + (lsw >>> 16);
|
153
|
-
highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
|
154
|
-
|
155
|
-
return new int64(highOrder, lowOrder);
|
156
|
-
}
|
157
|
-
|
158
|
-
function maj(x, y, z) {
|
159
|
-
return new int64(
|
160
|
-
(x.highOrder & y.highOrder) ^ (x.highOrder & z.highOrder) ^ (y.highOrder & z.highOrder),
|
161
|
-
(x.lowOrder & y.lowOrder) ^ (x.lowOrder & z.lowOrder) ^ (y.lowOrder & z.lowOrder)
|
162
|
-
);
|
163
|
-
}
|
164
|
-
|
165
|
-
function ch(x, y, z) {
|
166
|
-
return new int64(
|
167
|
-
(x.highOrder & y.highOrder) ^ (~x.highOrder & z.highOrder),
|
168
|
-
(x.lowOrder & y.lowOrder) ^ (~x.lowOrder & z.lowOrder)
|
169
|
-
);
|
170
|
-
}
|
171
|
-
|
172
|
-
function rotr(x, n) {
|
173
|
-
if (n <= 32) {
|
174
|
-
return new int64(
|
175
|
-
(x.highOrder >>> n) | (x.lowOrder << (32 - n)),
|
176
|
-
(x.lowOrder >>> n) | (x.highOrder << (32 - n))
|
177
|
-
);
|
178
|
-
} else {
|
179
|
-
return new int64(
|
180
|
-
(x.lowOrder >>> n) | (x.highOrder << (32 - n)),
|
181
|
-
(x.highOrder >>> n) | (x.lowOrder << (32 - n))
|
182
|
-
);
|
183
|
-
}
|
184
|
-
}
|
185
|
-
|
186
|
-
function sigma0(x) {
|
187
|
-
var rotr28 = rotr(x, 28);
|
188
|
-
var rotr34 = rotr(x, 34);
|
189
|
-
var rotr39 = rotr(x, 39);
|
190
|
-
|
191
|
-
return new int64(
|
192
|
-
rotr28.highOrder ^ rotr34.highOrder ^ rotr39.highOrder,
|
193
|
-
rotr28.lowOrder ^ rotr34.lowOrder ^ rotr39.lowOrder
|
194
|
-
);
|
195
|
-
}
|
196
|
-
|
197
|
-
function sigma1(x) {
|
198
|
-
var rotr14 = rotr(x, 14);
|
199
|
-
var rotr18 = rotr(x, 18);
|
200
|
-
var rotr41 = rotr(x, 41);
|
201
|
-
|
202
|
-
return new int64(
|
203
|
-
rotr14.highOrder ^ rotr18.highOrder ^ rotr41.highOrder,
|
204
|
-
rotr14.lowOrder ^ rotr18.lowOrder ^ rotr41.lowOrder
|
205
|
-
);
|
206
|
-
}
|
207
|
-
|
208
|
-
function gamma0(x) {
|
209
|
-
var rotr1 = rotr(x, 1), rotr8 = rotr(x, 8), shr7 = shr(x, 7);
|
210
|
-
|
211
|
-
return new int64(
|
212
|
-
rotr1.highOrder ^ rotr8.highOrder ^ shr7.highOrder,
|
213
|
-
rotr1.lowOrder ^ rotr8.lowOrder ^ shr7.lowOrder
|
214
|
-
);
|
215
|
-
}
|
216
|
-
|
217
|
-
function gamma1(x) {
|
218
|
-
var rotr19 = rotr(x, 19);
|
219
|
-
var rotr61 = rotr(x, 61);
|
220
|
-
var shr6 = shr(x, 6);
|
221
|
-
|
222
|
-
return new int64(
|
223
|
-
rotr19.highOrder ^ rotr61.highOrder ^ shr6.highOrder,
|
224
|
-
rotr19.lowOrder ^ rotr61.lowOrder ^ shr6.lowOrder
|
225
|
-
);
|
226
|
-
}
|
227
|
-
|
228
|
-
function shr(x, n) {
|
229
|
-
if (n <= 32) {
|
230
|
-
return new int64(
|
231
|
-
x.highOrder >>> n,
|
232
|
-
x.lowOrder >>> n | (x.highOrder << (32 - n))
|
233
|
-
);
|
234
|
-
} else {
|
235
|
-
return new int64(
|
236
|
-
0,
|
237
|
-
x.highOrder << (32 - n)
|
238
|
-
);
|
239
|
-
}
|
240
|
-
}
|
241
|
-
|
242
|
-
str = utf8_encode(str);
|
243
|
-
strlen = str.length*charsize;
|
244
|
-
str = str2binb(str);
|
245
|
-
|
246
|
-
str[strlen >> 5] |= 0x80 << (24 - strlen % 32);
|
247
|
-
str[(((strlen + 128) >> 10) << 5) + 31] = strlen;
|
248
|
-
|
249
|
-
for (var i = 0; i < str.length; i += 32) {
|
250
|
-
a = H[0];
|
251
|
-
b = H[1];
|
252
|
-
c = H[2];
|
253
|
-
d = H[3];
|
254
|
-
e = H[4];
|
255
|
-
f = H[5];
|
256
|
-
g = H[6];
|
257
|
-
h = H[7];
|
258
|
-
|
259
|
-
for (var j = 0; j < 80; j++) {
|
260
|
-
if (j < 16) {
|
261
|
-
W[j] = new int64(str[j*2 + i], str[j*2 + i + 1]);
|
262
|
-
} else {
|
263
|
-
W[j] = safe_add_4(gamma1(W[j - 2]), W[j - 7], gamma0(W[j - 15]), W[j - 16]);
|
264
|
-
}
|
265
|
-
|
266
|
-
T1 = safe_add_5(h, sigma1(e), ch(e, f, g), K[j], W[j]);
|
267
|
-
T2 = safe_add_2(sigma0(a), maj(a, b, c));
|
268
|
-
h = g;
|
269
|
-
g = f;
|
270
|
-
f = e;
|
271
|
-
e = safe_add_2(d, T1);
|
272
|
-
d = c;
|
273
|
-
c = b;
|
274
|
-
b = a;
|
275
|
-
a = safe_add_2(T1, T2);
|
276
|
-
}
|
277
|
-
|
278
|
-
H[0] = safe_add_2(a, H[0]);
|
279
|
-
H[1] = safe_add_2(b, H[1]);
|
280
|
-
H[2] = safe_add_2(c, H[2]);
|
281
|
-
H[3] = safe_add_2(d, H[3]);
|
282
|
-
H[4] = safe_add_2(e, H[4]);
|
283
|
-
H[5] = safe_add_2(f, H[5]);
|
284
|
-
H[6] = safe_add_2(g, H[6]);
|
285
|
-
H[7] = safe_add_2(h, H[7]);
|
286
|
-
}
|
287
|
-
|
288
|
-
var binarray = [];
|
289
|
-
for (var i = 0; i < H.length; i++) {
|
290
|
-
binarray.push(H[i].highOrder);
|
291
|
-
binarray.push(H[i].lowOrder);
|
292
|
-
}
|
293
|
-
return binb2hex(binarray);
|
294
|
-
}
|
295
|
-
}
|
296
|
-
|
297
|
-
on_request %{
|
298
|
-
//Code that handles a payload goes here.
|
299
|
-
//You have access to `info`, `ep`, and `ename` which was given in the ServiceRequest macro
|
300
|
-
|
301
|
-
//Create a GET request that will respond to the telepointer
|
302
|
-
var tp = tel_reg(service_rest_callback);
|
303
|
-
|
304
|
-
//Now register the event information to respond to when a callback is received
|
305
|
-
service_rest_tp_to_einfo[tp] = [ep, ename]
|
306
|
-
|
307
|
-
//Start the request
|
308
|
-
SEND("net", "if_net_req", "GET", info.url, info.params, tp)
|
309
|
-
}
|
310
|
-
end
|
data/app/kern/services/timer.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
service("timer") do
|
2
|
-
on_init %{
|
3
|
-
//Entries in the timer event table are stored as an array of arrays, each array
|
4
|
-
//contains [N, bp, event_name]
|
5
|
-
|
6
|
-
var timer_evt = [];
|
7
|
-
//Call an event N times per second
|
8
|
-
function reg_timer_ev(n, bp, ename) {
|
9
|
-
timer_evt.push([n, bp, ename]);
|
10
|
-
}
|
11
|
-
|
12
|
-
//Timer position
|
13
|
-
var ttick = 0;
|
14
|
-
function int_timer() {
|
15
|
-
ttick += 1;
|
16
|
-
|
17
|
-
for (var i = 0; i < timer_evt.length; ++i) {
|
18
|
-
if (ttick % timer_evt[i][0] == 0) {
|
19
|
-
var bp = timer_evt[i][1];
|
20
|
-
var ename = timer_evt[i][2];
|
21
|
-
int_event(bp, ename, {});
|
22
|
-
}
|
23
|
-
}
|
24
|
-
}
|
25
|
-
}
|
26
|
-
|
27
|
-
on_request %{
|
28
|
-
timer_evt.push([info.ticks, ep, ename]);
|
29
|
-
}
|
30
|
-
end
|
data/docs/services/timer.md
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
#Timer service
|
2
|
-
This service manages the `int_timer` function (which is a little different than how most modules work). When an `int_timer` request
|
3
|
-
comes in, the timer service dispatches it to an apprpriate controller event handler.
|
4
|
-
|
5
|
-
Timer service mantains an `timer_evt` which contains an array of arrays for interval timers that will be called (recurring) periodically.
|
6
|
-
The elements of `timer_evt` are an array with the following information: `[tps, base_pointer, event_name]`. When `int_timer` is called,
|
7
|
-
it will send events to all entries in `timer_evt` which have a `ticks` that is a modulo of `ttick`; the global tick counter.
|
8
|
-
|
9
|
-
###Info to start a request
|
10
|
-
```js
|
11
|
-
var info = {
|
12
|
-
ticks: 4,
|
13
|
-
}
|
14
|
-
```
|
15
|
-
`ticks` the number of ticks to wait between fires.
|
16
|
-
|
17
|
-
When you receive a request back, you will receive
|
18
|
-
```js
|
19
|
-
{
|
20
|
-
}
|
21
|
-
```
|
@@ -1,20 +0,0 @@
|
|
1
|
-
controller :my_controller do
|
2
|
-
spots "hello", "world"
|
3
|
-
|
4
|
-
action :my_action do
|
5
|
-
on_entry %{
|
6
|
-
}
|
7
|
-
|
8
|
-
on "start_request", %{
|
9
|
-
var payload = {
|
10
|
-
url: "http://test.services.fittr.com/ping",
|
11
|
-
params: {},
|
12
|
-
};
|
13
|
-
Request("rest", payload, "request_response");
|
14
|
-
}
|
15
|
-
|
16
|
-
on "request_response", %{
|
17
|
-
response = params;
|
18
|
-
}
|
19
|
-
end
|
20
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
controller :my_controller do
|
2
|
-
spots "hello", "world"
|
3
|
-
|
4
|
-
action :my_action do
|
5
|
-
on_entry %{
|
6
|
-
}
|
7
|
-
|
8
|
-
on "start_request", %{
|
9
|
-
var payload = {
|
10
|
-
ticks: 4
|
11
|
-
};
|
12
|
-
Request("timer", payload, "tick");
|
13
|
-
}
|
14
|
-
|
15
|
-
on "tick", %{
|
16
|
-
did_tick = true;
|
17
|
-
}
|
18
|
-
end
|
19
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
Dir.chdir File.join File.dirname(__FILE__), '../../'
|
2
|
-
require './spec/env/kern.rb'
|
3
|
-
require './spec/lib/helpers.rb'
|
4
|
-
require './spec/lib/io_extensions.rb'
|
5
|
-
require './spec/lib/rspec_extensions.rb'
|
6
|
-
|
7
|
-
RSpec.describe "kern:timer_service_spec" do
|
8
|
-
include_context "kern"
|
9
|
-
|
10
|
-
#Can initialize a controller via embed and have the correct if_dispatch messages
|
11
|
-
it "Can initiate a controller via _embed" do
|
12
|
-
#Compile the controller
|
13
|
-
ctx = flok_new_user File.read('./spec/kern/assets/timer_service.rb')
|
14
|
-
|
15
|
-
#Run the embed function
|
16
|
-
ctx.eval %{
|
17
|
-
//Call embed on main root view
|
18
|
-
base = _embed("my_controller", 0, {}, null);
|
19
|
-
|
20
|
-
//Drain queue with a test event
|
21
|
-
int_dispatch([3, "int_event", base, "start_request", {}]);
|
22
|
-
}
|
23
|
-
|
24
|
-
base = ctx.eval("base")
|
25
|
-
|
26
|
-
@driver.mexpect("if_init_view", ["my_controller", {}, base+1, ["main", "hello", "world"]])
|
27
|
-
@driver.mexpect("if_controller_init", [base, base+1, "my_controller", {}])
|
28
|
-
@driver.mexpect("if_attach_view", [base+1, 0])
|
29
|
-
@driver.mexpect("if_event", [base, "action", {"from" => nil, "to" => "my_action"}])
|
30
|
-
|
31
|
-
#Emulate the if_timer driver
|
32
|
-
@driver.int("int_timer")
|
33
|
-
@driver.int("int_timer")
|
34
|
-
@driver.int("int_timer")
|
35
|
-
@driver.int("int_timer")
|
36
|
-
|
37
|
-
response = ctx.eval("did_tick")
|
38
|
-
expect(response).to eq(true)
|
39
|
-
end
|
40
|
-
end
|