memory leak on clients
This commit is contained in:
@@ -52,15 +52,12 @@ class RDPClientQtFactory(rdp.ClientFactory):
|
|||||||
@param controller: build factory and needed by observer
|
@param controller: build factory and needed by observer
|
||||||
"""
|
"""
|
||||||
#create client observer
|
#create client observer
|
||||||
client = RDPClientQt(controller)
|
client = RDPClientQt(controller, self._width, self._height)
|
||||||
#create qt widget
|
#create qt widget
|
||||||
self._w = client.getWidget()
|
self._w = client.getWidget()
|
||||||
self._w.resize(self._width, self._height)
|
|
||||||
self._w.setWindowTitle('rdpy-rdpclient')
|
self._w.setWindowTitle('rdpy-rdpclient')
|
||||||
self._w.show()
|
self._w.show()
|
||||||
|
|
||||||
#resize session
|
|
||||||
controller.setScreen(self._width, self._height)
|
|
||||||
controller.setUsername(self._username)
|
controller.setUsername(self._username)
|
||||||
controller.setPassword(self._passwod)
|
controller.setPassword(self._passwod)
|
||||||
controller.setDomain(self._domain)
|
controller.setDomain(self._domain)
|
||||||
|
|||||||
@@ -75,12 +75,14 @@ class RFBClientQt(RFBClientObserver, QAdaptor):
|
|||||||
QAdaptor for specific RFB protocol stack
|
QAdaptor for specific RFB protocol stack
|
||||||
is to an RFB observer
|
is to an RFB observer
|
||||||
"""
|
"""
|
||||||
def __init__(self, controller):
|
def __init__(self, controller, width, height):
|
||||||
"""
|
"""
|
||||||
@param controller: controller for observer
|
@param controller: controller for observer
|
||||||
|
@param width: width of widget
|
||||||
|
@param height: height of widget
|
||||||
"""
|
"""
|
||||||
RFBClientObserver.__init__(self, controller)
|
RFBClientObserver.__init__(self, controller)
|
||||||
self._widget = QRemoteDesktop(self)
|
self._widget = QRemoteDesktop(self, width, height)
|
||||||
|
|
||||||
def getWidget(self):
|
def getWidget(self):
|
||||||
"""
|
"""
|
||||||
@@ -138,12 +140,16 @@ class RDPClientQt(RDPClientObserver, QAdaptor):
|
|||||||
"""
|
"""
|
||||||
Adaptor for RDP client
|
Adaptor for RDP client
|
||||||
"""
|
"""
|
||||||
def __init__(self, controller):
|
def __init__(self, controller, width, height):
|
||||||
"""
|
"""
|
||||||
@param controller: RDP controller
|
@param controller: RDP controller
|
||||||
|
@param width: width of widget
|
||||||
|
@param height: height of widget
|
||||||
"""
|
"""
|
||||||
RDPClientObserver.__init__(self, controller)
|
RDPClientObserver.__init__(self, controller)
|
||||||
self._widget = QRemoteDesktop(self)
|
self._widget = QRemoteDesktop(self, width, height)
|
||||||
|
#set widget screen to RDP stack
|
||||||
|
controller.setScreen(width, height)
|
||||||
|
|
||||||
def getWidget(self):
|
def getWidget(self):
|
||||||
"""
|
"""
|
||||||
@@ -245,13 +251,15 @@ class QRemoteDesktop(QtGui.QWidget):
|
|||||||
"""
|
"""
|
||||||
Qt display widget
|
Qt display widget
|
||||||
"""
|
"""
|
||||||
def __init__(self, adaptor):
|
def __init__(self, adaptor, width, height):
|
||||||
"""
|
"""
|
||||||
@param adaptor: QAdaptor
|
@param adaptor: QAdaptor
|
||||||
"""
|
"""
|
||||||
super(QRemoteDesktop, self).__init__()
|
super(QRemoteDesktop, self).__init__()
|
||||||
#adaptor use to send
|
#adaptor use to send
|
||||||
self._adaptor = adaptor
|
self._adaptor = adaptor
|
||||||
|
#set correct size
|
||||||
|
self.resize(width, height)
|
||||||
#refresh stack of image
|
#refresh stack of image
|
||||||
#because we can update image only in paint
|
#because we can update image only in paint
|
||||||
#event function. When protocol receive image
|
#event function. When protocol receive image
|
||||||
@@ -260,6 +268,8 @@ class QRemoteDesktop(QtGui.QWidget):
|
|||||||
self._refresh = []
|
self._refresh = []
|
||||||
#bind mouse event
|
#bind mouse event
|
||||||
self.setMouseTracking(True)
|
self.setMouseTracking(True)
|
||||||
|
#buffer image
|
||||||
|
self._buffer = QtGui.QImage(width, height, QtGui.QImage.Format_RGB32)
|
||||||
|
|
||||||
def notifyImage(self, x, y, qimage):
|
def notifyImage(self, x, y, qimage):
|
||||||
"""
|
"""
|
||||||
@@ -281,15 +291,15 @@ class QRemoteDesktop(QtGui.QWidget):
|
|||||||
#if there is no refresh -> done
|
#if there is no refresh -> done
|
||||||
if self._refresh == []:
|
if self._refresh == []:
|
||||||
return
|
return
|
||||||
#create painter to update background
|
#fill buffer image
|
||||||
qp = QtGui.QPainter()
|
with QtGui.QPainter(self._buffer) as qp:
|
||||||
#draw image
|
#draw image
|
||||||
qp.begin(self)
|
for image in self._refresh:
|
||||||
for image in self._refresh:
|
qp.drawImage(image["x"], image["y"], image["image"])
|
||||||
qp.drawImage(image["x"], image["y"], image["image"])
|
#draw in widget
|
||||||
qp.end()
|
with QtGui.QPainter(self) as qp:
|
||||||
|
qp.drawImage(0, 0, self._buffer)
|
||||||
self._lastReceive = []
|
self._refresh = []
|
||||||
|
|
||||||
def mouseMoveEvent(self, event):
|
def mouseMoveEvent(self, event):
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user