Factory to create HttpServer instances, and hold the libevent base handler

Introduced properties

init and_libevent

nitcorn :: HttpFactory :: and_libevent

Instantiate a server and libvent
fun config: ServerConfig

nitcorn :: HttpFactory :: config

Configuration of this server
protected fun config=(config: ServerConfig)

nitcorn :: HttpFactory :: config=

Configuration of this server
fun run

nitcorn :: HttpFactory :: run

Execute the main listening loop to accept connections

Redefined properties

redef type SELF: HttpFactory

nitcorn $ HttpFactory :: SELF

Type of this instance, automatically specialized in every class
redef init and_libevent

nitcorn :: pthreads $ HttpFactory :: and_libevent

Instantiate a server and libvent
redef fun callback(events: Int)

nitcorn :: signal_handler $ HttpFactory :: callback

Callback on an event
redef fun run

nitcorn :: signal_handler $ HttpFactory :: run

Execute the main listening loop to accept connections
redef fun spawn_connection(buf_ev: NativeBufferEvent, address: String): Connection

nitcorn $ HttpFactory :: spawn_connection

Create a new Connection object for buffer_event

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
fun accept_connection(listener: ConnectionListener, fd: Int, addrin: Pointer, socklen: Int)

libevent :: ConnectionFactory :: accept_connection

Accept a connection on listener
init and_libevent

nitcorn :: HttpFactory :: and_libevent

Instantiate a server and libvent
fun bind_tcp(address: String, port: Int): nullable ConnectionListener

libevent :: ConnectionFactory :: bind_tcp

Listen on the TCP socket at address:port for new connections
fun bind_unix(path: String): nullable ConnectionListener

libevent :: ConnectionFactory :: bind_unix

Listen on a UNIX domain socket for new connections
fun callback(events: Int)

libevent :: EventCallback :: callback

Callback on an event
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
fun config: ServerConfig

nitcorn :: HttpFactory :: config

Configuration of this server
protected fun config=(config: ServerConfig)

nitcorn :: HttpFactory :: config=

Configuration of this server
fun event_base: NativeEventBase

libevent :: ConnectionFactory :: event_base

The NativeEventBase for the dispatch loop of this factory
protected fun event_base=(event_base: NativeEventBase)

libevent :: ConnectionFactory :: event_base=

The NativeEventBase for the dispatch loop of this factory
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun hash: Int

core :: Object :: hash

The hash code of the object.
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun run

nitcorn :: HttpFactory :: run

Execute the main listening loop to accept connections
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
fun spawn_connection(buffer_event: NativeBufferEvent, address: String): Connection

libevent :: ConnectionFactory :: spawn_connection

Create a new Connection object for buffer_event
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_s: String

core :: Object :: to_s

User readable representation of self.
package_diagram nitcorn::HttpFactory HttpFactory libevent::ConnectionFactory ConnectionFactory nitcorn::HttpFactory->libevent::ConnectionFactory libevent::EventCallback EventCallback nitcorn::HttpFactory->libevent::EventCallback core::Object Object libevent::ConnectionFactory->core::Object libevent::EventCallback->core::Object ...core::Object ... ...core::Object->core::Object

Ancestors

interface Object

core :: Object

The root of the class hierarchy.

Parents

class ConnectionFactory

libevent :: ConnectionFactory

Factory to listen on sockets and create new Connection
interface EventCallback

libevent :: EventCallback

Receiver of event callbacks

Class definitions

nitcorn $ HttpFactory
# Factory to create `HttpServer` instances, and hold the libevent base handler
class HttpFactory
	super ConnectionFactory

	# Configuration of this server
	#
	# It should be populated after this object has instanciated
	var config = new ServerConfig.with_factory(self)

	# Instantiate a server and libvent
	#
	# You can use this to create the first `HttpFactory`, which is the most common.
	init and_libevent do init(new NativeEventBase)

	redef fun spawn_connection(buf_ev, address) do return new HttpServer(buf_ev, self, address)

	# Execute the main listening loop to accept connections
	#
	# After the loop ends, the underlying resources are freed.
	#
	# When the environment variable `NIT_TESTING` is set to `true`,
	# the loop is not executed but the resources are still freed.
	fun run
	do
		if "NIT_TESTING".environ != "true" then
			event_base.dispatch
		end

		event_base.free
	end
end
lib/nitcorn/reactor.nit:123,1--153,3

nitcorn :: signal_handler $ HttpFactory
redef class HttpFactory
	super EventCallback

	private var signal_handlers: Array[NativeEvSignal] = [
		new NativeEvSignal(event_base, 2, self), # SIGINT
		new NativeEvSignal(event_base, 15, self) # SIGTERM
		] is lazy

	redef fun run
	do
		for handler in signal_handlers do handler.add
		super
	end

	redef fun callback(events)
	do
		event_base.loopexit
		for handler in signal_handlers do handler.del
	end
end
lib/nitcorn/signal_handler.nit:20,1--39,3

nitcorn :: pthreads $ HttpFactory
redef class HttpFactory
	redef init and_libevent
	do
		use_pthreads
		super
	end
end
lib/nitcorn/pthreads.nit:21,1--27,3