123456789_123456789_123456789_123456789_123456789_

Class: EventMachine::FileWatch

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, Connection
Instance Chain:
self, Connection
Inherits: EventMachine::Connection
Defined in: lib/em/file_watch.rb

Overview

Note:

On Mac OS X, file watching only works when kqueue is enabled

Utility class that is useful for file monitoring. Supported events are

  • File is modified
  • File is deleted
  • File is moved

See Also:

Constant Summary

Class Method Summary

Connection - Inherited

.new

Override .new so subclasses don't have to call super and can ignore connection-specific arguments.

Instance Attribute Summary

Connection - Inherited

#comm_inactivity_timeout

comm_inactivity_timeout returns the current value (float in seconds) of the inactivity-timeout property of network-connection and datagram-socket objects.

#comm_inactivity_timeout=

Allows you to set the inactivity-timeout property for a network connection or datagram socket.

#error?

Returns true if the connection is in an error state, false otherwise.

#notify_readable=

Watches connection for readability.

#notify_readable?,
#notify_writable=

Watches connection for writeability.

#notify_writable?

Returns true if the connection is being watched for writability.

#paused?,
#pending_connect_timeout

The duration after which a TCP connection in the connecting state will fail.

#pending_connect_timeout=

Sets the duration after which a TCP connection in a connecting state will fail.

#signature, #watch_only?

Instance Method Summary

Connection - Inherited

#associate_callback_target

conn_associate_callback_target.

#close_connection

EventMachine::Connection#close_connection is called only by user code, and never by the event loop.

#close_connection_after_writing

A variant of #close_connection.

#connection_completed

Called by the event loop when a remote TCP connection attempt completes successfully.

#detach

Removes given connection from the event loop.

#disable_keepalive

t_disable_keepalive.

#enable_keepalive

t_enable_keepalive.

#get_cipher_bits, #get_cipher_name, #get_cipher_protocol,
#get_idle_time

The number of seconds since the last send/receive activity on this connection.

#get_outbound_data_size

conn_get_outbound_data_size.

#get_peer_cert

If TLS is active on the connection, returns the remote X509 certificate as a string, in the popular PEM format.

#get_peername

This method is used with stream-connections to obtain the identity of the remotely-connected peer.

#get_pid

Returns the PID (kernel process identifier) of a subprocess associated with this Connection object.

#get_proxied_bytes

The number of bytes proxied to another connection.

#get_sni_hostname, #get_sock_opt,
#get_sockname

Used with stream-connections to obtain the identity of the local side of the connection.

#get_status

Returns a subprocess exit status.

#initialize

Stubbed initialize so legacy superclasses can safely call super.

#original_method,
#pause

Pause a connection so that #send_data and #receive_data events are not fired until #resume is called.

#post_init

Called by the event loop immediately after the network connection has been established, and before resumption of the network loop.

#proxy_completed

called when the reactor finished proxying all of the requested bytes.

#proxy_incoming_to

EventMachine::Connection#proxy_incoming_to is called only by user code.

#proxy_target_unbound

Called by the reactor after attempting to relay incoming data to a descriptor (set as a proxy target descriptor with enable_proxy) that has already been closed.

#receive_data

Called by the event loop whenever data has been received by the network connection.

#reconnect

Reconnect to a given host/port with the current instance.

#resume

Resume a connection's #send_data and #receive_data events.

#send_data

Call this method to send data to the remote end of the network connection.

#send_datagram

Sends UDP messages.

#send_file_data

Like Connection#send_data, this sends data to the remote end of the network connection.

#set_sock_opt,
#ssl_handshake_completed

Called by ::EventMachine when the SSL/TLS handshake has been completed, as a result of calling #start_tls to initiate SSL/TLS on the connection.

#ssl_verify_peer

Called by ::EventMachine when :verify_peer => true has been passed to #start_tls.

#start_tls

Call #start_tls at any point to initiate TLS encryption on connected streams.

#stop_proxying

A helper method for disable_proxy

#stream_file_data

Open a file on the filesystem and send it to the remote peer.

#unbind

called by the framework whenever a connection (either a server or client connection) is closed.

Constructor Details

This class inherits a constructor from EventMachine::Connection

Instance Method Details

#file_deleted

This method is abstract.
Note:

On Linux (with inotify), this method will not be called until all open file descriptors to the file have been closed.

Will be called when the file is deleted. Supposed to be redefined by subclasses. When the file is deleted, stop_watching will be called after this to make sure everything is cleaned up correctly.

[ GitHub ]

  
# File 'lib/em/file_watch.rb', line 56

def file_deleted
end

#file_modified

This method is abstract.

Will be called when the file is modified. Supposed to be redefined by subclasses.

[ GitHub ]

  
# File 'lib/em/file_watch.rb', line 45

def file_modified
end

#file_moved

This method is abstract.

Will be called when the file is moved or renamed. Supposed to be redefined by subclasses.

[ GitHub ]

  
# File 'lib/em/file_watch.rb', line 62

def file_moved
end

#pathString

Note:

Current implementation does not pick up on the new filename after a rename occurs.

Returns the path that is being monitored.

[ GitHub ]

  
# File 'lib/em/file_watch.rb', line 38

def path
  @path
end

#receive_data(data)

This method is for internal use only.
[ GitHub ]

  
# File 'lib/em/file_watch.rb', line 21

def receive_data(data)
  case data
  when Cmodified
    file_modified
  when Cdeleted
    file_deleted
  when Cmoved
    file_moved
  end
end

#stop_watching

Discontinue monitoring of the file.

This involves cleaning up the underlying monitoring details with kqueue/inotify, and in turn firing Connection#unbind. This will be called automatically when a file is deleted. User code may call it as well.

[ GitHub ]

  
# File 'lib/em/file_watch.rb', line 69

def stop_watching
  EventMachine::unwatch_filename(@signature)
end