-
Notifications
You must be signed in to change notification settings - Fork 55
Expand file tree
/
Copy pathasync.js
More file actions
72 lines (68 loc) · 1.86 KB
/
Copy pathasync.js
File metadata and controls
72 lines (68 loc) · 1.86 KB
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
(function() {
var Cube, Extend, key, value;
Cube = this.Cube || require('./cube');
Extend = {
asyncOK: !!window.Worker,
_asyncSetup: function(workerURI) {
if (this._worker) {
return;
}
this._worker = new window.Worker(workerURI);
this._worker.addEventListener('message', (e) => {
return this._asyncEvent(e);
});
return this._asyncCallbacks = {};
},
_asyncEvent: function(e) {
var callback, callbacks;
callbacks = this._asyncCallbacks[e.data.cmd];
if (!(callbacks && callbacks.length)) {
return;
}
callback = callbacks[0];
callbacks.splice(0, 1);
return callback(e.data);
},
_asyncCallback: function(cmd, callback) {
var base;
(base = this._asyncCallbacks)[cmd] || (base[cmd] = []);
return this._asyncCallbacks[cmd].push(callback);
},
asyncInit: function(workerURI, callback) {
this._asyncSetup(workerURI);
this._asyncCallback('init', function() {
return callback();
});
return this._worker.postMessage({
cmd: 'init'
});
},
_asyncSolve: function(cube, callback) {
this._asyncSetup();
this._asyncCallback('solve', function(data) {
return callback(data.algorithm);
});
return this._worker.postMessage({
cmd: 'solve',
cube: cube.toJSON()
});
},
asyncScramble: function(callback) {
this._asyncSetup();
this._asyncCallback('solve', function(data) {
return callback(Cube.inverse(data.algorithm));
});
return this._worker.postMessage({
cmd: 'solve',
cube: Cube.random().toJSON()
});
},
asyncSolve: function(callback) {
return Cube._asyncSolve(this, callback);
}
};
for (key in Extend) {
value = Extend[key];
Cube[key] = value;
}
}).call(this);