Method: HTTPX::Selector#register

Defined in:
lib/httpx/selector.rb

#register(io, interests) ⇒ Object

register io for interests events.



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/httpx/selector.rb', line 66

def register(io, interests)
  readable = interests == :r || interests == :rw
  writable = interests == :w || interests == :rw
  @lock.synchronize do
    if readable
      monitor = @readers[io]
      if monitor
        monitor.interests = interests
      else
        monitor = Monitor.new(io, interests, self)
      end
      @readers[io] = monitor
      @writers.delete(io) unless writable
    end
    if writable
      monitor = @writers[io]
      if monitor
        monitor.interests = interests
      else
        # reuse object
        monitor = readable ? @readers[io] : Monitor.new(io, interests, self)
      end
      @writers[io] = monitor
      @readers.delete(io) unless readable
    end
    monitor
  end
end