Files: 3d251f593ad3a3a4e9b46eaf068ca9dc8ec39bfa / index.js
1030 bytesRaw
1 | const Kernel = require('./index.js') |
2 | const PollMessage = require('./pollMessage.js') |
3 | |
4 | module.exports = class Hypervisor { |
5 | constructor (opts) { |
6 | this._opts = { |
7 | state: {}, |
8 | imports: [], |
9 | hypervisor: this |
10 | } |
11 | |
12 | Object.assign(this._opts, opts) |
13 | this._runningVMs = new Map() |
14 | } |
15 | |
16 | set (path, value) { |
17 | return this._opts.graph.set(this._opts.state, path, value) |
18 | } |
19 | |
20 | sendMessage (portObj, message) { |
21 | const vm = this.getInstaceFromPort(portObj) |
22 | vm.queue(message) |
23 | } |
24 | |
25 | getVMFromPort (port) { |
26 | const id = Kernel.id(port) |
27 | let kernel = this._vms.get(id) |
28 | if (!kernel) { |
29 | kernel = new Kernel(port) |
30 | kernel.on('idle', () => { |
31 | this._vms.delete(id) |
32 | }) |
33 | this._vms.set(id, kernel) |
34 | } |
35 | } |
36 | |
37 | // given a port, wait untill its source contract has reached the threshold |
38 | // tick count |
39 | waitOnPort (port, ticks) { |
40 | const kernel = this.getVMFromPort(port) |
41 | const message = new PollMessage(ticks) |
42 | kernel.queue(message) |
43 | return message.response() |
44 | } |
45 | } |
46 |
Built with git-ssb-web