Skip to content

Commit

Permalink
added selective forward + per backend unbind notifications
Browse files Browse the repository at this point in the history
  • Loading branch information
igrigorik committed May 8, 2009
1 parent a17d109 commit d723e5a
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 6 deletions.
4 changes: 2 additions & 2 deletions examples/duplex.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
resp if server == :prod
end

conn.on_finish do
p [:on_finish, Time.now - @start]
conn.on_finish do |name|
p [:on_finish, name, Time.now - @start]
p @data
end
end
Expand Down
20 changes: 16 additions & 4 deletions lib/em-proxy/connection.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,19 @@ def initialize

def receive_data(data)
p [:connection, data]
data = @on_data.call(data)
processed = @on_data.call(data)

@servers.values.compact.each do |s|
if processed.is_a? Array
data, servers = *processed

# guard for "unbound" servers
servers = servers.collect {|s| @servers[s]}.compact
else
data = processed
servers ||= @servers.values.compact
end

servers.each do |s|
s.send_data data unless data.nil?
end
end
Expand Down Expand Up @@ -46,15 +56,17 @@ def relay_from_backend(name, data)
def unbind
# terminate any unfinished connections
@servers.values.compact.each do |s|
s.close_connection
s.close_connection_after_writing
end

close_connection_after_writing
@on_finish.call if @on_finish
@on_finish.call(:done) if @servers.values.compact.size.zero?
end

def unbind_backend(name)
p [:unbind_backend, name]
@servers[name] = nil
@on_finish.call(name)
close_connection_after_writing if @servers.values.compact.size.zero?
end

Expand Down

0 comments on commit d723e5a

Please sign in to comment.