require_relative 'printer' module Sapos module Print class QReader class << self attr_accessor :printer_config, :verbose end attr_accessor :pubnub, :printer, :config, :printers def self.run! reader = QReader.new callback = Pubnub::SubscribeCallback.new( message: -> (envelope){ begin msg = envelope.result[:data][:message] msgid = envelope.result.dig(:data, :publish_time_object, :timetoken) print_control = nil document_number = nil puts msg.inspect if reader.config.verbose printer_name = nil if msg.is_a?(Hash) print_control = msg['print_control'] document_number = msg['document_number'] printer_name = msg["printer"] msg = msg['document'] end document = Base64.decode64(msg) current_printer = reader.printer if printer_name && reader.printers[printer_name] current_printer = reader.printers[printer_name] end puts "Printer Config: #{current_printer.to_h}" if reader.config.verbose if !current_printer.print(document: document, print_control: print_control, document_number: document_number, id: msgid, printer: printer_name) puts "Printer Error" end rescue => e puts "Error: #{e.message}" end }, presence: ->(envelope){}, status: ->(envelope){} ) reader.pubnub.add_listener(callback: callback) reader.pubnub.subscribe(channels: [reader.config.q]) ARGV.clear while line = gets do #Wait forever ;-) end end def initialize @config = QReader.printer_config @printer = Printer.new(@config) @printers = {} @config.printers.each do |printer| config = @config.dup config.printer = printer @printers[printer] = Printer.new(config) end @pubnub = Pubnub.new(subscribe_key: @config.key, user_id: @config.user_id, ssl: true) end end end end