Sha256: 4b21e089ba6c3477cc1f69e1c42c6920e86996f17a9a43354bc4435840412344

Contents?: true

Size: 1.62 KB

Versions: 2

Compression:

Stored size: 1.62 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

    attr_accessor :containers

    def initialize(docker_host: "127.0.0.1", docker_port: 4243, port: 5533)
      @base_url = "http://#{docker_host}:#{docker_port}"
      @docker = Docker::API.new(base_url: @base_url)
      @containers = @docker.containers
      @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::PingPong
          socket.puts "pong"
        when Message::Request::ClientDisconnect
          socket.close
        when Message::Request::Cucumber
          manager = RunnerManager.new(@containers, 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

2 entries across 2 versions & 1 rubygems

Version Path
baleen-0.0.10 lib/baleen/server.rb
baleen-0.0.9 lib/baleen/server.rb