void CDaemon::handleClientRead() { QTcpSocket * socket = qobject_cast<QTcpSocket *>(sender()); while(socket->bytesAvailable() > 8) { QDataStream stream(socket); quint64 size; stream >> size; if(socket->bytesAvailable() >= size) { QByteArray buffer(socket->read(size)); QDataStream bStream(buffer); quint8 opcode; bStream >> opcode; switch(opcode) { case OPCODE_ADD: handleAdd(bStream); break; case OPCODE_REMOVE: handleRemove(bStream); break; case OPCODE_START: handleStart(bStream); break; case OPCODE_STOP: handleAbort(bStream); break; case OPCODE_QUEUE: handleQueue(bStream); break; default: qWarning() << "Unhandled packet:" << quint32(opcode); break; } } }
void handlePacket(void* packet, uint8_t type){ switch(type){ case ROLL_CALL: handleRollCall(); break; case OPEN_FILE: handleOpenFile((OpenFilePacket*)packet); break; case WRITE_BLOCK: handleWriteBlock((WriteBlockPacket*)packet); break; case COMMIT_REQUEST: handleCommitRequest((CommitRequestPacket*)packet); break; case COMMIT: handleCommit((CommitPacket*)packet); break; case ABORT: handleAbort((AbortPacket*)packet); break; } }