/** * Zpracuje a spravne zvoli akce podle doruceneho packetu */ void Thread::handleRequest() { QByteArray rawdata = socket->readAll(); Message message; ManipulateNet tool; PetriNet *petriNet = new PetriNet; XMLHandler xmlhandler; QList<PetriNet *> netList; xmlhandler.setMessage(&message); xmlhandler.setPetriNet(petriNet); xmlhandler.setNetList(&netList); xmlhandler.readMessage(QString(rawdata)); Message resultMsg; XMLHandler resultXml; QString out; PetriNet *resultNet = new PetriNet; Simulate simulate; switch (message.command) { case Message::SLOGIN: break; case Message::CLOGIN: /* Pozadavek na prihlaseni uzivatele */ if(!authenticate(message.user, message.password)) { resultMsg.command = Message::WRONGLOGIN; resultXml.setMessage(&resultMsg); } else { resultMsg.command = Message::LOGGED; resultXml.setMessage(&resultMsg); } out = resultXml.writeMessage(); rawdata = out.toUtf8(); socket->write(rawdata); socket->flush(); break; case Message::WRONGLOGIN: break; case Message::LOGGED: break; case Message::CLIST: /* Pozadavek na seznam siti */ qDebug() << socketDescriptor << "Request for list of nets"; tool.getNetList(this->getUsername(),&netList); if (tool.error) { /* Nastala chyba pri ukladani */ resultMsg.command = Message::ERROR; resultMsg.errorText = "Error while getting list of nets"; } else { resultMsg.command = Message::SLIST; resultXml.setNetList(&netList); resultXml.setMessage(&resultMsg); } resultXml.setMessage(&resultMsg); out = resultXml.writeMessage(); rawdata = out.toUtf8(); socket->write(rawdata); socket->flush(); /* Dealokuju seznam siti */ for (int i = 0; i < netList.size(); i++) { delete netList.at(i); } netList.clear(); break; case Message::SLIST: break; case Message::SEND: break; case Message::ERROR: break; case Message::SAVE: /* Pozadavek na ulozeni site */ qDebug() << socketDescriptor << "Request for save a net"; tool.saveNet(petriNet->getName(),this->getUsername(),&xmlhandler); if (tool.error) { /* Nastala chyba pri ukladani */ resultMsg.command = Message::ERROR; resultMsg.errorText = "Error while saving"; writeLogSave(petriNet->getName(), "FAIL"); resultXml.setMessage(&resultMsg); out = resultXml.writeMessage(); rawdata = out.toUtf8(); socket->write(rawdata); socket->flush(); } else { writeLogSave(petriNet->getName(), "PASS"); } break; case Message::LOAD: /* Pozadavek na nacteni site */ qDebug() << socketDescriptor << "Request for load the net"; tool.loadNet(petriNet->getName(),this->getUsername(),petriNet->getVersion(),petriNet); if (tool.error) { /* Nastala chyba pri cteni, sit neexistuje? */ resultMsg.command = Message::ERROR; resultMsg.errorText = "Error while loading, perhaps the net does not exist"; writeLogLoad(petriNet->getName(), "FAIL"); } else { /* Sit byla uspesne otevrena */ resultMsg.command = Message::SEND; resultXml.setPetriNet(petriNet); writeLogLoad(petriNet->getName(), "PASS"); } /* At uz se stala chyba nebo ne, vse je treba zabalit a odeslat */ resultXml.setMessage(&resultMsg); out = resultXml.writeMessage(); rawdata = out.toUtf8(); socket->write(rawdata); socket->flush(); break; case Message::SIMULATE: /* Pozadavek na simulaci */ qDebug() << socketDescriptor << "Request for the simulation"; if (message.simulationSteps == 0) { simulate.simulateAll(petriNet); } else { if(!simulate.simulateStep(petriNet)) { simulate.error = true; } } if (simulate.error) { /* Nastala chyba pri simulaci */ resultMsg.command = Message::ERROR; resultMsg.errorText = "Error while simulation, perhaps there aren't any possible steps"; writeLogSimulate(petriNet->getName(),petriNet->getVersion(),"FAIL"); } else { /* Sit byla v poradku odsimulovana */ resultMsg.command = Message::SEND; resultXml.setPetriNet(petriNet); writeLogSimulate(petriNet->getName(),petriNet->getVersion(),"PASS"); } /* Zprava bude odeslana */ resultXml.setMessage(&resultMsg); out = resultXml.writeMessage(); rawdata = out.toUtf8(); socket->write(rawdata); socket->flush(); break; case Message::LOG: /* Klient zada o log */ qDebug() << socketDescriptor << "Request for logs"; resultMsg.user = getUsername(); resultMsg.command = message.command; resultXml.setMessage(&resultMsg); out = resultXml.writeMessage(); rawdata = out.toUtf8(); socket->write(rawdata); socket->flush(); break; } delete petriNet; // maže se opravdu vždycky? delete resultNet; }