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.
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
if root == '/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
format()
Human readable description of the app
start()
Synonymous method to ignite()
reignite()
Resume a session. This is equivalent to ignite()
but will also trigger the resume
event
on()
Add a handler to an event. See the The event cycle in fiery vignette for more information.
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.
attach()
Attach a plugin to the app. See the Creating and using fiery plugins vignette for more information
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
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
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
set_client_id_converter()
Sets the function that converts an HTTP request into a specific client id
log()
Log a message with the logger attached to the app. See loggers for build in functionality
test_request()
Send a request directly to the request logic of a non-running app. Only intended for testing the request logic
test_header()
Send a request directly to the header logic of a non-running app. Only intended for testing the request logic
test_message()
Send a message directly to the message logic of a non-running app. Only intended for testing the websocket logic
test_websocket()
Send a message directly from a non-running app. Only intended for testing the websocket logic
# 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) {
app$ignite(showcase = TRUE)
}