The middleware will inject a script in the HTML documents send by your applications (HTTP response with the text/htmlContent-Type). The script tries to open a connection to the server and keep it open. When the connection is lost, the script will try to re-connect for 10 seconds, and upon a successfull re-connection, will refresh the current page.
The route is the HTTP endpoint used for the WebSocket connection. It does nothing but open a WebSocket connection.
This allows to automate parts of your workflows: when you rebuild your project, stop the previous instance of your server and start a new one, the client will automatically detect it and refresh the page.
To automate your workflow completely, you can use a script to automatically rebuild and restart your server on filesystem changes:
#!/usr/bin/env bash
source_dirs="lib bin"
args=${*:-"bin/server.exe"}
cmd="dune exec ${args}"
function sigint_handler() {
kill "$(jobs -pr)"
exit 1
}
trap sigint_handler SIGINT
while true; do
dune build
$cmd &
fswatch -r -1 $source_dirs
printf "\nRestarting server.exe due to filesystem change\n"
kill "$(jobs -pr)"
done
This will watch the directories bin/ and lib/ and restart the server at bin/server.exe on any changes.