Sha256: 20238f7355a6ac0ca71b7aa751f557730f380468b65ecedfb2e9ab94e6b26eec

Contents?: true

Size: 1.95 KB

Versions: 3

Compression:

Stored size: 1.95 KB

Contents

require "ext/mysql-binlog-connector-java-#{Ecco::MYSQL_BINLOG_CONNECTOR_VERSION}.jar"
require "ecco/row_event_listener"
require "ecco/save_event_listener"
require "ecco/lifecycle_failure_listener"
require "ecco/error"

module Ecco
  class Client
    DEFAULT_CONNECT_TIMEOUT = 3000 # ms

    extend Forwardable
    def_delegators :@client, :set_server_id, :get_server_id
    def_delegators :@client, :set_keep_alive, :is_keep_alive
    def_delegators :@client, :set_keep_alive_interval, :get_keep_alive_interval
    def_delegators :@client, :set_keep_alive_connect_timeout, :get_keep_alive_connect_timeout
    def_delegators :@client, :set_binlog_filename, :get_binlog_filename
    def_delegators :@client, :set_binlog_position, :get_binlog_position

    java_import com.github.shyiko.mysql.binlog.BinaryLogClient
    java_import java.io.IOException

    def initialize(hostname: "localhost", port: 3306, username:, password:)
      @client = BinaryLogClient.new(hostname, port, username, password)

      @row_event_listener  = RowEventListener.new(self)
      @client.register_event_listener(@row_event_listener)

      @save_event_listener = SaveEventListener.new(self)
      @client.register_event_listener(@save_event_listener)

      @lifecycle_failure_listener = LifecycleFailureListener.new
      @client.register_lifecycle_listener(@lifecycle_failure_listener)
    end

    def on_save_position(&block)
      @save_event_listener.callback = block
    end

    def on_row_event(&block)
      @row_event_listener.callback = block
    end

    def on_communication_failure(&block)
      @lifecycle_failure_listener.callback = block
    end

    def start
      @client.connect
    rescue IOException => e
      raise Ecco::Error::ConnectionError, e.get_message
    end

    def start_in_thread(connect_timeout: DEFAULT_CONNECT_TIMEOUT)
      @client.connect(connect_timeout)
    end

    def connected?
      @client.is_connected
    end

    def stop
      @client.disconnect
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ecco-0.7.0-java lib/ecco/client.rb
ecco-0.6.1-java lib/ecco/client.rb
ecco-0.6.0-java lib/ecco/client.rb