Sha256: 685da3d431d4c446a13269ebd3392f1daae793583cfbe5d255dd5e73b9aa0882

Contents?: true

Size: 924 Bytes

Versions: 2

Compression:

Stored size: 924 Bytes

Contents

class Midori::Connection
  include Midori::Server

  attr_accessor :data

  def initialize(socket)
    @registered = false
    @socket = socket
    @monitor = nil
    @close_flag = false
    @data = ''
    listen(socket)
  end

  def listen(socket)
    EventLoop.register(socket, :rw) do |monitor|
      @monitor = monitor
      if monitor.readable?
        receive_data(monitor)
      end
      if monitor.writable?
        if !@data.empty?
          monitor.io.write_nonblock(@data)
          @data = ''
        elsif @close_flag
          close_connection
        end
      end
    end
  end

  def send_data(data)
    if @monitor.writable?
      @socket.write_nonblock(data)
    else
      @data << data
    end
  end

  def close_connection
    begin
      EventLoop.unregister @socket
      @socket.close
    rescue => e
      puts e
    end
  end

  def close_connection_after_writing
    @close_flag = true
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
em-midori-0.1.10 lib/midori/connection.rb
em-midori-0.1.9 lib/midori/connection.rb