# File lib/handler/reactor_messaging_adapter.rb, line 55
      def self.open_close(endpoint)
        on_opening = "on_#{endpoint}_opening""on_#{endpoint}_opening"
        on_opened = "on_#{endpoint}_opened""on_#{endpoint}_opened"
        on_closing = "on_#{endpoint}_closing""on_#{endpoint}_closing"
        on_closed = "on_#{endpoint}_closed""on_#{endpoint}_closed"
        on_error = "on_#{endpoint}_error""on_#{endpoint}_error"

        Module.new do
          define_method("on_#{endpoint}_local_open""on_#{endpoint}_local_open") do |event|
            delegate(on_opened, event) if event.context.remote_open?
          end

          define_method("on_#{endpoint}_remote_open""on_#{endpoint}_remote_open") do |event|
            if event.context.local_open?
              delegate(on_opened, event)
            elsif event.context.local_uninit?
              delegate(on_opening, event)
              event.context.open if @opts[:auto_open]
            end
          end

          define_method("on_#{endpoint}_local_close""on_#{endpoint}_local_close") do |event|
            delegate(on_closed, event) if event.context.remote_closed?
          end

          define_method("on_#{endpoint}_remote_close""on_#{endpoint}_remote_close") do |event|
            if event.context.remote_condition
              delegate_error(on_error, event)
            elsif event.context.local_closed?
              delegate(on_closed, event)
            elsif @opts[:peer_close_is_error]
              Condition.assign(event.context.__send__(:_remote_condition), "unexpected peer close")
              delegate_error(on_error, event)
            else
              delegate(on_closing, event)
            end
            event.context.close if @opts[:auto_close]
          end
        end
      end