Module: Rex::IO::StreamServer
- Included in:
- Socket::TcpServer
- Defined in:
- lib/rex/io/stream_server.rb
Overview
This mixin provides the framework and interface for implementing a streaming server that can listen for and accept stream client connections. Stream servers extend this class and are required to implement the following methods:
accept
fd
Instance Attribute Summary collapse
-
#client_waiter ⇒ Object
Returns the value of attribute client_waiter.
-
#clients ⇒ Object
:nodoc:.
-
#clients_thread ⇒ Object
:nodoc:.
-
#listener_thread ⇒ Object
:nodoc:.
-
#on_client_close_proc ⇒ Object
This callback procedure can be set and will be called when a client disconnects from the server.
-
#on_client_connect_proc ⇒ Object
This callback procedure can be set and will be called when new clients connect.
-
#on_client_data_proc ⇒ Object
This callback procedure can be set and will be called when clients have data to be processed.
Instance Method Summary collapse
-
#close_client(client) ⇒ Object
This method closes a client connection and cleans up the resources associated with it.
-
#on_client_close(client) ⇒ Object
This callback is notified when a client connection has closed.
-
#on_client_connect(client) ⇒ Object
This callback is notified when a client connects.
-
#on_client_data(client) ⇒ Object
This callback is notified when a client connection has data that needs to be processed.
-
#start ⇒ Object
Start monitoring the listener socket for connections and keep track of all client connections.
-
#stop ⇒ Object
Terminates the listener monitoring threads and closes all active clients.
-
#wait ⇒ Object
This method waits on the server listener thread.
Instance Attribute Details
#client_waiter ⇒ Object
Returns the value of attribute client_waiter.
135 136 137 |
# File 'lib/rex/io/stream_server.rb', line 135 def client_waiter @client_waiter end |
#clients ⇒ Object
:nodoc:
133 134 135 |
# File 'lib/rex/io/stream_server.rb', line 133 def clients @clients end |
#clients_thread ⇒ Object
:nodoc:
134 135 136 |
# File 'lib/rex/io/stream_server.rb', line 134 def clients_thread @clients_thread end |
#listener_thread ⇒ Object
:nodoc:
134 135 136 |
# File 'lib/rex/io/stream_server.rb', line 134 def listener_thread @listener_thread end |
#on_client_close_proc ⇒ Object
This callback procedure can be set and will be called when a client disconnects from the server.
131 132 133 |
# File 'lib/rex/io/stream_server.rb', line 131 def on_client_close_proc @on_client_close_proc end |
#on_client_connect_proc ⇒ Object
This callback procedure can be set and will be called when new clients connect.
121 122 123 |
# File 'lib/rex/io/stream_server.rb', line 121 def on_client_connect_proc @on_client_connect_proc end |
#on_client_data_proc ⇒ Object
This callback procedure can be set and will be called when clients have data to be processed.
126 127 128 |
# File 'lib/rex/io/stream_server.rb', line 126 def on_client_data_proc @on_client_data_proc end |
Instance Method Details
#close_client(client) ⇒ Object
This method closes a client connection and cleans up the resources associated with it.
93 94 95 96 97 98 99 100 101 102 |
# File 'lib/rex/io/stream_server.rb', line 93 def close_client(client) if (client) clients.delete(client) begin client.close rescue IOError end end end |
#on_client_close(client) ⇒ Object
This callback is notified when a client connection has closed.
55 56 57 58 59 |
# File 'lib/rex/io/stream_server.rb', line 55 def on_client_close(client) if (on_client_close_proc) on_client_close_proc.call(client) end end |
#on_client_connect(client) ⇒ Object
This callback is notified when a client connects.
36 37 38 39 40 |
# File 'lib/rex/io/stream_server.rb', line 36 def on_client_connect(client) if (on_client_connect_proc) on_client_connect_proc.call(client) end end |
#on_client_data(client) ⇒ Object
This callback is notified when a client connection has data that needs to be processed.
46 47 48 49 50 |
# File 'lib/rex/io/stream_server.rb', line 46 def on_client_data(client) if (on_client_data_proc) on_client_data_proc.call(client) end end |
#start ⇒ Object
Start monitoring the listener socket for connections and keep track of all client connections.
65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/rex/io/stream_server.rb', line 65 def start self.clients = [] self.client_waiter = ::Queue.new self.listener_thread = Rex::ThreadFactory.spawn("StreamServerListener", false) { monitor_listener } self.clients_thread = Rex::ThreadFactory.spawn("StreamServerClientMonitor", false) { monitor_clients } end |
#stop ⇒ Object
Terminates the listener monitoring threads and closes all active clients.
80 81 82 83 84 85 86 87 |
# File 'lib/rex/io/stream_server.rb', line 80 def stop self.listener_thread.kill self.clients_thread.kill self.clients.each { |cli| close_client(cli) } end |
#wait ⇒ Object
This method waits on the server listener thread
107 108 109 |
# File 'lib/rex/io/stream_server.rb', line 107 def wait self.listener_thread.join if self.listener_thread end |