Changeset 294
- Timestamp:
- 12/21/07 11:32:02 (8 months ago)
- Files:
-
- trunk/framework/core.rb (modified) (2 diffs)
- trunk/framework/disconnect_error.rb (modified) (1 diff)
- trunk/framework/meta_pimp.rb (modified) (1 diff)
- trunk/framework/nbio.rb (modified) (4 diffs)
- trunk/lib/backgroundrb.rb (modified) (1 diff)
- trunk/server/master_worker.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/framework/core.rb
r283 r294 97 97 @read_ios.delete(t_sock) 98 98 @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 101 104 end 102 105 … … 195 198 handler_instance.receive_data(t_data) if handler_instance.respond_to?(:receive_data) 196 199 rescue DisconnectError => sock_error 200 handler_instance.receive_data(sock_error.data) if handler_instance.respond_to?(:receive_data) 197 201 handler_instance.unbind if handler_instance.respond_to?(:unbind) 198 202 connections.delete(t_sock.fileno) trunk/framework/disconnect_error.rb
r217 r294 1 1 module Packet 2 2 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) 5 5 @disconnected_socket = t_sock 6 @data = data 6 7 end 7 8 end trunk/framework/meta_pimp.rb
r287 r294 60 60 reactor.connections[client_signature].instance.worker_receive(data_options) 61 61 rescue 62 puts "Error sending message back to client, it got disconnected"63 62 end 64 63 end trunk/framework/nbio.rb
r275 r294 15 15 begin 16 16 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? 18 18 sock_data << t_data 19 19 end … … 21 21 return sock_data 22 22 rescue 23 puts "Some read error" 24 raise DisconnectError.new(t_sock) 23 raise DisconnectError.new(t_sock,sock_data) 25 24 end 26 25 end … … 35 34 t_length = t_data.length 36 35 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 38 43 rescue Errno::EAGAIN 44 puts "oho" 39 45 return 40 46 rescue Errno::EPIPE 41 47 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 53 49 raise DisconnectError.new(p_sock) 54 50 end … … 61 57 length_str = dump_length.rjust(9,'0') 62 58 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 75 75 end 76 76 end trunk/lib/backgroundrb.rb
r273 r294 56 56 dump_object(p_data,@connection) 57 57 # @connection.close 58 end59 60 def send_data p_data61 begin62 @connection.write_nonblock(p_data)63 rescue Errno::EAGAIN64 return65 end66 58 end 67 59 trunk/server/master_worker.rb
r286 r294 1 1 #!/usr/bin/env ruby 2 2 3 3 4 module BackgrounDRb … … 144 145 RAILS_ENV.replace(run_env) if defined?(RAILS_ENV) 145 146 require RAILS_HOME + '/config/environment.rb' 147 load_rails_models 146 148 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 } 147 155 end 148 156
