Skip to content

Commit ff4679f

Browse files
authored
Merge pull request #250 from rdeits/hf/julia-1.10
Add PrecompileTools.jl dependency and method to close server
2 parents 3839d9a + bd28bab commit ff4679f

File tree

4 files changed

+25
-6
lines changed

4 files changed

+25
-6
lines changed

Project.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "MeshCat"
22
uuid = "283c5d60-a78f-5afe-a0af-af636b173e11"
33
authors = ["Robin Deits <[email protected]>"]
4-
version = "0.16.0"
4+
version = "0.16.1"
55

66
[deps]
77
Base64 = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
@@ -17,6 +17,7 @@ Logging = "56ddb016-857b-54e1-b83d-db4d58db5568"
1717
MsgPack = "99f44e22-a591-53d1-9472-aa23ef4bd671"
1818
Parameters = "d96e819e-fc66-5662-9728-84c9c7592b0a"
1919
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
20+
PrecompileTools = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
2021
Requires = "ae029012-a4dd-5104-9daa-d747884805df"
2122
Rotations = "6038ab10-8711-5258-84ad-4b1120ba62dc"
2223
Sockets = "6462fe0b-24de-5631-8697-dd941f90decc"
@@ -36,6 +37,7 @@ MeshIO = "0.4"
3637
Meshing = "0.5"
3738
MsgPack = "1"
3839
Parameters = "0.10, 0.11, 0.12"
40+
PrecompileTools = "1"
3941
Requires = "0.5, 1"
4042
Rotations = "1.3"
4143
StaticArrays = "0.10, 0.11, 0.12, 1"

src/MeshCat.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,5 +130,7 @@ function __init__()
130130
setup_integrations()
131131
end
132132

133+
# Code to "exercise" the package - see https://julialang.github.io/PrecompileTools.jl/stable/
134+
include("./precompile.jl")
133135

134136
end

src/precompile.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import PrecompileTools
2+
3+
PrecompileTools.@compile_workload begin
4+
vis = Visualizer()
5+
close_server!(vis.core)
6+
end

src/visualizer.jl

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,19 @@
22
Low-level type which manages the actual meshcat server. See [`Visualizer`](@ref)
33
for the public-facing interface.
44
"""
5-
struct CoreVisualizer
5+
mutable struct CoreVisualizer
66
tree::SceneNode
77
connections::Set{HTTP.WebSockets.WebSocket}
88
host::IPAddr
99
port::Int
10+
server::HTTP.Server
1011

1112
function CoreVisualizer(host::IPAddr = ip"127.0.0.1", default_port=8700)
1213
connections = Set([])
1314
tree = SceneNode()
1415
port = find_open_port(host, default_port, 500)
1516
core = new(tree, connections, host, port)
16-
start_server(core)
17+
core.server = start_server(core)
1718
return core
1819
end
1920
end
@@ -53,14 +54,22 @@ function start_server(core::CoreVisualizer)
5354
if HTTP.WebSockets.isupgrade(http.message)
5455
HTTP.WebSockets.upgrade(http) do websocket
5556
push!(core.connections, websocket)
56-
send_scene(core, websocket)
57+
send_scene(core.tree, websocket)
5758
wait()
5859
end
5960
else
6061
HTTP.streamhandler(router)(http)
6162
end
6263
end
6364
@info "MeshCat server started. You can open the visualizer by visiting the following URL in your browser:\n$(url(core))"
65+
return server
66+
end
67+
68+
function close_server!(core::CoreVisualizer)
69+
if !isnothing(core.server) && isopen(core.server)
70+
HTTP.close(core.server)
71+
@info "MeshCat server closed."
72+
end
6473
end
6574

6675
function url(core::CoreVisualizer)
@@ -95,8 +104,8 @@ function update_tree!(core::CoreVisualizer, cmd::SaveImage, data)
95104
nothing
96105
end
97106

98-
function send_scene(core::CoreVisualizer, connection)
99-
foreach(core.tree) do node
107+
function send_scene(tree::SceneNode, connection)
108+
foreach(tree) do node
100109
if node.object !== nothing
101110
HTTP.WebSockets.send(connection, node.object)
102111
end

0 commit comments

Comments
 (0)