def incomingConnection(self, socket): if not self.enabled: return s = QTcpSocket(self) s.setSocketDescriptor(socket) sIp = unicode(s.peerAddress().toString()) sPort = s.peerPort() if sIp.startswith(self.ipFilter): SimuVis4.Globals.logger.info(unicode(QCoreApplication.translate('RemoteControl', 'RemoteControl: accepting connection from %s, port %s')), sIp, sPort) self.connect(s, SIGNAL('readyRead()'), self.readClient) self.connect(s, SIGNAL('disconnected()'), self.discardClient) else: SimuVis4.Globals.logger.error(unicode(QCoreApplication.translate('RemoteControl', 'RemoteControl: refusing connection from %s, port %s')), sIp, sPort) self.discardClient()
class ClientDialog(QtGui.QDialog): STATUS = ["Not Connected", "Host Lookup", "Establishing connection", "Connected", "The socket is bound to an address and port", "For internal use only", "Socket is about to close"] def __init__(self, configdir, recentconndb): QtGui.QDialog.__init__(self) # Variables self.configdir = configdir self.recentconndb = recentconndb self.socket = QTcpSocket() self.status = self.STATUS[0] logging.info("Starting Client") # Properties self.setModal(True) # Setup Widget self.layout = QtGui.QVBoxLayout() self.mainWidget = ControllerClientWidget() self.layout.addWidget(self.mainWidget) self.setLayout(self.layout) #Connections self.connect(self.socket, QtCore.SIGNAL('error(QAbstractSocket::SocketError)'), self.displayError) self.connect(self.socket, QtCore.SIGNAL('connected()'), self.connected) self.connect(self.mainWidget.connectButton, QtCore.SIGNAL('pressed()'), self.connectToServer) self.connect(self.mainWidget.hostEdit, QtCore.SIGNAL('textChanged(QString)'), self.enableConnectButton) self.connect(self.mainWidget.portEdit, QtCore.SIGNAL('textChanged(QString)'), self.enableConnectButton) self.connect(self.mainWidget.passEdit, QtCore.SIGNAL('textChanged(QString)'), self.enableConnectButton) self.connect(self.mainWidget.recentConnList, QtCore.SIGNAL('doubleClicked(const QModelIndex &)'), self.recentListHandler) self.loadRecentConnDB() self.enableConnectButton() self.hide() # Translations self.current_language = "en_US" self.uiTranslator = QtCore.QTranslator() self.uiTranslator.load(":/languages/tr_en_US.qm") self.retranslate() self.updateStatus() ### ### Translation Related ### def retranslate(self, language=None): if language is not None: self.current_language = language self.uiTranslator.load(":/languages/tr_%s.qm" % self.current_language) self.setWindowTitle(self.uiTranslator.translate("ControllerClientApp", "Controller Client")) # # Reusable Strings # self.clientStatusString = self.uiTranslator.translate("ControllerClientApp", "Status") self.connectString = self.uiTranslator.translate("ControllerClientApp", "Connect") self.disconnectString = self.uiTranslator.translate("ControllerClientApp", "Disconnect") # --- End Reusable Strings # # Connection Settings # self.mainWidget.toolBox.setItemText(0, self.uiTranslator.translate("ControllerClientApp", "Connection Settings")) self.mainWidget.hostLabel.setText(self.uiTranslator.translate("ControllerClientApp", "Host name (or IP Address)")) self.mainWidget.portLabel.setText(self.uiTranslator.translate("ControllerClientApp", "Port")) self.mainWidget.passLabel.setText(self.uiTranslator.translate("ControllerClientApp", "Passphrase")) if self.status == self.STATUS[3]: self.mainWidget.connectButton.setText(self.uiTranslator.translate("ControllerClientApp", self.disconnectString)) else: self.mainWidget.connectButton.setText(self.uiTranslator.translate("ControllerClientApp", self.connectString)) self.updateStatus() # --- End Connection Settings # # Recent Connections # self.mainWidget.toolBox.setItemText(1, self.uiTranslator.translate("ControllerClientApp", "Recent Connections")) # --- End Recent Connections ## ## UI Related ## def enableConnectButton(self): if self.mainWidget.passEdit.text() == '' or self.mainWidget.hostEdit.text() == '' or self.mainWidget.portEdit.text() == '': self.mainWidget.connectButton.setEnabled(False) else: self.mainWidget.connectButton.setEnabled(True) def connected(self): caddr = self.socket.peerName() cport = self.socket.peerPort() logging.info("Connected to %s:%s" % (caddr, cport)) self.sendPassphrase() self.mainWidget.connectButton.setText(self.disconnectString) self.disconnect(self.mainWidget.connectButton, QtCore.SIGNAL('pressed()'), self.connectToServer) self.disconnect(self.mainWidget.passEdit, QtCore.SIGNAL('textChanged(QString)'), self.enableConnectButton) self.connect(self.mainWidget.connectButton, QtCore.SIGNAL('pressed()'), self.disconnectFromHost) self.connect(self.socket, QtCore.SIGNAL("disconnected()"), self.disconnectedFromHost) ''' This function is for updating the sockets status and the statusLabel. It's called when a stateChanged signal is triggered. ''' def updateStatus(self): state = self.socket.state() self.status = self.STATUS[state] self.mainWidget.statusLabel.setText(self.clientStatusString + ": " + self.status) ''' When there is a socket error this function is called to show the error in a QMessageBox ''' def displayError(self, socketError): messageBox = QtGui.QMessageBox.critical(self, QtCore.QString('Error!'), QtCore.QString(self.socket.errorString())) logging.error("Socket error %s" % self.socket.errorString()) ## ## Connection Related ## ''' Function that is called when connect button is pressed. ''' def connectToServer(self): caddr = self.mainWidget.hostEdit.text() cport = int(self.mainWidget.portEdit.text()) cpass = self.mainWidget.passEdit.text() self.connect(self.socket, QtCore.SIGNAL('stateChanged(QAbstractSocket::SocketState)'), self.updateStatus) logging.info("Connecting to %s:%s" % (caddr, cport)) self.socket.connectToHost(caddr, cport) if not self.socket.waitForConnected(1000): logging.error("Socket error %s", self.socket.errorString()) else: # Add to recent connections if connection is successful self.addToRecentConnections(caddr, cport, cpass) def disconnectFromHost(self): self.socket.disconnectFromHost() ''' Function for disconnecting the client from the host. ''' def disconnectedFromHost(self): logging.info("Disconnected from host") self.disconnect(self.mainWidget.connectButton, QtCore.SIGNAL('pressed()'), self.disconnectFromHost) self.connect(self.mainWidget.connectButton, QtCore.SIGNAL('pressed()'), self.connectToServer) self.connect(self.mainWidget.passEdit, QtCore.SIGNAL('textChanged(QString)'), self.enableConnectButton) self.mainWidget.connectButton.setText(self.connectString) ''' Function for sending message to the connected server ''' def sendMessage(self, message): logging.info("Sending message: %s", message) block = QtCore.QByteArray() block.append(message) self.socket.write(block) ''' This function is for sending the passphrase to the server. It uses the sendMessage function ''' def sendPassphrase(self): self.sendMessage(self.mainWidget.passEdit.text()) ''' This function is for reading message from the server ''' def readMessage(self): message = self.socket.read(self.socket.bytesAvailable()) logging("Server said:%s", message) return message ## ## Recent Connections Related ## def loadRecentConnDB(self): model = self.recentconndb.get_recentconn_model() self.mainWidget.recentConnList.setModel(model) self.mainWidget.recentConnList.setColumnHidden(2, True) # Hide the passphrase column ''' This function is for adding a new connection to the recent connections. It checks whether it exists in the database or not. ''' def addToRecentConnections(self, caddr, cport, cpass): self.recentconndb.insert_recentconn(caddr, cport, cpass) self.loadRecentConnDB() ''' Handler for the recent connections list. When you click on a recent connection the details of the connection are loaded ''' def recentListHandler(self, connection): chost = connection.sibling(connection.row(), 0).data().toString() cport = int(connection.sibling(connection.row(), 1).data().toString()) cpass = connection.sibling(connection.row(), 2).data().toString() self.mainWidget.hostEdit.setText(chost) self.mainWidget.portEdit.setValue(cport) self.mainWidget.passEdit.setText(cpass) self.mainWidget.toolBox.setCurrentWidget(self.mainWidget.connWidget)
class ClientDialog(QtGui.QDialog): STATUS = [ "Not Connected", "Host Lookup", "Establishing connection", "Connected", "The socket is bound to an address and port", "For internal use only", "Socket is about to close" ] def __init__(self, configdir, recentconndb): QtGui.QDialog.__init__(self) # Variables self.configdir = configdir self.recentconndb = recentconndb self.socket = QTcpSocket() self.status = self.STATUS[0] log.info("Starting Client") # Properties self.setModal(True) # Setup Widget self.layout = QtGui.QVBoxLayout() self.mainWidget = ControllerClientWidget() self.layout.addWidget(self.mainWidget) self.setLayout(self.layout) #Connections self.connect(self.socket, QtCore.SIGNAL('error(QAbstractSocket::SocketError)'), self.displayError) self.connect(self.socket, QtCore.SIGNAL('connected()'), self.connected) self.connect(self.mainWidget.connectButton, QtCore.SIGNAL('pressed()'), self.connectToServer) self.connect(self.mainWidget.hostEdit, QtCore.SIGNAL('textChanged(QString)'), self.enableConnectButton) self.connect(self.mainWidget.portEdit, QtCore.SIGNAL('textChanged(QString)'), self.enableConnectButton) self.connect(self.mainWidget.passEdit, QtCore.SIGNAL('textChanged(QString)'), self.enableConnectButton) self.connect(self.mainWidget.recentConnList, QtCore.SIGNAL('doubleClicked(const QModelIndex &)'), self.recentListHandler) self.loadRecentConnDB() self.enableConnectButton() self.hide() # Translations self.app = QtGui.QApplication.instance() self.current_language = "en_US" self.uiTranslator = QtCore.QTranslator() self.uiTranslator.load(":/languages/tr_en_US.qm") self.retranslate() self.updateStatus() ### ### Translation Related ### def retranslate(self, language=None): if language is not None: self.current_language = language self.uiTranslator.load(":/languages/tr_%s.qm" % self.current_language) self.setWindowTitle( self.app.translate("ControllerClientApp", "Controller Client")) # # Reusable Strings # self.clientStatusString = self.app.translate("ControllerClientApp", "Status") self.connectString = self.app.translate("ControllerClientApp", "Connect") self.disconnectString = self.app.translate("ControllerClientApp", "Disconnect") # --- End Reusable Strings # # Connection Settings # self.mainWidget.toolBox.setItemText( 0, self.app.translate("ControllerClientApp", "Connection Settings")) self.mainWidget.hostLabel.setText( self.app.translate("ControllerClientApp", "Host name (or IP Address)")) self.mainWidget.portLabel.setText( self.app.translate("ControllerClientApp", "Port")) self.mainWidget.passLabel.setText( self.app.translate("ControllerClientApp", "Passphrase")) if self.status == self.STATUS[3]: self.mainWidget.connectButton.setText( self.app.translate("ControllerClientApp", self.disconnectString)) else: self.mainWidget.connectButton.setText( self.app.translate("ControllerClientApp", self.connectString)) self.updateStatus() # --- End Connection Settings # # Recent Connections # self.mainWidget.toolBox.setItemText( 1, self.app.translate("ControllerClientApp", "Recent Connections")) # --- End Recent Connections ## ## UI Related ## def enableConnectButton(self): if self.mainWidget.passEdit.text( ) == '' or self.mainWidget.hostEdit.text( ) == '' or self.mainWidget.portEdit.text() == '': self.mainWidget.connectButton.setEnabled(False) else: self.mainWidget.connectButton.setEnabled(True) def connected(self): caddr = self.socket.peerName() cport = self.socket.peerPort() log.info("Connected to %s:%s" % (caddr, cport)) self.sendPassphrase() self.mainWidget.connectButton.setText(self.disconnectString) self.disconnect(self.mainWidget.connectButton, QtCore.SIGNAL('pressed()'), self.connectToServer) self.disconnect(self.mainWidget.passEdit, QtCore.SIGNAL('textChanged(QString)'), self.enableConnectButton) self.connect(self.mainWidget.connectButton, QtCore.SIGNAL('pressed()'), self.disconnectFromHost) self.connect(self.socket, QtCore.SIGNAL("disconnected()"), self.disconnectedFromHost) ''' This function is for updating the sockets status and the statusLabel. It's called when a stateChanged signal is triggered. ''' def updateStatus(self): state = self.socket.state() self.status = self.STATUS[state] self.mainWidget.statusLabel.setText(self.clientStatusString + ": " + self.status) ''' When there is a socket error this function is called to show the error in a QMessageBox ''' def displayError(self, socketError): messageBox = QtGui.QMessageBox.critical( self, QtCore.QString('Error!'), QtCore.QString(self.socket.errorString())) log.error("Socket error %s" % self.socket.errorString()) ## ## Connection Related ## ''' Function that is called when connect button is pressed. ''' def connectToServer(self): caddr = self.mainWidget.hostEdit.text() cport = int(self.mainWidget.portEdit.text()) cpass = self.mainWidget.passEdit.text() self.connect( self.socket, QtCore.SIGNAL('stateChanged(QAbstractSocket::SocketState)'), self.updateStatus) log.info("Connecting to %s:%s" % (caddr, cport)) self.socket.connectToHost(caddr, cport) if not self.socket.waitForConnected(1000): log.error("Socket error %s", self.socket.errorString()) else: # Add to recent connections if connection is successful self.addToRecentConnections(caddr, cport, cpass) def disconnectFromHost(self): self.socket.disconnectFromHost() ''' Function for disconnecting the client from the host. ''' def disconnectedFromHost(self): log.info("Disconnected from host") self.disconnect(self.mainWidget.connectButton, QtCore.SIGNAL('pressed()'), self.disconnectFromHost) self.connect(self.mainWidget.connectButton, QtCore.SIGNAL('pressed()'), self.connectToServer) self.connect(self.mainWidget.passEdit, QtCore.SIGNAL('textChanged(QString)'), self.enableConnectButton) self.mainWidget.connectButton.setText(self.connectString) ''' Function for sending message to the connected server ''' def sendMessage(self, message): log.info("Sending message: %s", message) block = QtCore.QByteArray() block.append(message) self.socket.write(block) ''' This function is for sending the passphrase to the server. It uses the sendMessage function ''' def sendPassphrase(self): self.sendMessage(self.mainWidget.passEdit.text()) ''' This function is for reading message from the server ''' def readMessage(self): message = self.socket.read(self.socket.bytesAvailable()) log.info("Server said: %s", message) return message ## ## Recent Connections Related ## def loadRecentConnDB(self): model = self.recentconndb.get_recentconn_model() self.mainWidget.recentConnList.setModel(model) self.mainWidget.recentConnList.setColumnHidden( 2, True) # Hide the passphrase column ''' This function is for adding a new connection to the recent connections. It checks whether it exists in the database or not. ''' def addToRecentConnections(self, caddr, cport, cpass): self.recentconndb.insert_recentconn(caddr, cport, cpass) self.loadRecentConnDB() ''' Handler for the recent connections list. When you click on a recent connection the details of the connection are loaded ''' def recentListHandler(self, connection): chost = connection.sibling(connection.row(), 0).data().toString() cport = int(connection.sibling(connection.row(), 1).data().toString()) cpass = connection.sibling(connection.row(), 2).data().toString() self.mainWidget.hostEdit.setText(chost) self.mainWidget.portEdit.setValue(cport) self.mainWidget.passEdit.setText(cpass) self.mainWidget.toolBox.setCurrentWidget(self.mainWidget.connWidget)