Changeset 294

Show
Ignore:
Timestamp:
12/21/07 11:32:02 (8 months ago)
Author:
gethema..@gmail.com
Message:

check in fix that allows passing of activerecord models across wire

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/framework/core.rb

    r283 r294  
    9797        @read_ios.delete(t_sock) 
    9898        @write_ios.delete(t_sock) 
    99         connections.delete(t_sock.fileno) 
    100         t_sock.close 
     99        begin 
     100          connections.delete(t_sock.fileno) 
     101          t_sock.close 
     102        rescue 
     103        end 
    101104      end 
    102105 
     
    195198          handler_instance.receive_data(t_data) if handler_instance.respond_to?(:receive_data) 
    196199        rescue DisconnectError => sock_error 
     200          handler_instance.receive_data(sock_error.data) if handler_instance.respond_to?(:receive_data) 
    197201          handler_instance.unbind if handler_instance.respond_to?(:unbind) 
    198202          connections.delete(t_sock.fileno) 
  • trunk/framework/disconnect_error.rb

    r217 r294  
    11module Packet 
    22  class DisconnectError < RuntimeError 
    3     attr_accessor :disconnected_socket 
    4     def initialize(t_sock
     3    attr_accessor :disconnected_socket,:data 
     4    def initialize(t_sock,data = nil
    55      @disconnected_socket = t_sock 
     6      @data = data 
    67    end 
    78  end 
  • trunk/framework/meta_pimp.rb

    r287 r294  
    6060        reactor.connections[client_signature].instance.worker_receive(data_options) 
    6161      rescue 
    62         puts "Error sending message back to client, it got disconnected" 
    6362      end 
    6463    end 
  • trunk/framework/nbio.rb

    r275 r294  
    1515      begin 
    1616        while(t_data = t_sock.recv_nonblock(1023)) 
    17           raise DisconnectError.new(t_sock) if t_data.empty? 
     17          raise DisconnectError.new(t_sock,sock_data) if t_data.empty? 
    1818          sock_data << t_data 
    1919        end 
     
    2121        return sock_data 
    2222      rescue 
    23         puts "Some read error" 
    24         raise DisconnectError.new(t_sock) 
     23        raise DisconnectError.new(t_sock,sock_data) 
    2524      end 
    2625    end 
     
    3534      t_length = t_data.length 
    3635      begin 
    37         p_sock.write_nonblock(t_data) 
     36        loop do 
     37          break if t_length <= 0 
     38          written_length = p_sock.write_nonblock(t_data) 
     39          p_sock.flush 
     40          t_data = t_data[written_length..-1] 
     41          t_length = t_data.length 
     42        end 
    3843      rescue Errno::EAGAIN 
     44        puts "oho" 
    3945        return 
    4046      rescue Errno::EPIPE 
    4147        raise DisconnectError.new(p_sock) 
    42       end 
    43     end 
    44  
    45     # method writes data to socket in a non blocking manner, but doesn't care if there is a error writing data 
    46     def write_once(p_data,p_sock) 
    47       t_data = p_data.dup.to_s 
    48       begin 
    49         p_sock.write_nonblock(t_data) 
    50       rescue Errno::EAGAIN 
    51         return 
    52       rescue Errno::EPIPE 
     48      rescue 
    5349        raise DisconnectError.new(p_sock) 
    5450      end 
     
    6157      length_str = dump_length.rjust(9,'0') 
    6258      final_data = length_str + object_dump 
    63       begin 
    64         p_sock.write_nonblock(final_data) 
    65       rescue Errno::EAGAIN 
    66         puts "EAGAIN Error while writing socket" 
    67         return 
    68       rescue Errno::EINTR 
    69         puts "Interrupt error" 
    70         return 
    71       rescue Errno::EPIPE 
    72         puts "Pipe error" 
    73         raise DisconnectError.new(p_sock) 
    74       end 
     59      write_data(final_data,p_sock) 
     60 
     61#       final_data_length = final_data.length 
     62#       begin 
     63#         p_sock.write_nonblock(final_data) 
     64#         write_da 
     65#       rescue Errno::EAGAIN 
     66#         puts "EAGAIN Error while writing socket" 
     67#         return 
     68#       rescue Errno::EINTR 
     69#         puts "Interrupt error" 
     70#         return 
     71#       rescue Errno::EPIPE 
     72#         puts "Pipe error" 
     73#         raise DisconnectError.new(p_sock) 
     74#       end 
    7575    end 
    7676  end 
  • trunk/lib/backgroundrb.rb

    r273 r294  
    5656    dump_object(p_data,@connection) 
    5757    # @connection.close 
    58   end 
    59  
    60   def send_data p_data 
    61     begin 
    62       @connection.write_nonblock(p_data) 
    63     rescue Errno::EAGAIN 
    64       return 
    65     end 
    6658  end 
    6759 
  • trunk/server/master_worker.rb

    r286 r294  
    11#!/usr/bin/env ruby 
     2 
    23 
    34module BackgrounDRb 
     
    144145      RAILS_ENV.replace(run_env) if defined?(RAILS_ENV) 
    145146      require RAILS_HOME + '/config/environment.rb' 
     147      load_rails_models 
    146148      ActiveRecord::Base.allow_concurrency = true 
     149    end 
     150 
     151    def load_rails_models 
     152      model_root = RAILS_HOME + "/app/models" 
     153      models = Dir["#{model_root}/**/*.rb"] 
     154      models.each { |x| require x } 
    147155    end 
    148156