Sha256: 059e6f7ede58fb26070e510550abed526fb8e384268c98396b60a3024900a923

Contents?: true

Size: 927 Bytes

Versions: 1

Compression:

Stored size: 927 Bytes

Contents

require 'socket'

module JCukeForker
  class StatusServer
    include Observable

    attr_reader :port

    def initialize(port = '6333')
      @server = ::TCPServer.new 'localhost', port
      @port = @server.connect_address.ip_port
      @thread_pool = []
    end

    def run
      @master_thread = Thread.new do
        loop do
          socket = @server.accept
          @thread_pool << Thread.new { handle_connection(socket) }
        end
      end
    end

    def shutdown
      if @server
        @server.close
        @master_thread.terminate
        @thread_pool.each(&:terminate)
      end
    end

    def handle_connection(socket)
      until socket.eof? do
        raw_message = socket.gets
        json_obj = JSON.parse raw_message
        fire json_obj.first, *json_obj[1..-1]
      end
      socket.close
    end

    private

    def fire(*args)
      changed
      notify_observers *args
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jcukeforker-0.2.10 lib/jcukeforker/status_server.rb