Advertisement
H-a-y-K

Untitled

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