class Kageuchi::Server

Attributes

logs[R]
status[R]

Public Class Methods

new(port) click to toggle source
# File lib/kageuchi/server.rb, line 9
def initialize(port)
  @port = port
  @logs = []
  @status = :created
end

Public Instance Methods

close() click to toggle source
# File lib/kageuchi/server.rb, line 48
def close
  @server.close
  @status = :closed
end
start() click to toggle source
# File lib/kageuchi/server.rb, line 15
def start
  @server = TCPServer.open(@port)

  loop do
    socket = @server.accept
    match = socket.gets.chomp.match(/^(?<verb>[A-Z]*) (?<path>[^ ]*) (?<ver>.*)$/)
    if match
      headers = []
      while line = socket.gets.chomp
        break if line.bytesize.zero?

        headers << line.split(": ")
      end
      request = {
        VERB: match[:verb],
        PATH: match[:path],
        VERSION: match[:ver],
        HEDERS: headers
      }
      @logs << request
      pp request
    end

    @status = :running
    next unless line.bytesize.zero?

    socket.write "HTTP/1.1 200 OK\r\n"
    socket.write "\r\n"
    socket.write "Hello. This is Kageuchi server\r\n"
    socket.close
  end
end