The Fire generator creates a new Fire
-object, which is the class containing
all the app logic. The class is based on the R6 OO-system and
is thus reference-based with methods and data attached to each object, in
contrast to the more well known S3 and S4 systems. A fiery
server is event
driven, which means that it is build up and manipulated by adding event
handlers and triggering events. To learn more about the fiery
event model,
read the event vignette.
fiery
servers can be modified directly or by attaching plugins. As with
events, plugins has its own vignette.
Active bindings
host
A string giving a valid IPv4 address owned by the server, or
'0.0.0.0'
to listen on all addresses. The default is'127.0.0.1'
port
An integer giving the port number the server should listen on (defaults to
8080L
)refresh_rate
The interval in seconds between run cycles when running a blocking server (defaults to
0.001
)refresh_rate_nb
The interval in seconds between run cycles when running a non-blocking server (defaults to
1
)trigger_dir
A valid folder where trigger files can be put when running a blocking server (defaults to
NULL
). See the The event cycle in fiery vignette for more information.plugins
A named list of the already attached plugins. Read Only - can only be modified using the
attach()
method.root
The location of the app. Setting this will remove the root value from requests (or decline them with
400
if the request does not match the root). E.g. the path of a request will be changed from/demo/test
to/test
ifroot == '/demo'
access_log_format
A glue string defining how requests will be logged. For standard formats see common_log_format and combined_log_format. Defaults to the Common Log Format
Methods
Method format()
Human readable description of the app
Method start()
Synonymous method to ignite()
Method reignite()
Resume a session. This is equivalent to ignite()
but will also trigger the resume
event
Method on()
Add a handler to an event. See the The event cycle in fiery vignette for more information.
Method trigger()
Trigger an event in the app. This will cause any handler attached to the event to be called. See the The event cycle in fiery vignette for more information.
Method attach()
Attach a plugin to the app. See the Creating and using fiery plugins vignette for more information
Method time()
Add a timed evaluation that will be evaluated after the given number of seconds. See the Delaying code execution in Fiery vignette for more information
Method delay()
Add a delayed evaluation to be evaluated immediately at the end of the loop cycle. See the Delaying code execution in Fiery vignette for more information
Method async()
Add an asynchronous evaluation to be evaluated in another process without blocking the server. See the Delaying code execution in Fiery vignette for more information
Method set_client_id_converter()
Sets the function that converts an HTTP request into a specific client id
Method log()
Log a message with the logger attached to the app. See loggers for build in functionality
Method test_request()
Send a request directly to the request logic of a non-running app. Only intended for testing the request logic
Method test_header()
Send a request directly to the header logic of a non-running app. Only intended for testing the request logic
Method test_message()
Send a message directly to the message logic of a non-running app. Only intended for testing the websocket logic
Method test_websocket()
Send a message directly from a non-running app. Only intended for testing the websocket logic
Examples
# Create a New App
app <- Fire$new(port = 4689)
# Setup the data every time it starts
app$on('start', function(server, ...) {
server$set_data('visits', 0)
server$set_data('cycles', 0)
})
# Count the number of cycles
app$on('cycle-start', function(server, ...) {
server$set_data('cycles', server$get_data('cycles') + 1)
})
# Count the number of requests
app$on('before-request', function(server, ...) {
server$set_data('visits', server$get_data('visits') + 1)
})
# Handle requests
app$on('request', function(server, ...) {
list(
status = 200L,
headers = list('Content-Type' = 'text/html'),
body = paste('This is indeed a test. You are number', server$get_data('visits'))
)
})
# Show number of requests in the console
app$on('after-request', function(server, ...) {
message(server$get_data('visits'))
flush.console()
})
# Terminate the server after 300 cycles
app$on('cycle-end', function(server, ...) {
if (server$get_data('cycles') > 300) {
message('Ending...')
flush.console()
server$extinguish()
}
})
# Be polite
app$on('end', function(server) {
message('Goodbye')
flush.console()
})
if (FALSE) { # \dontrun{
app$ignite(showcase = TRUE)
} # }