diff options
| -rw-r--r-- | client/client.pro | 4 | ||||
| -rw-r--r-- | client/macro.cc | 87 | ||||
| -rw-r--r-- | client/macro.h | 15 | ||||
| -rw-r--r-- | client/macrowindow.cc | 15 | ||||
| -rw-r--r-- | client/netcom.cc | 108 | ||||
| -rw-r--r-- | client/netcom.h (renamed from client/sendrecieve.h) | 58 | ||||
| -rw-r--r-- | client/sendrecieve.cc | 161 | 
7 files changed, 176 insertions, 272 deletions
| diff --git a/client/client.pro b/client/client.pro index c2e3ccf..e6d5be8 100644 --- a/client/client.pro +++ b/client/client.pro @@ -25,7 +25,7 @@ HEADERS += \          lua.h \          macro.h \          macrowindow.h \ -        sendrecieve.h \ +	netcom.h \          widgetbuilder.h \          widgets.h \  	widgets/widget.h \ @@ -49,7 +49,7 @@ SOURCES += \          lua.cc \          macro.cc \          macrowindow.cc \ -        sendrecieve.cc \ +	netcom.cc \          widgetbuilder.cc \          widgets/widget.cc \          widgets/label.cc \ diff --git a/client/macro.cc b/client/macro.cc index aa82d50..b0943d0 100644 --- a/client/macro.cc +++ b/client/macro.cc @@ -25,9 +25,15 @@   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.   */  #include "macro.h" -#include "sendrecieve.h" -#include <QDomDocument> +  #include <QApplication> +#include <QDomDocument> +#include <QObject> +#include <QEvent> +#include <QLinkedList> + +#include "macrowindow.h" +#include "netcom.h"  #define MACRO_EVENT_ID 65432 @@ -63,63 +69,15 @@ protected:   * The single global macro event filter.   * It is created the first time new_macro is called.   */ -MacroEventFilter *macro_event_filter = NULL; - -/** - * This function sends a request to the praco server, and returns the - * parsed answer. - */ -static QDomDocument xml_request(QString course, QString macro) -{ -  // Create the xml request array -  QByteArray xml_array; -  printf("course: %s, macro: %s, cpr: %s, user: %s\n", -         course.toStdString().c_str(), -         macro.toStdString().c_str(), -         cpr.toStdString().c_str(), -         user.toStdString().c_str()); -  xml_array.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); -  xml_array.append("<pracro version=\"1.0\" cpr=\"" + cpr + "\" user=\"" + user + "\">\n"); -  xml_array.append("  <request course=\"" + course + "\" macro=\"" + macro + "\"/>\n"); -  xml_array.append("</pracro>"); - -  // Print to stdout for debug purposes -  char *test = xml_array.data(); -  printf("%s\n", test); - -  // Parse the XML document using setContent of QDomDocument -  QDomDocument xml_req; -  if (!xml_req.setContent(xml_array)) { -    printf("Error: Invalid XML found in request\n"); -  } - -  return xml_req; -} +static MacroEventFilter *macro_event_filter = NULL;  /**   * Create the new macro   */  static void create_macro(QString course, QString macro)  { -  // Build the XML request -  QDomDocument xml_req = xml_request(course, macro); - -  // Fetch the XML document -  SendRecieve xml_acquire(host, port); -  xml_acquire.makeConnection(&xml_req); -  QByteArray ba = xml_acquire.getResult(); - -  // Print to stdout, for debug purposes -  char *test = ba.data(); -  printf("%s\n", test); - -  // Parse the XML document using setContent of QDomDocument -  QDomDocument xml_doc; -  if (!xml_doc.setContent(ba)) { -    printf("ERROR: Invalid XML recieved!\n"); -    fwrite(ba.data(), ba.size(), 1, stdout); -    return; -  } +  NetCom netcom(host, port, user, cpr); +  QDomDocument xml_doc = netcom.send(course, macro);    cleanup_macros(); @@ -130,7 +88,7 @@ static void create_macro(QString course, QString macro)    // Initiate the new macro window with the xml document and push    //  it to the window list    QDomNodeList courses = xml_doc.documentElement().childNodes(); -  QDomNode coursenode = courses.at(0); // There can be only one! +  QDomNode coursenode = courses.at(0); // There can be only one! (Swush, flomp)    QDomNodeList macros = coursenode.childNodes();    for(int j = 0; j < macros.count(); j++) {      QDomNode macronode = macros.at(j); @@ -140,9 +98,12 @@ static void create_macro(QString course, QString macro)    }  } -bool MacroEventFilter::eventFilter( QObject *, QEvent *e ) +/** + * Event filter callback method + */ +bool MacroEventFilter::eventFilter(QObject *, QEvent *e)  { -  if ( e->type() == MACRO_EVENT_ID ) { +  if(e->type() == MACRO_EVENT_ID) {      MacroEvent *event = (MacroEvent*)e;      create_macro(event->course, event->macro);      return TRUE; // eat event @@ -151,26 +112,26 @@ bool MacroEventFilter::eventFilter( QObject *, QEvent *e )    }  } -// Delete all closed windows from window list +/** + * Delete all closed windows from window list + */  void cleanup_macros()  { -  int dead = 0; -  int live = 0; -    QLinkedList< MacroWindow * >::iterator i = macrowindows.begin();    while(i != macrowindows.end()) {      if( (*i)->isClosed() ) { -      dead++;        delete *i;        i = macrowindows.erase(i);      } else { -      live++;        i++;      }    } -  printf("Found %d live ones and %d dead ones.\n", live, dead);  } +/** + * Public macro creation function. + * Initiates the creation of a new macro. + */  void new_macro(QString course, QString macro)  {    if(macro_event_filter == NULL) { diff --git a/client/macro.h b/client/macro.h index 4cd7109..f00f172 100644 --- a/client/macro.h +++ b/client/macro.h @@ -28,15 +28,16 @@  #define __PRACRO_MACRO_H__  #include <QString> -#include <QObject> -#include <QEvent> -#include <QLinkedList> - -#include "macrowindow.h" - -extern QLinkedList< MacroWindow * > macrowindows; +/** + * Public macro creation function. + * Initiates the creation of a new macro. + */  void new_macro(QString course, QString name); + +/** + * Delete all closed windows from window list + */  void cleanup_macros();  #endif/*__PRACRO_MACRO_H__*/ diff --git a/client/macrowindow.cc b/client/macrowindow.cc index 551c804..6837e1d 100644 --- a/client/macrowindow.cc +++ b/client/macrowindow.cc @@ -25,9 +25,7 @@   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.   */  #include "macrowindow.h" -#include "sendrecieve.h" -#include "macro.h" -#include "widgets/widget.h" +  #include <QVBoxLayout>  #include <QMessageBox>  #include <QDomDocument> @@ -35,9 +33,12 @@  #include <QDomNode>  #include <QByteArray> +#include "macro.h" +#include "widgets/widget.h"  #include "widgets/window.h"  #include "widgetbuilder.h"  #include "lua.h" +#include "netcom.h"  extern QString cpr;  extern QString user; @@ -129,6 +130,7 @@ bool MacroWindow::doCommit()    if(faulty == 0) {      printf("MacroWindow -> committing...\n"); +#if 0      // Build the XML commit      QString xml_string;      xml_string.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); @@ -137,7 +139,7 @@ bool MacroWindow::doCommit()  		      version + "\">\n");      // Iterate the different entries, and append their results to the commit string -    QVector< Widget* >::iterator i=widgets.begin(); +    QVector< Widget* >::iterator i = widgets.begin();      while (i != widgets.end()) {        Widget* w = *i; @@ -168,6 +170,11 @@ bool MacroWindow::doCommit()      //QByteArray ba = macro_commit.getResult();      QString ba = macro_commit.getResult();      printf("Server returned result: %s", ba.toStdString().c_str()); +#endif/*0*/ + +    NetCom netcom(host, port, user, cpr); +    netcom.send(widgets, macro, version); +      return true;    } else {      return false; diff --git a/client/netcom.cc b/client/netcom.cc new file mode 100644 index 0000000..cbe44d1 --- /dev/null +++ b/client/netcom.cc @@ -0,0 +1,108 @@ +/* -*- 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 <QApplication> + +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())); +} + +NetCom::~NetCom() +{ +  socket.disconnectFromHost(); +} + +QDomDocument NetCom::send(QString course, QString macro) +{ +  QDomDocument doc; + +  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("course", course); +  request_elem.setAttribute("macro", macro); +  pracro_elem.appendChild(request_elem); +  +  socket.write(doc.toByteArray()); + +  do { +    qApp->processEvents(); +  } while(!res_doc.setContent(buffer)); + +  buffer = ""; + +  return res_doc; +} + +void NetCom::readyRead() +{ +  buffer.append(socket.readAll()); +} + +void NetCom::send(QVector< Widget* > widgets, QString macro, QString version) +{ +  QDomDocument doc; + +  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("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; +     +    QDomElement field_elem = doc.createElement("field"); +    field_elem.setAttribute("name", w->getName()); +    field_elem.setAttribute("value", w->getValue()); +    commit_elem.appendChild(field_elem); + +    i++; +  } + +  printf(doc.toString().toStdString().c_str()); +  +  socket.write(doc.toByteArray()); +  //  qApp->processEvents(); +  socket.waitForBytesWritten(10000); +} diff --git a/client/sendrecieve.h b/client/netcom.h index 7ee87ad..18d6dbe 100644 --- a/client/sendrecieve.h +++ b/client/netcom.h @@ -1,10 +1,10 @@  /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */  /*************************************************************************** - *            sendrecieve.h + *            netcom.h   * - *  Fri Jul 13 12:38:45 CEST 2007 - *  Copyright 2007 Bent Bisballe Nyeng and Lars Bisballe Jensen - *  deva@aasimon.org and elsenator@gmail.com + *  Mon Aug 18 09:33:26 CEST 2008 + *  Copyright 2008 Bent Bisballe Nyeng + *  deva@aasimon.org   ****************************************************************************/  /* @@ -24,48 +24,36 @@   *  along with Pracro; if not, write to the Free Software   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.   */ - -#ifndef _SENDRECIEVE_H -#define _SENDRECIEVE_H +#ifndef __PRACRO_NETCOM_H__ +#define __PRACRO_NETCOM_H__  #include <QObject> +#include <QString>  #include <QTcpSocket>  #include <QDomDocument> -#define TCP_CONNECTED 1 -#define TCP_DISCONNECTED 2 -#define TCP_CONNECTING 3 -#define TCP_ERROR -1 -#define TCP_ERROR_SERVER_NOT_FOUND -2 +#include "widgets/widget.h" -class SendRecieve : public QObject -{ -  Q_OBJECT +class NetCom : public QObject { +Q_OBJECT  public: -  SendRecieve(QString host, quint16 port); -  void makeConnection(QDomDocument *xml_req); -  QByteArray getResult(); +  NetCom(QString host, quint16 port, QString user, QString cpr); +  ~NetCom(); + +  QDomDocument send(QString course, QString macro); +  void send(QVector< Widget* > widgets, QString macro, QString version);  public slots: -  void tcpConnect(); -  void tcpDisconnect(); -  int tcpStatus(); -  void myTcpWrite(char *msg, int len); -  void myHostFound(); -  void myConnected(); -  void myDisconnected(); -  void myError(QAbstractSocket::SocketError); -  void myReadyReadHandler(); +  void readyRead();  private: -  QTcpSocket *tcpsocket; -  int tcpConnected; -  QByteArray ba_all; -  bool has_result; -  QDomDocument *xml_req; +  QTcpSocket socket; + +  QByteArray buffer; +  QDomDocument res_doc; -  QString host; -  quint16 port; +  QString user; +  QString cpr;  }; -#endif/*_SENDRECIEVE_H_*/ +#endif/*__PRACRO_NETCOM_H__*/ diff --git a/client/sendrecieve.cc b/client/sendrecieve.cc deleted file mode 100644 index 454ce30..0000000 --- a/client/sendrecieve.cc +++ /dev/null @@ -1,161 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/*************************************************************************** - *            sendrecieve.cc - * - *  Fri Jul 13 12:38:45 CEST 2007 - *  Copyright 2007 Bent Bisballe Nyeng, Lars Bisballe Jensen and Peter Skaarup - *  deva@aasimon.org, elsenator@gmail.com and piparum@piparum.dk - ****************************************************************************/ - -/* - *  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 "sendrecieve.h" - -#include <stdio.h> -#include <QApplication> -#include <QMessageBox> -#include <QByteArray> -#include <QSettings> - -#ifdef HOST_WIN32 -#include <windows.h> -#define sleep(x) Sleep(x * 1000) -#else -#include <unistd.h> -#endif - -SendRecieve::SendRecieve(QString host, quint16 port) -  : QObject() -{ -  this->host = host; -  this->port = port; -  has_result = false; -} - -void SendRecieve::tcpConnect() -{ -  printf("%s, %d\n", host.toStdString().c_str(), port); -  tcpsocket->connectToHost(host, port);  -  tcpConnected = TCP_CONNECTING; -} - -void SendRecieve::tcpDisconnect() -{ -  tcpsocket->disconnectFromHost(); -  while(tcpConnected != TCP_DISCONNECTED) { -    if(tcpConnected == TCP_ERROR) { -      tcpConnected = TCP_DISCONNECTED; -      return; -    } -    sleep(1); -    printf("ERROR!!! Couldn't connect to host!\n"); -    qApp->processEvents(); -  } -} - -int SendRecieve::tcpStatus() -{ -  return tcpConnected; -} - -void SendRecieve::makeConnection(QDomDocument *xml_req) -{ -  this->xml_req = xml_req; - -  tcpsocket = new QTcpSocket; -  connect(tcpsocket, SIGNAL(hostFound()), this, SLOT(myHostFound())); -  connect(tcpsocket, SIGNAL(readyRead()), this, SLOT(myReadyReadHandler())); -  connect(tcpsocket, SIGNAL(connected()), this, SLOT(myConnected())); -  connect(tcpsocket, SIGNAL(disconnected()), this, SLOT(myDisconnected())); -  connect(tcpsocket, SIGNAL(error(QAbstractSocket::SocketError)),  -          this, SLOT(myError(QAbstractSocket::SocketError))); -  tcpConnect(); -} - -void SendRecieve::myTcpWrite(char *msg, int len) -{ -  if(tcpConnected == TCP_CONNECTED) { -    tcpsocket->write(msg, len); -  } else { -    printf("TCP socket not initialized!\n"); -  } -} - -void SendRecieve::myHostFound() // slot -{ -  printf("Host Found!\n"); -} - -void SendRecieve::myConnected() // slot -{ -  tcpConnected = TCP_CONNECTED; -  printf("TCP Connected!\n"); - -  QByteArray ba = xml_req->toByteArray(); -  char *request = ba.data(); -  myTcpWrite(request, ba.length()); -} - -void SendRecieve::myDisconnected() // slot -{ -  tcpConnected = TCP_DISCONNECTED; -  printf("TCP Disconnected!\n"); - -  // Result recieved, allow getResult to return ba_all -  has_result = true; -} - -void SendRecieve::myError(QAbstractSocket::SocketError socketError) // slot -{ -  tcpConnected = TCP_ERROR; -  switch (socketError) { -  case 0 : -    QMessageBox::information(NULL, tr("Pracro"), tr("Couldn't connect to server.\nPlease contact a system administrator to resolve the problem.")); -    exit(1); -    break; -  case 2 : -    QMessageBox::information(NULL, tr("Pracro"), tr("Couldn't connect to server.\nPlease contact a system administrator to resolve the problem.")); -    exit(1); -    break; -  default: -    ; -  } -} - -void SendRecieve::myReadyReadHandler() -{ -  QByteArray ba; - -  ba = tcpsocket->readAll(); -  ba_all.append(ba); - -  // HACK: To test if the received data is a complete xml document. -  QDomDocument doc; -  if(doc.setContent(ba_all)) { -    has_result = true; -  } -} - -QByteArray SendRecieve::getResult() -{ -  while(has_result == false) { -    qApp->processEvents(); -  } -  return ba_all; -} | 
