Class: OsCtl::Client
- Inherits:
-
Object
- Object
- OsCtl::Client
- Defined in:
- lib/osctl/client.rb
Defined Under Namespace
Constant Summary collapse
- SOCKET =
'/run/osctl/osctld.sock'
Instance Attribute Summary collapse
-
#version ⇒ Object
readonly
Returns the value of attribute version.
Instance Method Summary collapse
- #close ⇒ Object
- #cmd(cmd, **opts) ⇒ Object
- #cmd_data!(cmd, **opts, &block) ⇒ Object
- #cmd_response(cmd, **opts, &block) ⇒ Object
- #cmd_response!(cmd, **opts, &block) ⇒ Object
- #data!(&block) ⇒ Object
-
#initialize(sock = SOCKET) ⇒ Client
constructor
A new instance of Client.
- #open ⇒ Object
- #parse(raw) ⇒ Object
- #receive ⇒ Object
- #receive_resp(&block) ⇒ Object
- #receive_version ⇒ Object
- #response!(&block) ⇒ Object
- #send_io(io) ⇒ Object
- #socket ⇒ Object
Constructor Details
Instance Attribute Details
#version ⇒ Object (readonly)
Returns the value of attribute version.
44 45 46 |
# File 'lib/osctl/client.rb', line 44 def version @version end |
Instance Method Details
#close ⇒ Object
132 133 134 |
# File 'lib/osctl/client.rb', line 132 def close @sock.close end |
#cmd(cmd, **opts) ⇒ Object
57 58 59 |
# File 'lib/osctl/client.rb', line 57 def cmd(cmd, **opts) @sock.puts({cmd: cmd, opts: opts}.to_json) end |
#cmd_data!(cmd, **opts, &block) ⇒ Object
128 129 130 |
# File 'lib/osctl/client.rb', line 128 def cmd_data!(cmd, **opts, &block) cmd_response!(cmd, **opts, &block).data end |
#cmd_response(cmd, **opts, &block) ⇒ Object
113 114 115 116 |
# File 'lib/osctl/client.rb', line 113 def cmd_response(cmd, **opts, &block) cmd(cmd, **opts) receive_resp(&block) end |
#cmd_response!(cmd, **opts, &block) ⇒ Object
118 119 120 121 122 |
# File 'lib/osctl/client.rb', line 118 def cmd_response!(cmd, **opts, &block) ret = cmd_response(cmd, **opts, &block) raise Error, ret. if ret.error? ret end |
#data!(&block) ⇒ Object
124 125 126 |
# File 'lib/osctl/client.rb', line 124 def data!(&block) receive_resp!(&block).data end |
#open ⇒ Object
51 52 53 54 55 |
# File 'lib/osctl/client.rb', line 51 def open @sock = UNIXSocket.new(@sock_path) greetings = receive_version @version = greetings[:version] end |
#parse(raw) ⇒ Object
136 137 138 |
# File 'lib/osctl/client.rb', line 136 def parse(raw) JSON.parse(raw, symbolize_names: true) end |
#receive ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/osctl/client.rb', line 65 def receive buf = "" while m = @sock.recv(1024) buf = buf + m raise Error, 'osctld closed connection' if m.nil? || m.empty? break if m[-1].chr == "\n" end buf.split("\n") end |
#receive_resp(&block) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/osctl/client.rb', line 81 def receive_resp(&block) loop do if @buffer.any? msgs = @buffer else msgs = receive end while msgs.any? msg = msgs.shift resp = Response.new(parse(msg)) # Proper response unless resp.update? @buffer = msgs return resp end # Update block.call(resp.) if block end end end |
#receive_version ⇒ Object
77 78 79 |
# File 'lib/osctl/client.rb', line 77 def receive_version parse(receive[0]) end |
#response!(&block) ⇒ Object
107 108 109 110 111 |
# File 'lib/osctl/client.rb', line 107 def response!(&block) ret = receive_resp(&block) raise Error, ret. if ret.error? ret end |
#send_io(io) ⇒ Object
61 62 63 |
# File 'lib/osctl/client.rb', line 61 def send_io(io) @sock.send_io(io) end |
#socket ⇒ Object
140 141 142 |
# File 'lib/osctl/client.rb', line 140 def socket @sock end |