@@ -2,41 +2,25 @@ module CommManager
22
33using IJulia
44
5- import IJulia: Msg, uuid4, send_ipython, msg_pub
5+ import IJulia: Msg, uuid4, send_ipython, msg_pub, Comm
66
7- export Comm, comm_target, msg_comm, send_comm, close_comm,
7+ export comm_target, msg_comm, send_comm, close_comm,
88 register_comm, comm_msg, comm_open, comm_close, comm_info_request
99
10- mutable struct Comm{target}
11- id:: String
12- primary:: Bool
13- on_msg:: Function
14- on_close:: Function
15- function (:: Type{Comm{target}} )(id, primary, on_msg, on_close) where {target}
16- comm = new {target} (id, primary, on_msg, on_close)
17- comms[id] = comm
18- return comm
19- end
20- end
21-
22- # This dict holds a map from CommID to Comm so that we can
23- # pick out the right Comm object when messages arrive
24- # from the front-end.
25- const comms = Dict {String, Comm} ()
26-
2710noop_callback (msg) = nothing
2811function Comm (target,
2912 id= uuid4 (),
3013 primary= true ,
3114 on_msg= noop_callback,
3215 on_close= noop_callback;
16+ kernel= IJulia. _default_kernel,
3317 data= Dict (),
3418 metadata= Dict ())
3519 comm = Comm {Symbol(target)} (id, primary, on_msg, on_close)
3620 if primary
3721 # Request a secondary object be created at the front end
38- send_ipython (IJulia . publish[],
39- msg_comm (comm, IJulia . execute_msg, " comm_open" ,
22+ send_ipython (kernel . publish[], kernel ,
23+ msg_comm (comm, kernel . execute_msg, " comm_open" ,
4024 data, metadata, target_name= string (target)))
4125 end
4226 return comm
@@ -47,10 +31,10 @@ comm_target(comm :: Comm{target}) where {target} = target
4731function comm_info_request (sock, kernel, msg)
4832 reply = if haskey (msg. content, " target_name" )
4933 t = Symbol (msg. content[" target_name" ])
50- filter (kv -> comm_target (kv. second) == t, comms)
34+ filter (kv -> comm_target (kv. second) == t, kernel . comms)
5135 else
5236 # reply with all comms.
53- comms
37+ kernel . comms
5438 end
5539
5640 _comms = Dict {String, Dict{Symbol,Symbol}} ()
@@ -75,16 +59,16 @@ function msg_comm(comm::Comm, m::IJulia.Msg, msg_type,
7559 return msg_pub (m, msg_type, content, metadata)
7660end
7761
78- function send_comm (comm:: Comm , kernel, data:: Dict ,
79- metadata:: Dict = Dict (); kwargs... )
80- msg = msg_comm (comm, IJulia . execute_msg, " comm_msg" , data,
62+ function send_comm (comm:: Comm , data:: Dict ,
63+ metadata:: Dict = Dict (); kernel = IJulia . _default_kernel, kwargs... )
64+ msg = msg_comm (comm, kernel . execute_msg, " comm_msg" , data,
8165 metadata; kwargs... )
8266 send_ipython (kernel. publish[], kernel, msg)
8367end
8468
85- function close_comm (comm:: Comm , kernel, data:: Dict = Dict (),
86- metadata:: Dict = Dict (); kwargs... )
87- msg = msg_comm (comm, IJulia . execute_msg, " comm_close" , data,
69+ function close_comm (comm:: Comm , data:: Dict = Dict (),
70+ metadata:: Dict = Dict (); kernel = IJulia . _default_kernel, kwargs... )
71+ msg = msg_comm (comm, kernel . execute_msg, " comm_close" , data,
8872 metadata; kwargs... )
8973 send_ipython (kernel. publish[], kernel, msg)
9074end
9781
9882# handlers for incoming comm_* messages
9983
100- function comm_open (sock, msg, kernel )
84+ function comm_open (sock, kernel, msg )
10185 if haskey (msg. content, " comm_id" )
10286 comm_id = msg. content[" comm_id" ]
10387 if haskey (msg. content, " target_name" )
10488 target = msg. content[" target_name" ]
10589 if ! haskey (msg. content, " data" )
10690 msg. content[" data" ] = Dict ()
10791 end
108- comm = Comm (target, comm_id, false )
92+ comm = Comm (target, comm_id, false ; kernel )
10993 invokelatest (register_comm, comm, msg)
110- comms[comm_id] = comm
94+ kernel . comms[comm_id] = comm
11195 else
11296 # Tear down comm to maintain consistency
11397 # if a target_name is not present
11498 send_ipython (kernel. publish[], kernel,
115- msg_comm (Comm (:notarget , comm_id),
99+ msg_comm (Comm (:notarget , comm_id; kernel ),
116100 msg, " comm_close" ))
117101 end
118102 end
119103end
120104
121- function comm_msg (sock, msg)
105+ function comm_msg (sock, kernel, msg)
122106 if haskey (msg. content, " comm_id" )
123107 comm_id = msg. content[" comm_id" ]
124- if haskey (comms, comm_id)
125- comm = comms[comm_id]
108+ if haskey (kernel . comms, comm_id)
109+ comm = kernel . comms[comm_id]
126110 else
127111 # We don't have that comm open
128112 return
@@ -135,17 +119,17 @@ function comm_msg(sock, msg)
135119 end
136120end
137121
138- function comm_close (sock, msg)
122+ function comm_close (sock, kernel, msg)
139123 if haskey (msg. content, " comm_id" )
140124 comm_id = msg. content[" comm_id" ]
141- comm = comms[comm_id]
125+ comm = kernel . comms[comm_id]
142126
143127 if ! haskey (msg. content, " data" )
144128 msg. content[" data" ] = Dict ()
145129 end
146130 comm. on_close (msg)
147131
148- delete! (comms, comm. id)
132+ delete! (kernel . comms, comm. id)
149133 end
150134end
151135
0 commit comments