/
server.jl
34 lines (29 loc) · 1.07 KB
/
server.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
"""
ServerOutput(frames, rulset, args...; port=8080, kwargs...)
A basic Mux.jl webserver, serving a [`InteractOutput`](@ref)s to the web.
Unlike ElectronOutput, the parameter modifications are not written back
to the original rulset, and the simulations are not stored.
Each page load gets a identical initialised rulset.
### Arguments
- `init`: `AbstractArray` or `NamedTuple` of `Array`
- `ruleset::Models`: tuple of rulset wrapped in Models().
### Keyword arguments
- `port`: port number to reach the server. ie localhost:8080
- `kwargs`: keyword arguments to be passed to [`InteractOuput`](@ref).
"""
mutable struct ServerOutput{I}
init::I
port::Int
end
ServerOutput(init; port=8080, ruleset, kwargs...) = begin
server = ServerOutput(init, port)
function app(request)
InteractOutput(deepcopy(server.init); ruleset=deepcopy(ruleset), kwargs...).page
end
WebIO.webio_serve(Mux.page("/", request -> app(request)), port)
server
end
show(io::IO, output::ServerOutput) = begin
println(io, typeof(output))
println(io, "Port: ", output.port)
end