class HandleClientRequestThread
(QThread):
def __init__(self, socket, request, rqLock, parent):
super(HandleClientRequestThread, self).__init__(parent)
self.socket = socket
self.rqLock = rqLock
self.request = request
self.__toSend = []
def run(self):
while True:
self.rqLock.lock()
length = len(self.request)
while length > 0:
r = self.request.pop(0)
print(r)
self.socket.write(r)
else:
print("socket is not connected")
length = len(self.request)
self.rqLock.unlock()
self.msleep(10)
class HandleClientRequestThread(QThread):
def __init__(self, socket, request, rqLock, parent):
super(HandleClientRequestThread, self).__init__(parent)
self.socket = socket
self.rqLock = rqLock
self.request = request
self.__toSend = []
def run(self):
while True:
self.rqLock.lock()
length = len(self.request)
while length > 0:
r = self.request.pop(0)
print(r)
if self.socket.state() == QAbstractSocket.ConnectedState:
self.socket.write(r)
else:
print("socket is not connected")
length = len(self.request)
self.rqLock.unlock()
self.msleep(10)
To copy to clipboard, switch view to plain text mode
def __init__(self, gameWindow):
super(GameClient, self).__init__(None)
self.myPlayerId = 0
self.resetWork()
self.connect(self.socket, SIGNAL("connected()"), self.startNetworkThread)
self.connect(self.socket, SIGNAL("readyRead()"), self.readFirstResponse)
self.connect(self.socket, SIGNAL("disconnected()"), self.serverHasStopped)
self.connect(self.socket, SIGNAL("error(QAbstractSocket::SocketError)"),
self.serverHasError)
def startNetworkThread(self):
self.thread = HandleClientRequestThread(self.socket, self.request,
self.rqLock, self)
self.connect(self.thread, SIGNAL("finished()"),
self.thread, SLOT("deleteLater()"))
self.thread.start()
def issueRequest(self, action, params):
stream.writeUInt16(0)
stream.writeUInt16(action)
stream.writeUInt16(self.gameId)
stream.writeUInt32(self.myPlayerId)
for arg in params:
arg.writeOnStream(stream)
stream.device().seek(0)
print("SIZE: %d" % req.size())
stream.writeUInt16(req.size() - SIZEOF_UINT16)
self.rqLock.lock()
self.request.append(req)
self.rqLock.unlock()
class GameClient(QWidget):
def __init__(self, gameWindow):
super(GameClient, self).__init__(None)
self.socket = QTcpSocket()
self.rqLock = QMutex()
self.myPlayerId = 0
self.resetWork()
self.connect(self.socket, SIGNAL("connected()"), self.startNetworkThread)
self.connect(self.socket, SIGNAL("readyRead()"), self.readFirstResponse)
self.connect(self.socket, SIGNAL("disconnected()"), self.serverHasStopped)
self.connect(self.socket, SIGNAL("error(QAbstractSocket::SocketError)"),
self.serverHasError)
def startNetworkThread(self):
self.thread = HandleClientRequestThread(self.socket, self.request,
self.rqLock, self)
self.connect(self.thread, SIGNAL("finished()"),
self.thread, SLOT("deleteLater()"))
self.thread.start()
def issueRequest(self, action, params):
req = QByteArray()
stream = QDataStream(req, QIODevice.WriteOnly)
stream.setVersion(QDataStream.Qt_4_6)
stream.writeUInt16(0)
stream.writeUInt16(action)
stream.writeUInt16(self.gameId)
stream.writeUInt32(self.myPlayerId)
for arg in params:
arg.writeOnStream(stream)
stream.device().seek(0)
print("SIZE: %d" % req.size())
stream.writeUInt16(req.size() - SIZEOF_UINT16)
self.rqLock.lock()
self.request.append(req)
self.rqLock.unlock()
To copy to clipboard, switch view to plain text mode
Bookmarks