/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /*************************************************************************** * netcom.cc * * Mon Aug 18 09:33:26 CEST 2008 * Copyright 2008 Bent Bisballe Nyeng * deva@aasimon.org ****************************************************************************/ /* * This file is part of Pracro. * * Pracro is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Pracro is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Pracro; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include "netcom.h" #include #include #include "widgets/widget.h" NetCom::NetCom(QString host, quint16 port, QString user, QString cpr) { this->user = user; this->cpr = cpr; socket.connectToHost(host, port); connect(&socket, SIGNAL(readyRead()), this, SLOT(readyRead())); socket.waitForConnected(); transmitting = false; } NetCom::~NetCom() { socket.disconnectFromHost(); } QDomDocument NetCom::send(QString templ, QString macro, bool lockgui) { printf("Socket state: %d\n", socket.state()); if(socket.state() != 3) printf("Socket state not connected: %s\n", socket.errorString().toStdString().c_str()); if(lockgui && qApp->activeWindow()) qApp->activeWindow()->setEnabled(false); if(lockgui) QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); QDomDocument doc; QDomProcessingInstruction header = doc.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'"); doc.appendChild(header); QDomElement pracro_elem = doc.createElement("pracro"); pracro_elem.setAttribute("version", "1.0"); pracro_elem.setAttribute("cpr", cpr); pracro_elem.setAttribute("user", user); doc.appendChild(pracro_elem); QDomElement request_elem = doc.createElement("request"); request_elem.setAttribute("template", templ); if(macro != "") request_elem.setAttribute("macro", macro); pracro_elem.appendChild(request_elem); printf("\nSending request:\n%s", doc.toString().toStdString().c_str()); socket.write(doc.toByteArray()); // socket.waitForReadyRead(); do { qApp->processEvents(QEventLoop::WaitForMoreEvents); } while(!res_doc.setContent(buffer)); buffer = ""; QDomElement elem = res_doc.documentElement(); printf("\nRecieved request:\n%s", res_doc.toString().toStdString().c_str()); if(lockgui) QApplication::restoreOverrideCursor(); if(lockgui && qApp->activeWindow()) qApp->activeWindow()->setEnabled(true); return res_doc; } void NetCom::readyRead() { buffer.append(socket.readAll()); } void NetCom::send(QVector< Widget* > widgets, QString templ, QString macro, QString version) { printf("Socket state: %d\n", socket.state()); if(socket.state() != 3) printf("Socket state not connected: %s\n", socket.errorString().toStdString().c_str()); // if(qApp->activeWindow()) qApp->activeWindow()->setEnabled(false); // Moved down! QDomDocument doc; QDomProcessingInstruction header = doc.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'"); doc.appendChild(header); QDomElement pracro_elem = doc.createElement("pracro"); pracro_elem.setAttribute("version", "1.0"); pracro_elem.setAttribute("cpr", cpr); pracro_elem.setAttribute("user", user); doc.appendChild(pracro_elem); QDomElement commit_elem = doc.createElement("commit"); commit_elem.setAttribute("template", templ); commit_elem.setAttribute("macro", macro); commit_elem.setAttribute("version", version); pracro_elem.appendChild(commit_elem); // Iterate the different entries, and append their results to the commit string QVector< Widget* >::iterator i = widgets.begin(); while (i != widgets.end()) { Widget* w = *i; if(!w->isDisabled() && w->getName() != "") { QDomElement field_elem = doc.createElement("field"); field_elem.setAttribute("name", w->getName()); field_elem.setAttribute("value", w->getValue()); commit_elem.appendChild(field_elem); } i++; } if(qApp->activeWindow()) qApp->activeWindow()->setEnabled(false); printf("\nSending commit:\n%s", doc.toString().toStdString().c_str()); socket.write(doc.toByteArray()); // socket.waitForReadyRead(); // // Wait for the (hopefully) empty answer. // do { qApp->processEvents(QEventLoop::WaitForMoreEvents); } while(!res_doc.setContent(buffer)); buffer = ""; //QDomElement elem = res_doc.documentElement(); printf("\nRecieved commit:\n%s", res_doc.toString().toStdString().c_str()); QApplication::restoreOverrideCursor(); if(qApp->activeWindow()) qApp->activeWindow()->setEnabled(true); }