Module: NeverBlock::DB::FiberedDBConnection

Included in:
FiberedMysqlConnection, FiberedPostgresConnection
Defined in:
lib/never_block/db/fibered_db_connection.rb

Instance Method Summary collapse

Instance Method Details

#event_loop_connection_closeObject

Closes the connection using event loop



43
44
45
# File 'lib/never_block/db/fibered_db_connection.rb', line 43

def event_loop_connection_close
  @fiber[:em_connection].close_connection if @fiber[:em_connection]
end

#register_with_event_loopObject

Attaches the connection socket to an event loop and adds a callback to the fiber’s callbacks that unregisters the connection from event loop Raises NB::NBError



8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/never_block/db/fibered_db_connection.rb', line 8

def register_with_event_loop
  #puts ">>>>>register_with_event_loop"
  if EM.reactor_running?
    @fiber = Fiber.current
    #puts ">>>>>register_with_event_loop fiber #{@fiber.inspect}"
    # When there's no previous em_connection
    unless @fiber[:em_connection]
      @fiber[:em_connection] = EM::attach(socket,EMConnectionHandler,self)
      @fiber[:callbacks] << self.method(:unregister_from_event_loop)
    end
  else
    raise ::NB::NBError.new("FiberedDBConnection: EventMachine reactor not running")
  end
end

#remove_unregister_from_event_loop_callbacksObject

Removes the unregister_from_event_loop callback from the fiber’s callbacks. It should be used when errors occur in an already registered connection



38
39
40
# File 'lib/never_block/db/fibered_db_connection.rb', line 38

def remove_unregister_from_event_loop_callbacks
  @fiber[:callbacks].delete self.method(:unregister_from_event_loop)
end

#resume_commandObject

The callback, this is called whenever there is data available at the socket



49
50
51
# File 'lib/never_block/db/fibered_db_connection.rb', line 49

def resume_command
  @fiber.resume if @fiber
end

#unregister_from_event_loopObject

Unattaches the connection socket from the event loop



24
25
26
27
28
29
30
31
32
33
# File 'lib/never_block/db/fibered_db_connection.rb', line 24

def unregister_from_event_loop
  #puts ">>>>>unregister_from_event_loop #{self.inspect} #{@fiber.inspect}"
  if em_c = @fiber[:em_connection]
    em_c.detach
    @fiber[:em_connection] = nil
    true
  else
    false
  end
end