Revert "Reinitialise Zeroconf network socket upon refresh/start"

This reverts commit a31a4a1e90.
This commit is contained in:
Ghostkeeper 2016-10-04 14:50:08 +02:00
parent a31a4a1e90
commit 8bd3b7ea9b
No known key found for this signature in database
GPG key ID: 701948C5954A7385

View file

@ -1,7 +1,7 @@
from UM.OutputDevice.OutputDevicePlugin import OutputDevicePlugin from UM.OutputDevice.OutputDevicePlugin import OutputDevicePlugin
from . import NetworkPrinterOutputDevice from . import NetworkPrinterOutputDevice
from zeroconf import Zeroconf, ServiceBrowser, ServiceStateChange, ServiceInfo, new_socket from zeroconf import Zeroconf, ServiceBrowser, ServiceStateChange, ServiceInfo
from UM.Logger import Logger from UM.Logger import Logger
from UM.Signal import Signal, signalemitter from UM.Signal import Signal, signalemitter
from UM.Application import Application from UM.Application import Application
@ -20,7 +20,7 @@ import json
class NetworkPrinterOutputDevicePlugin(OutputDevicePlugin): class NetworkPrinterOutputDevicePlugin(OutputDevicePlugin):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self._zero_conf = Zeroconf() self._zero_conf = None
self._browser = None self._browser = None
self._printers = {} self._printers = {}
@ -53,18 +53,16 @@ class NetworkPrinterOutputDevicePlugin(OutputDevicePlugin):
self.startDiscovery() self.startDiscovery()
def startDiscovery(self): def startDiscovery(self):
self.stop()
if self._browser: if self._browser:
self._browser.cancel() self._browser.cancel()
self._browser = None self._browser = None
self._old_printers = [printer_name for printer_name in self._printers] self._old_printers = [printer_name for printer_name in self._printers]
self._printers = {} self._printers = {}
self.printerListChanged.emit() self.printerListChanged.emit()
#After network switching, Zeroconf's network socket is no longer functional. # After network switching, one must make a new instance of Zeroconf
#Zeroconf must reinitialise its socket, but reinitialising Zeroconf causes massive CPU usage. # On windows, the instance creation is very fast (unnoticable). Other platforms?
#So we only reinitialise Zeroconf's listening socket. self._zero_conf = Zeroconf()
self._zero_conf.engine.del_reader(self._zero_conf._listen_socket)
self._zero_conf._listen_socket = new_socket() #Warning: Touching Zeroconf's privates! It has no functionality to reinitialise its own socket.
self._zero_conf.engine.add_reader(self._zero_conf.listener, self._zero_conf._listen_socket)
self._browser = ServiceBrowser(self._zero_conf, u'_ultimaker._tcp.local.', [self._onServiceChanged]) self._browser = ServiceBrowser(self._zero_conf, u'_ultimaker._tcp.local.', [self._onServiceChanged])
# Look for manual instances from preference # Look for manual instances from preference
@ -125,6 +123,7 @@ class NetworkPrinterOutputDevicePlugin(OutputDevicePlugin):
## Stop looking for devices on network. ## Stop looking for devices on network.
def stop(self): def stop(self):
if self._zero_conf is not None:
self._zero_conf.close() self._zero_conf.close()
def getPrinters(self): def getPrinters(self):