mirror of https://github.com/docusealco/docuseal
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
3.1 KiB
123 lines
3.1 KiB
module WEBrick
|
|
module Utils
|
|
#
|
|
# Sets IO operations on +io+ to be non-blocking
|
|
def self?.set_non_blocking: (IO io) -> void
|
|
|
|
#
|
|
# Sets the close on exec flag for +io+
|
|
def self?.set_close_on_exec: (IO io) -> void
|
|
|
|
#
|
|
# Changes the process's uid and gid to the ones of +user+
|
|
def self?.su: (String user) -> void
|
|
|
|
#
|
|
# The server hostname
|
|
def self?.getservername: () -> String
|
|
|
|
#
|
|
# Creates TCP server sockets bound to +address+:+port+ and returns them.
|
|
#
|
|
# It will create IPV4 and IPV6 sockets on all interfaces.
|
|
def self?.create_listeners: (String host, Integer port) -> Array[TCPServer]
|
|
|
|
#
|
|
# Characters used to generate random strings
|
|
RAND_CHARS: String
|
|
|
|
#
|
|
# Generates a random string of length +len+
|
|
def self?.random_string: (Integer len) -> String
|
|
|
|
#
|
|
# Class used to manage timeout handlers across multiple threads.
|
|
#
|
|
# Timeout handlers should be managed by using the class methods which are
|
|
# synchronized.
|
|
#
|
|
# id = TimeoutHandler.register(10, Timeout::Error)
|
|
# begin
|
|
# sleep 20
|
|
# puts 'foo'
|
|
# ensure
|
|
# TimeoutHandler.cancel(id)
|
|
# end
|
|
#
|
|
# will raise Timeout::Error
|
|
#
|
|
# id = TimeoutHandler.register(10, Timeout::Error)
|
|
# begin
|
|
# sleep 5
|
|
# puts 'foo'
|
|
# ensure
|
|
# TimeoutHandler.cancel(id)
|
|
# end
|
|
#
|
|
# will print 'foo'
|
|
#
|
|
class TimeoutHandler
|
|
@queue: Thread::Queue
|
|
|
|
@watcher: Thread?
|
|
|
|
include Singleton
|
|
|
|
#
|
|
# Mutex used to synchronize access across threads
|
|
TimeoutMutex: Thread::Mutex
|
|
|
|
#
|
|
# Registers a new timeout handler
|
|
#
|
|
# +time+:: Timeout in seconds
|
|
# +exception+:: Exception to raise when timeout elapsed
|
|
def self.register: (Numeric seconds, singleton(Exception) exception) -> Integer
|
|
|
|
#
|
|
# Cancels the timeout handler +id+
|
|
def self.cancel: (Integer id) -> bool
|
|
|
|
def self.terminate: () -> Thread?
|
|
|
|
#
|
|
# Creates a new TimeoutHandler. You should use ::register and ::cancel
|
|
# instead of creating the timeout handler directly.
|
|
def initialize: () -> void
|
|
|
|
private
|
|
|
|
def watch: () -> bot
|
|
|
|
def watcher: () -> Thread
|
|
|
|
public
|
|
|
|
#
|
|
# Interrupts the timeout handler +id+ and raises +exception+
|
|
def interrupt: (Thread thread, Integer id, singleton(Exception) exception) -> nil
|
|
|
|
#
|
|
# Registers a new timeout handler
|
|
#
|
|
# +time+:: Timeout in seconds
|
|
# +exception+:: Exception to raise when timeout elapsed
|
|
def register: (Thread thread, Numeric time, singleton(Exception) exception) -> Integer
|
|
|
|
#
|
|
# Cancels the timeout handler +id+
|
|
def cancel: (Thread thread, Integer id) -> bool
|
|
|
|
#
|
|
def terminate: () -> Thread?
|
|
end
|
|
|
|
#
|
|
# Executes the passed block and raises +exception+ if execution takes more
|
|
# than +seconds+.
|
|
#
|
|
# If +seconds+ is zero or nil, simply executes the block
|
|
def self?.timeout: [T] (Numeric? seconds, ?singleton(Exception) exception) { (?Numeric) -> T } -> T
|
|
end
|
|
end
|