class DpStmMap::ClientHandler

Public Class Methods

new(client_transport, transaction_handler) click to toggle source
# File lib/dp_stm_map/Manager.rb, line 287
def initialize client_transport, transaction_handler
  @client_transport=client_transport
  @transaction_handler=transaction_handler
  @mutex=Mutex.new
end

Public Instance Methods

handle(message) click to toggle source
# File lib/dp_stm_map/Manager.rb, line 293
def handle message
  @mutex.synchronize do
    if TransactionMessage === message
      @client_transport.send_message message
    end
    if ClientTransactionMessage === message
      begin
        sequence=@transaction_handler.apply_transaction message.transitions, message.new_content
        @client_transport.send_message ClientTransactionSuccessfulMessage.new message.transaction_id, sequence
      rescue StaleTransactionError => e
        @client_transport.send_message ClientTransactionFailedMessage.new message.transaction_id, e.message
      end
    end
  end
end