aboutsummaryrefslogblamecommitdiffstats
path: root/lib/action_cable/worker.rb
blob: 6800a75d1d7aeaf4d8a06f1cfc1ddc22da9b2247 (plain) (tree)
1
2
3
4
5
6
7
8
9






                                    
                                       
                            
                                   
         
                         
                                                                      


                                                                          





                                                                                               

       



                                  

     
module ActionCable
  class Worker
    include ActiveSupport::Callbacks
    include Celluloid

    define_callbacks :work

    def invoke(receiver, method, *args)
      run_callbacks :work do
        receiver.send method, *args
      end
    rescue Exception => e
      logger.error "There was an exception - #{e.class}(#{e.message})"
      logger.error e.backtrace.join("\n")

      receiver.handle_exception if receiver.respond_to?(:handle_exception)
    end

    def run_periodic_timer(channel, callback)
      run_callbacks :work do
        callback.respond_to?(:call) ? channel.instance_exec(&callback) : channel.send(callback)
      end
    end

    private
      def logger
        ActionCable::Server.logger
      end
  end
end