Esempio n. 1
0
    def __init__(self, portNumber):
        super(WebSocketServer, self).__init__(None)

        self.portNumber = portNumber
        self.webSocketServer = QWebSocketServer("MsgServer",
                                                QWebSocketServer.NonSecureMode)
        self.webSocketServer.newConnection.connect(self.onNewConnection)
Esempio n. 2
0
class WebSocket(BridgeObject):
    def __init__(self, name='bridge_object', *args, **kwargs):
        super().__init__(name=name, *args, **kwargs)
        self.server = QWebSocketServer("Websocket Server", QWebSocketServer.NonSecureMode)
        if self.server.listen(QHostAddress.LocalHost, 1302):
            print('Connected: ' + self.server.serverName() + ' : ' + self.server.serverAddress().toString() + ':' + str(self.server.serverPort()))
        else:
            print('error')
        self.server.newConnection.connect(self.onNewConnection)

        print(self.server.isListening())

    def onNewConnection(self):
        self.clientConnection = self.server.nextPendingConnection()
        self.clientConnection.textMessageReceived.connect(self.processTextMessage)

        self.clientConnection.binaryMessageReceived.connect(self.processBinaryMessage)
        self.clientConnection.disconnected.connect(self.socketDisconnected)

        self.clients.append(self.clientConnection)

    def processTextMessage(self, message):
        if (self.clientConnection):
            self.clientConnection.sendTextMessage(message)

    def processBinaryMessage(self, message):
        if (self.clientConnection):
            self.clientConnection.sendBinaryMessage(message)

    def socketDisconnected(self):
        if (self.clientConnection):
            self.clients.remove(self.clientConnection)
            self.clientConnection.deleteLater()
Esempio n. 3
0
    def __init__(self, name='bridge_object', *args, **kwargs):
        super().__init__(name=name, *args, **kwargs)
        self.server = QWebSocketServer("Websocket Server", QWebSocketServer.NonSecureMode)
        if self.server.listen(QHostAddress.LocalHost, 1302):
            print('Connected: ' + self.server.serverName() + ' : ' + self.server.serverAddress().toString() + ':' + str(self.server.serverPort()))
        else:
            print('error')
        self.server.newConnection.connect(self.onNewConnection)

        print(self.server.isListening())
Esempio n. 4
0
    def start_server(self):
        if self.isRunning:
            print("It is already running ...")
            return

        self.webServer = QWebSocketServer("Radar Server", QWebSocketServer.NonSecureMode)
        if self.webServer.listen(QHostAddress(self.address), self.port):
            self.isRunning = True
            print("Web Server Listen Success")
        else:
            print("Web Server Listen Error ...")
            return

        self.webServer.newConnection.connect(self.new_connection)
        self.webServer.serverError.connect(self.server_error)
Esempio n. 5
0
    class WebChannelServer:
        def __init__(self):
            self._server = None
            self._clientWrapper = None
            self._channel = None
            self._bridge = None

        def setupWebChannel(self,
                            bridge=None,
                            bridgename="bridge",
                            port=12345):
            # setup the QWebSocketServer
            self._server = QWebSocketServer("Grumble webchannel",
                                            QWebSocketServer.NonSecureMode)
            if not self._server.listen(QHostAddress.LocalHost, port):
                qFatal("Failed to open web socket server.")
                return False

            # wrap WebSocket clients in QWebChannelAbstractTransport objects
            self._clientWrapper = WebSocketClientWrapper(self._server, self)

            # setup the channel
            self._channel = QWebChannel()
            self._clientWrapper.clientConnected.connect(
                self._channel.connectTo)

            # Publish the bridge object to the QWebChannel
            self._bridge = bridge
            if bridge is not None:
                self._channel.registerObject(bridgename, bridge)
Esempio n. 6
0
class WebSocketServer(QObject):
    statusUpdate = QtCore.pyqtSignal(str)
    newConnection = QtCore.pyqtSignal(object)

    def __init__(self, portNumber):
        super(WebSocketServer, self).__init__(None)

        self.portNumber = portNumber
        self.webSocketServer = QWebSocketServer("MsgServer", QWebSocketServer.NonSecureMode)
        self.webSocketServer.newConnection.connect(self.onNewConnection)

    def start(self):
        if not self.webSocketServer.listen(QtNetwork.QHostAddress.Any, self.portNumber):
            self.statusUpdate.emit("Con't open WebSocket on port "+str(self.portNumber)+"!")

    def onNewConnection(self):
        connection = WebSocketClientConnection(self.webSocketServer.nextPendingConnection())
        self.newConnection.emit(connection)
Esempio n. 7
0
class Server(QObject):
    new_client = pyqtSignal(Client)

    def __init__(self, address: str, port: int, parent=None):
        super(QObject, self).__init__(parent)

        self.address = address
        self.port = port
        self.isRunning = False
        self.webServer = None

        self.start_server()

    def new_connection(self):
        socket = self.webServer.nextPendingConnection()
        self.new_client.emit(Client(socket))

    def restart_server(self, address: str, port: int):
        print("Restart Server")
        self.webServer.close()
        self.isRunning = False
        self.address = address
        self.port = port
        self.start_server()

    def start_server(self):
        if self.isRunning:
            print("It is already running ...")
            return

        self.webServer = QWebSocketServer("Radar Server", QWebSocketServer.NonSecureMode)
        if self.webServer.listen(QHostAddress(self.address), self.port):
            self.isRunning = True
            print("Web Server Listen Success")
        else:
            print("Web Server Listen Error ...")
            return

        self.webServer.newConnection.connect(self.new_connection)
        self.webServer.serverError.connect(self.server_error)

    def server_error(self, close_code):
        socket = self.sender()
        print("Server Error: ", socket.peerAddress().toString(), socket.peerPort(), self.webServer.errorString())
