lib/alo7/net/client.rb in alo7-net-0.1.0 vs lib/alo7/net/client.rb in alo7-net-0.1.1

- old
+ new

@@ -21,25 +21,34 @@ # Connect to a given host/port and re-use the instance. # # @param host [String] host to connect to # @param port [Integer] port to connect to # @return [self] + # + # @raise if another {#reconnect} is under progress def reconnect(host, port) + raise AnotherReconnectingUnderProgress.new 'another reconnecting is under progress' if impl.connect_defer Net.reconnect self, host, port self.class.await_connect self end + # @private + class Impl < Connection::Impl + attr_accessor :connect_defer + + def connection_completed + connect_defer, @connect_defer = @connect_defer, nil + connect_defer.succeed + super + end + end + class << self # @private def await_connect(connection) defer = Defer.new - connection.define_singleton_method :connection_completed do - defer.succeed - end + connection.impl.connect_defer = defer Net.await defer - connection.singleton_class.instance_eval do - remove_method :connection_completed - end connection end end end end