Sha256: 85c0c4276fdeb1bfb48b0ad7a28bec3941d49dd06cee963b0bc9e521840de2e1
Contents?: true
Size: 1.39 KB
Versions: 1
Compression:
Stored size: 1.39 KB
Contents
$: << File.join(File.dirname(__FILE__), '..') require 'dist' require 'encoding' require 'messages' require 'rubygems' require 'rack' module Dist class Client include Encoding def initialize(address, rack_port) leave_a_will host, port = address.split(':') @socket = TCPSocket.new(host, port.to_i) @socket << Messages::REQUEST_ROLE receive_message Messages::SEND_ROLE_CONFIRM role = receive_string puts "Your role: #{role.dump}" @socket << Messages::CONFIRM_ROLE send_string @socket, role send_string @socket, rack_port # spin up rack app require "roles/#{role}/app" Thread.new { Rack::Handler::Mongrel.run App.new, :Port => rack_port.to_i } while true receive_message Messages::REQUEST_HEARTBEAT @socket << Messages::HEARTBEAT end rescue UnexpectedMessage puts 'Disconnected.' end private def leave_a_will graceful_death = lambda { @socket.close } %w[INT TERM].each { |code| Signal.trap(code, &graceful_death) } end def receive_message(expected_message=nil) message = @socket.recv(1) raise UnexpectedMessage if expected_message && expected_message != message end def receive_string length = @socket.recv(2).unpack('n')[0] return '' if !length || length < 1 return @socket.recv(length) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
distributed_demo-1.0 | lib/client.rb |