@@ -2,41 +2,25 @@ module CommManager
2
2
3
3
using IJulia
4
4
5
- import IJulia: Msg, uuid4, send_ipython, msg_pub
5
+ import IJulia: Msg, uuid4, send_ipython, msg_pub, Comm
6
6
7
- export Comm, comm_target, msg_comm, send_comm, close_comm,
7
+ export comm_target, msg_comm, send_comm, close_comm,
8
8
register_comm, comm_msg, comm_open, comm_close, comm_info_request
9
9
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
-
27
10
noop_callback (msg) = nothing
28
11
function Comm (target,
29
12
id= uuid4 (),
30
13
primary= true ,
31
14
on_msg= noop_callback,
32
15
on_close= noop_callback;
16
+ kernel= IJulia. _default_kernel,
33
17
data= Dict (),
34
18
metadata= Dict ())
35
19
comm = Comm {Symbol(target)} (id, primary, on_msg, on_close)
36
20
if primary
37
21
# 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" ,
40
24
data, metadata, target_name= string (target)))
41
25
end
42
26
return comm
@@ -47,10 +31,10 @@ comm_target(comm :: Comm{target}) where {target} = target
47
31
function comm_info_request (sock, kernel, msg)
48
32
reply = if haskey (msg. content, " target_name" )
49
33
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)
51
35
else
52
36
# reply with all comms.
53
- comms
37
+ kernel . comms
54
38
end
55
39
56
40
_comms = Dict {String, Dict{Symbol,Symbol}} ()
@@ -75,16 +59,16 @@ function msg_comm(comm::Comm, m::IJulia.Msg, msg_type,
75
59
return msg_pub (m, msg_type, content, metadata)
76
60
end
77
61
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,
81
65
metadata; kwargs... )
82
66
send_ipython (kernel. publish[], kernel, msg)
83
67
end
84
68
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,
88
72
metadata; kwargs... )
89
73
send_ipython (kernel. publish[], kernel, msg)
90
74
end
97
81
98
82
# handlers for incoming comm_* messages
99
83
100
- function comm_open (sock, msg, kernel )
84
+ function comm_open (sock, kernel, msg )
101
85
if haskey (msg. content, " comm_id" )
102
86
comm_id = msg. content[" comm_id" ]
103
87
if haskey (msg. content, " target_name" )
104
88
target = msg. content[" target_name" ]
105
89
if ! haskey (msg. content, " data" )
106
90
msg. content[" data" ] = Dict ()
107
91
end
108
- comm = Comm (target, comm_id, false )
92
+ comm = Comm (target, comm_id, false ; kernel )
109
93
invokelatest (register_comm, comm, msg)
110
- comms[comm_id] = comm
94
+ kernel . comms[comm_id] = comm
111
95
else
112
96
# Tear down comm to maintain consistency
113
97
# if a target_name is not present
114
98
send_ipython (kernel. publish[], kernel,
115
- msg_comm (Comm (:notarget , comm_id),
99
+ msg_comm (Comm (:notarget , comm_id; kernel ),
116
100
msg, " comm_close" ))
117
101
end
118
102
end
119
103
end
120
104
121
- function comm_msg (sock, msg)
105
+ function comm_msg (sock, kernel, msg)
122
106
if haskey (msg. content, " comm_id" )
123
107
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]
126
110
else
127
111
# We don't have that comm open
128
112
return
@@ -135,17 +119,17 @@ function comm_msg(sock, msg)
135
119
end
136
120
end
137
121
138
- function comm_close (sock, msg)
122
+ function comm_close (sock, kernel, msg)
139
123
if haskey (msg. content, " comm_id" )
140
124
comm_id = msg. content[" comm_id" ]
141
- comm = comms[comm_id]
125
+ comm = kernel . comms[comm_id]
142
126
143
127
if ! haskey (msg. content, " data" )
144
128
msg. content[" data" ] = Dict ()
145
129
end
146
130
comm. on_close (msg)
147
131
148
- delete! (comms, comm. id)
132
+ delete! (kernel . comms, comm. id)
149
133
end
150
134
end
151
135
0 commit comments