exclusive_write(**json)
click to toggle source
def exclusive_write(**json)
@tx_mutex.synchronize do
@writer.write(**json)
end
end
run()
click to toggle source
def run
@reader.read do |json|
if json[:method]
msg = Message.find(json[:method]).new(self, json)
@running_requests_from_client[json[:id]] = msg if json[:id]
msg.run
else
callback = @running_requests_from_server.delete(json[:id])
callback&.call(json[:params])
end
end
rescue Exit
end
send_notification(method, params = nil)
click to toggle source
def send_notification(method, params = nil)
exclusive_write(method: method, params: params)
end
send_request(method, **params, &blk)
click to toggle source
def send_request(method, **params, &blk)
id = @request_id += 1
@running_requests_from_server[id] = blk
exclusive_write(id: id, method: method, params: params)
end
send_response(**msg)
click to toggle source
def send_response(**msg)
@running_requests_from_client.delete(msg[:id])
exclusive_write(**msg)
end