Sha256: e5c03e89bd20ce9845a9623d62573829c2ac675bf1f11fa0c1809391ba48e2b1

Contents?: true

Size: 1.28 KB

Versions: 1

Compression:

Stored size: 1.28 KB

Contents

# encoding: utf-8

module Hatetepe
  module Connection
    class EventMachine < EM::Connection
      include Promise::Attribute
      promise :closed

      def initialize(callback = proc {})
        @parser = HTTP::Parser.new(self)
        callback.call(self)
      end

      def parse(block)
        @parse = block
      end

      def serialize(message)
        serializer = Serializer.new(message, method(:send_data))
        serializer.setup_body
        serializer.serialize
      end

      def receive_data(data)
        # p [__id__, :receive, data]
        # p data
        @parser << data
      # rescue => error
      #   $stderr.puts(error.to_s)
      #   @message.reject_close(error) if @message
      #   close_connection
      end

      # def send_data(data)
      #   # p [__id__, :send, data]
      #   p data
      #   super
      # end

      def close
        @reason ||= :self
        close_connection_after_writing
      end

      def unbind(reason)
        closed.fulfill(@reason || reason)
      end

      def on_headers_complete(_)
        @message = Support::Message.build(@parser)
        @parse.call(@message)
      end

      def on_body(chunk)
        @message.body.closed.progress(chunk)
      end

      def on_message_complete
        @message.close
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hatetepe-0.6.0.pre.2 lib/hatetepe/connection/eventmachine.rb