---
title: "`epivizrServer` Usage"
author: "Hector Corrada Bravo"
date: "`r Sys.Date()`"
output: BiocStyle::html_document
vignette: >
  %\VignetteIndexEntry{epivizrServer Usage}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

The `r Biocpkg("epivizrServer")` package includes methods providing WebSocket connection server and request/response message
handling for the epiviz JS application [http://epiviz.github.io](http://epiviz.github.io). These functions have been extracted from the `r Biocpkg("epivizr")` Bioconductor package into its own package for easier use and maintenance.

It is based on the `r CRANpkg("httpuv")` package, which provides an interface to the libuv networking library. 

### Usage 

```{r}
library(epivizrServer)

# create the server (but it's not started yet)
# it can serve static html files as well
# using the 'static_site_path' argument
server <- createServer(port=7123, verbose=FALSE)

# register a callback to evaluate when a request with given action
# is received
server$register_action("getData", function(request_data) {
  list(x=1,y=3)
})

# start the server
server$start_server()

# send a request with callback to evaluate when successful response is received
server$send_request(list(x=2,y=5), function(response_data) {
  cat(response_data$x)
})

# in Windows platform this is required to listen and respond to requests
#server$service()

# when done, stop the server
server$stop_server()

# in interactive sessions it is good practice
# to add a `stop_server` call to the R exit hooks
# to relase network port used
server$start_server()
on.exit(server$stop_server())
```

