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