Esempio n. 8
0
    def __init__(self, *args, **kwargs):
        super(WebChannelObject, self).__init__(*args, **kwargs)
        # 内部属性供外部调用
        self._intValue = 0
        self._floatValue = 0.0
        self._boolValue = False
        self._strValue = ''
        # 设置数组或者字典有一定问题
        # self._listValue = []
        # self._mapValue = {}

        # webchannel对象
        self.m_webchannel = QWebChannel(self)
        # 这里默认注册自己,这里使用了类名作为名称
        self.registerObject(self.__class__.__name__, self)
        # websocket服务
        self.m_clients = {}
        self.m_server = QWebSocketServer(self.__class__.__name__,
                                         QWebSocketServer.NonSecureMode, self)
    def __init__(self, portNumber):
        super(WebSocketServer, self).__init__(None)

        self.portNumber = portNumber
        self.webSocketServer = QWebSocketServer("MsgServer", QWebSocketServer.NonSecureMode)
        self.webSocketServer.newConnection.connect(self.onNewConnection)
Esempio n. 10
0
class WebChannelObject(QObject):
    def __init__(self, *args, **kwargs):
        super(WebChannelObject, self).__init__(*args, **kwargs)
        # 内部属性供外部调用
        self._intValue = 0
        self._floatValue = 0.0
        self._boolValue = False
        self._strValue = ''
        # 设置数组或者字典有一定问题
        # self._listValue = []
        # self._mapValue = {}

        # webchannel对象
        self.m_webchannel = QWebChannel(self)
        # 这里默认注册自己,这里使用了类名作为名称
        self.registerObject(self.__class__.__name__, self)
        # websocket服务
        self.m_clients = {}
        self.m_server = QWebSocketServer(self.__class__.__name__,
                                         QWebSocketServer.NonSecureMode, self)

    def registerObject(self, name, obj):
        """注册对象
        @param name: 名称
        @type name: str
        @param obj: 对象
        @type obj: QObject
        """
        self.m_webchannel.registerObject(name, obj)

    def registerObjects(self, objects):
        """注册多个对象
        @param objects: 对象列表
        @type objects: list
        """
        for name, obj in objects:
            self.registerObject(name, obj)

    def deregisterObject(self, obj):
        """注销对象
        @param obj: 对象
        @type obj: QObject
        """
        self.m_webchannel.deregisterObject(obj)

    def deregisterObjects(self, objects):
        """注销多个对象
        @param objects: 对象列表
        @type objects: list
        """
        for obj in objects:
            self.deregisterObject(obj)

    def start(self, port=12345):
        """启动服务
        @param port: 端口
        @type port: int
        """
        if not self.m_server.listen(QHostAddress.Any, port):
            raise Exception(
                'Failed to create WebSocket server on port {}'.format(port))

        print('WebSocket server listening on port {}'.format(port))
        # 新连接信号
        self.m_server.newConnection.connect(self._handleNewConnection)

    def stop(self):
        """停止服务"""
        self.m_server.close()

    def _handleNewConnection(self):
        """新连接"""
        socket = self.m_server.nextPendingConnection()
        print('New WebSocket connection from {}'.format(
            socket.peerAddress().toString()))
        # 连接关闭信号
        socket.disconnected.connect(self._handleDisconnected)
        transport = WebSocketTransport(socket)
        self.m_clients[socket] = transport
        self.m_webchannel.connectTo(transport)

    def _handleDisconnected(self):
        """连接关闭"""
        socket = self.sender()
        print('WebSocket connection from {} closed'.format(
            socket.peerAddress()))
        if socket in self.m_clients:
            self.m_clients.pop(socket)
        socket.deleteLater()

    # ------- 下面是注册属性的方法 -------

    @pyqtProperty(int)
    def intValue(self):
        return self._intValue

    @intValue.setter
    def intValue(self, value):
        self._intValue = value

    @pyqtProperty(float)
    def floatValue(self):
        return self._floatValue

    @floatValue.setter
    def floatValue(self, value):
        self._floatValue = value

    @pyqtProperty(bool)
    def boolValue(self):
        return self._boolValue

    @boolValue.setter
    def boolValue(self, value):
        self._boolValue = value

    @pyqtProperty(str)
    def strValue(self):
        return self._strValue

    @strValue.setter
    def strValue(self, value):
        self._strValue = value

    # @pyqtProperty(list)
    # def listValue(self):
    #     return self._listValue

    # @listValue.setter
    # def listValue(self, value):
    #     self._listValue = value

    # @pyqtProperty(dict)
    # def mapValue(self):
    #     return self._mapValue

    # @mapValue.setter
    # def mapValue(self, value):
    #     self._mapValue = value

    # ------- 下面是注册函数的方法 -------
    # ------- 如果有返回值一定要注明 result=返回类型 -------

    @pyqtSlot(int, int, result=int)
    def testAdd(self, a, b):
        return a + b