Sha256: c4b0eb14255ca762fb75361679574ce24b1d7f456361c82aeaa74c815107d00e

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

require 'eventmachine'
require 'r_socks/connection_handler'
require 'r_socks/config'

module RSocks
  class TcpServer

    attr_reader :config

    def initialize(host = '127.0.0.1', port = 8081)
      @host = host
      @port = port
      @config = RSocks::Config.new
    end

    def run!
      begin
        start_tcp_server
      rescue Interrupt
        puts "\nr_socks TPC main server closed now...."
      end
    end

    private

    def start_tcp_server

      if @config.instances > 1
        spawn_process(@config.instances.to_i)
      else
        EventMachine.run do
          EventMachine.start_server @host, @port, RSocks::ConnectionHandler, @config
        end
      end
    end

    def attach_and_start_server(server)
      EventMachine.run do
        EventMachine.attach_server(server, RSocks::ConnectionHandler, @config)
      end
    end

    def spawn_process(number)

      server = TCPServer.new(@host, @port)

      number.times do |i|
        Process.fork do
          puts "start r_socks instance @#{i}"
          begin
            attach_and_start_server(server)
          rescue Interrupt
            puts "r_socks TPC server instance @#{i} closed now...."
          rescue => e
            puts "r_socks instance @#{i} exit with exception: \r\n#{e.message}"
          end
        end
      end

      Process.waitall
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
r_socks-0.2.4 lib/r_socks/tcp_server.rb