class RuboCop::Server::SocketReader

@api private
This class sends the request read from the socket to server.

def create_command_instance(request)

def create_command_instance(request)
  klass = find_command_class(request.header.command)
  klass.new(request.header.args, token: request.header.token, cwd: request.header.cwd)
end

def find_command_class(command)

def find_command_class(command)
  case command
  when 'stop' then ServerCommand::Stop
  when 'exec' then ServerCommand::Exec
  else
    raise UnknownServerCommandError, "#{command.inspect} is not a valid command"
  end
end

def initialize(socket)

def initialize(socket)
  @socket = socket
end

def parse_header(header)

def parse_header(header)
  token, cwd, command, *args = header.shellsplit
  Header.new(token, cwd, command, args)
end

def parse_request(content)

def parse_request(content)
  raw_header, *body = content.lines
  Request.new(parse_header(raw_header), body.join)
end

def read!

def read!
  request = parse_request(@socket.read)
  stderr = StringIO.new
  Helper.redirect(
    stdin: StringIO.new(request.body),
    stdout: @socket,
    stderr: stderr
  ) do
    create_command_instance(request).run
  end
ensure
  Cache.stderr_path.write(stderr.string)
  @socket.close
end