Advertisement
H-a-y-K

Untitled

Mar 15th, 2020
389
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.56 KB | None | 0 0
  1. class Client(QtCore.QObject):
  2.     UDP_SERVER_PORT = 45454
  3.     UDP_CLIENT_PORT = 45455
  4.  
  5.     def __init__(self, username, parent=None):
  6.         super().__init__(parent)
  7.         self.done = False
  8.         self.udpClient = QtNetwork.QUdpSocket(self)
  9.         self.webClient = QtWebSockets.QWebSocket(
  10.             "", QtWebSockets.QWebSocketProtocol.VersionLatest, self)
  11.  
  12.         self.udpClient.readyRead.connect(self.processPendingDatagrams)
  13.         self.webClient.connected.connect(self.onConnected)
  14.         self.webClient.textMessageReceived.connect(self.onTextMessageReceived)
  15.  
  16.         interfaces = QtNetwork.QNetworkInterface.allInterfaces()
  17.         for interface in interfaces:
  18.             if (interface.isValid() and
  19.                     not interface.flags() & QtNetwork.QNetworkInterface.IsLoopBack and
  20.                     not interface.flags() & QtNetwork.QNetworkInterface.IsPointToPoint and
  21.                     interface.flags() & QtNetwork.QNetworkInterface.IsUp and
  22.                     interface.flags() & QtNetwork.QNetworkInterface.IsRunning):
  23.                 addresses = interface.addressEntries()
  24.                 for address in addresses:
  25.                     if (not address.ip().isNull() and
  26.                             not address.ip().isLoopback() and
  27.                             address.ip().protocol() == QtNetwork.QAbstractSocket.IPv4Protocol and
  28.                             not address.broadcast().isNull()):
  29.                         logging.debug(f"Address: {str(address.broadcast())}")
  30.                         self.udpClient.bind(address.ip(), self.UDP_CLIENT_PORT,
  31.                                             QtNetwork.QUdpSocket.ShareAddress)
  32.                         self.udpClient.writeDatagram(QtCore.QByteArray("User = {}".format(username).encode()),
  33.                                                      address.broadcast(), self.UDP_SERVER_PORT)
  34.                         return
  35.  
  36.     @QtCore.Slot()
  37.     def processPendingDatagrams(self):
  38.         socket = self.sender()
  39.         logging.debug("Processing datagrams...")
  40.         while socket and socket.hasPendingDatagrams():
  41.             datagram = socket.receiveDatagram()
  42.             logging.debug(datagram.data())
  43.             logging.debug(datagram.data().startsWith(b"ws://"))
  44.             if datagram.data().startsWith(b"ws://"):
  45.                 self.webClient.open(QtCore.QUrl.fromEncoded(datagram.data()))
  46.  
  47.     @QtCore.Slot()
  48.     def onConnected(self):
  49.         logging.debug("Web client connected to server")
  50.  
  51.     @QtCore.Slot()
  52.     def onTextMessageReceived(self, mes):
  53.         logging.debug(mes)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement