Sha256: 8cb801816d32680e97f8ac84d7aa2e90d47dd181a912ac5e0587a0341f4bec8c

Contents?: true

Size: 1.5 KB

Versions: 4

Compression:

Stored size: 1.5 KB

Contents


#
# This reduces load on the reactor thread.
#	Use as a helper if desired
#
module Control
	class Deferred < EventMachine::Connection
		def initialize(*args)
			super

			@selected = nil
			@receive_queue = Queue.new
			@command_lock = Mutex.new
		end
		
		def post_init
			return unless self.respond_to?(:initiate_session)
			begin
				self.initiate_session
			rescue => e
				if !@system.nil?
					@system.logger.error "-- in defferred.rb, post_init : bad user code in #{self.class}.initiate_session --"
					@system.logger.error e.message
					@system.logger.error e.backtrace
				end
			end
		end
		
		def connection_completed
			if self.respond_to?(:connected)
				EM.defer do
					begin
						self.connected
					rescue => e
						if !@system.nil?
							@system.logger.error "-- in defferred.rb, connection_completed : bad user code in #{self.class}.connected --"
							@system.logger.error e.message
							@system.logger.error e.backtrace
						end
					end
				end
			end
		end
		
		def unbind
			@selected.disconnected(self) unless @selected.nil?
		end
		
		def receive_data(data)
			@receive_queue.push(data)
			EM.defer do
				begin
					@command_lock.synchronize {
						self.received
					}
				rescue => e
					if !@system.nil?
						@system.logger.error "-- in defferred.rb, receive_data : bad user code in #{self.class}.received --"
						@system.logger.error e.message
						@system.logger.error e.backtrace
					end
				end
			end
		end
	end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
automate-em-0.0.4 lib/automate-em/interfaces/OLD CODE/deferred.rb
automate-em-0.0.3 lib/automate-em/interfaces/OLD CODE/deferred.rb
automate-em-0.0.2 lib/automate-em/interfaces/OLD CODE/deferred.rb
automate-em-0.0.1 lib/automate-em/interfaces/OLD CODE/deferred.rb