git ssb

0+

wanderer🌟 / js-primea-hypervisor



Tree: 3d251f593ad3a3a4e9b46eaf068ca9dc8ec39bfa

Files: 3d251f593ad3a3a4e9b46eaf068ca9dc8ec39bfa / index.js

1030 bytesRaw
1const Kernel = require('./index.js')
2const PollMessage = require('./pollMessage.js')
3
4module.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