class Isomorfeus::Speednode::Runtime::VMCommand
Public Class Methods
new(socket, cmd, arguments)
click to toggle source
# File lib/isomorfeus/speednode/runtime/vm_command.rb, line 5 def initialize(socket, cmd, arguments) @socket = socket @cmd = cmd @arguments = arguments end
Public Instance Methods
execute()
click to toggle source
# File lib/isomorfeus/speednode/runtime/vm_command.rb, line 11 def execute result = '' message = ::Oj.dump({ 'cmd' => @cmd, 'args' => @arguments }, mode: :strict) message = message + "\x04" bytes_to_send = message.bytesize sent_bytes = 0 if ExecJS.windows? @socket.write(message) begin result << @socket.read end until result.end_with?("\x04") else sent_bytes = @socket.sendmsg(message) if sent_bytes < bytes_to_send while sent_bytes < bytes_to_send sent_bytes += @socket.sendmsg(message.byteslice((sent_bytes)..-1)) end end begin result << @socket.recvmsg()[0] end until result.end_with?("\x04") end ::Oj.load(result.chop!, create_additions: false) end