Sha256: 10a542e9110149dca2050149ad53bca5da6f68a1bc421227fd692bf95b81f2b9

Contents?: true

Size: 1.42 KB

Versions: 1

Compression:

Stored size: 1.42 KB

Contents

require 'docker'
require 'awesome_print'
require 'socket'
require 'celluloid/io'
require 'celluloid/autostart'
require 'json'

module Baleen

  class Server
    include Celluloid::IO
    finalizer :shutdown

    def initialize(docker_host: "127.0.0.1", docker_port: 4243, port: 5533)
      Docker.url = "http://#{docker_host}:#{docker_port}"
      @server = TCPServer.new("0.0.0.0", port)
      async.run
    end

    def run
      loop { async.handle_connection @server.accept }
    end

    def shutdown
      @server.close if @server
    end

    def handle_connection(socket)
      loop { handle_request(socket) }

    rescue Exception => ex
      case ex
        when IOError; nil # when trying to close already closed socket
        else
          warn "Unknown exception occured"
          ap ex
          raise ex
      end
    end

    def handle_request(socket)
      message = socket.gets

      if message.nil?
        socket.close
        return
      end
      msg = parse_request(message)

      case msg
        when Message::Request::ClientDisconnect
          socket.close
        when Message::Request::Cucumber
          manager = RunnerManager.new(socket, msg)
          manager.run
        else
          warn "Received unknown request"
          ap msg
      end
    end

    def parse_request(message)
      #info "Got request from client"
      #ap message
      Baleen::Message::Decoder.new(message).decode
    end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
baleen-0.0.11 lib/baleen/server.rb