Class: Susi::QMP

Inherits:
Object
  • Object
show all
Defined in:
lib/qmp.rb

Instance Method Summary collapse

Constructor Details

#initialize(port) ⇒ QMP

Returns a new instance of QMP.



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
# File 'lib/qmp.rb', line 8

def initialize(port)
  Susi::debug "Connecting to QMP on port #{port}"

  @port = port
  @server = TCPSocket.new('localhost', @port)

  Susi::debug "QMP connected"

  resp = JSON.parse(@server.gets)
  unless resp["QMP"]["version"]["qemu"]["major"] == 9
    server.close
    raise "QEMU version not supported"
  end

  # handshake to initialize QMP
  @server.puts('{"execute":"qmp_capabilities"}')
  resp = JSON.parse(@server.gets)
  unless resp["return"] == {}
    server.close
    raise "Failed to connect to QMP socket"
  end

  if block_given?
    yield(self)
    self.close
  end
end

Instance Method Details

#close ⇒ Object



59
60
61
62
# File 'lib/qmp.rb', line 59

def close
  Susi::debug "Closing QMP connection"
  @server.close
end

#execute(cmd) ⇒ Object



36
37
38
39
40
# File 'lib/qmp.rb', line 36

def execute(cmd)
  @server.puts(JSON.dump({"execute" => cmd}))
  resp = JSON.parse(@server.gets)
  resp["return"]
end

#execute_with_args(cmd, args) ⇒ Object



42
43
44
45
46
# File 'lib/qmp.rb', line 42

def execute_with_args(cmd, args)
  @server.puts(JSON.dump({"execute" => cmd, "arguments" => args}))
  resp = JSON.parse(@server.gets)
  resp["return"]
end

#name ⇒ Object



48
49
50
51
52
# File 'lib/qmp.rb', line 48

def name
  @server.puts('{"execute":"query-name"}')
  resp = JSON.parse(@server.gets)
  resp["return"]["name"]
end

#quit ⇒ Object



54
55
56
57
# File 'lib/qmp.rb', line 54

def quit
  @server.puts('{"execute":"quit"}')
  close
end