44import json
55import threading
66
7+ from .ipc import IpcClient
8+
79
810class AddonManagerProxy :
911 """
@@ -13,16 +15,15 @@ class AddonManagerProxy:
1315 to be handled by add-ons and sends back responses as appropriate.
1416 """
1517
16- def __init__ (self , socket , plugin_id , verbose = False ):
18+ def __init__ (self , plugin_id , verbose = False ):
1719 """
1820 Initialize the object.
1921
20- socket -- the IPC socket
2122 plugin_id -- ID of this plugin
2223 verbose -- whether or not to enable verbose logging
2324 """
2425 self .adapter = None
25- self .socket = socket
26+ self .ipc_client = IpcClient ( plugin_id , verbose = verbose )
2627 self .plugin_id = plugin_id
2728 self .verbose = verbose
2829 self .running = True
@@ -35,7 +36,8 @@ def close(self):
3536 self .running = False
3637
3738 try :
38- self .socket .close ()
39+ self .ipc_client .manager_socket .close ()
40+ self .ipc_client .plugin_socket .close ()
3941 except NNError :
4042 pass
4143
@@ -46,12 +48,13 @@ def add_adapter(self, adapter):
4648 adapter -- the Adapter that was added
4749 """
4850 if self .verbose :
49- print ('AddonManagerProxy: add_adapter:' , adapter .id )
51+ print ('AddonManagerProxy: add_adapter:' , adapter .id , flush = True )
5052
5153 self .adapter = adapter
5254 self .send ('addAdapter' , {
5355 'adapterId' : adapter .id ,
54- 'name' : adapter .name
56+ 'name' : adapter .name ,
57+ 'packageName' : adapter .package_name ,
5558 })
5659
5760 def handle_device_added (self , device ):
@@ -61,7 +64,8 @@ def handle_device_added(self, device):
6164 device -- the Device that was added
6265 """
6366 if self .verbose :
64- print ('AddonManagerProxy: handle_device_added:' , device .id )
67+ print ('AddonManagerProxy: handle_device_added:' , device .id ,
68+ flush = True )
6569
6670 device_dict = device .as_dict ()
6771 device_dict ['adapterId' ] = device .adapter .id
@@ -74,7 +78,8 @@ def handle_device_removed(self, device):
7478 device -- the Device that was removed
7579 """
7680 if self .verbose :
77- print ('AddonManagerProxy: handle_device_removed:' , device .id )
81+ print ('AddonManagerProxy: handle_device_removed:' , device .id ,
82+ flush = True )
7883
7984 self .send ('handleDeviceRemoved' , {
8085 'adapterId' : device .adapter .id ,
@@ -106,42 +111,44 @@ def send(self, msg_type, data):
106111 data ['pluginId' ] = self .plugin_id
107112
108113 try :
109- self .socket .send (json .dumps ({
114+ self .ipc_client . plugin_socket .send (json .dumps ({
110115 'messageType' : msg_type ,
111116 'data' : data ,
112117 }))
113118 except NNError as e :
114- print ('AddonManagerProxy: Failed to send message: {}' .format (e ))
119+ print ('AddonManagerProxy: Failed to send message: {}' .format (e ),
120+ flush = True )
115121
116122 def recv (self ):
117123 """Read a message from the IPC socket."""
118124 while self .running :
119125 try :
120- msg = self .socket .recv ()
126+ msg = self .ipc_client . plugin_socket .recv ()
121127 except NNError as e :
122128 print ('AddonManagerProxy: Error receiving message from '
123- 'socket: {}' .format (e ))
129+ 'socket: {}' .format (e ), flush = True )
124130 break
125131
126132 if self .verbose :
127- print ('AddonMangerProxy: recv:' , msg )
133+ print ('AddonMangerProxy: recv:' , msg , flush = True )
128134
129135 if not msg :
130136 break
131137
132138 if not self .adapter :
133139 print ('AddonManagerProxy: No adapter added yet, ignoring '
134- 'message.' )
140+ 'message.' , flush = True )
135141 continue
136142
137143 try :
138144 msg = json .loads (msg )
139145 except ValueError :
140- print ('AddonManagerProxy: Error parsing message as JSON' )
146+ print ('AddonManagerProxy: Error parsing message as JSON' ,
147+ flush = True )
141148 continue
142149
143150 if 'messageType' not in msg :
144- print ('AddonManagerProxy: Invalid message' )
151+ print ('AddonManagerProxy: Invalid message' , flush = True )
145152 continue
146153
147154 msg_type = msg ['messageType' ]
@@ -160,19 +167,20 @@ def recv(self):
160167 def unload_fn (proxy ):
161168 proxy .adapter .unload ()
162169 proxy .send ('adapterUnloaded' ,
163- {'adapterId' , proxy .adapter .id })
170+ {'adapterId' : proxy .adapter .id })
164171
165172 self .make_thread (unload_fn , args = (self ,))
166173 continue
167174
168175 if msg_type == 'unloadPlugin' :
169176 self .send ('pluginUnloaded' , {})
170- continue
177+ self .close ()
178+ break
171179
172180 # All messages from here on are assumed to require a valid deviceId
173181 if 'data' not in msg or 'deviceId' not in msg ['data' ]:
174182 print ('AddonManagerProxy: No deviceId present in message, '
175- 'ignoring.' )
183+ 'ignoring.' , flush = True )
176184 continue
177185
178186 device_id = msg ['data' ]['deviceId' ]
0 commit comments