{

}

objects. h

#ifndef OBJECTS_H

#define OBJECTS_H

#include "baseobjects. h"

#include "data_managers/bmicdm. h"

#include "threads/dt0.h"

#include "threads/pt0.h"

#include "threads/rt0.h"

#include "application_managers/applicationmanager. h"

#include "application_managers/textfileam. h"

#include "result_unloaders/resultunloader. h"

#include "result_unloaders/gephisitegraphru. h"

#endif // OBJECTS_H

precompiled_headers. h

#ifndef PRECOMPILED_HEADERS_H

#define PRECOMPILED_HEADERS_H

#include <QCoreApplication>

#include <QDebug>

#include <QString>

#include <QFile>

#include <QByteArray>

#include <QSettings>

#include <QThread>

#include <QList>

#include <QMutex>

#include <QNetworkAccessManager>

#include <QNetworkRequest>

#include <QNetworkReply>

#include <QMap>

#include <QUrlQuery>

#include <QElapsedTimer>

#include <QTimer>

#include <QQueue>

#include <QRegExp>

#include <QReadWriteLock>

#include <QHash>

#include <tuple>

#include <algorithm>

#include <stdlib. h>

#include <iostream>

#endif // PRECOMPILED_HEADERS_H

rccapplication. h

#ifndef RCCRAWLERAPPLICATION_H

#define RCCRAWLERAPPLICATION_H

#include "includes. h"

#include "baseobjects. h"

class RCCApplication : public QCoreApplication

{

  Q_OBJECT

public:

  RCCApplication(int argc, char *argv[]);

  ~RCCApplication();

  DataManager *pdM;

НЕ нашли? Не то? Что вы ищете?

  DownloadingThread *pdownloadingThread;

  QList<ParsingThread*> parsingThreadsList;

  RoutineThread *proutineThread;

};

#endif // RCCRAWLERAPPLICATION_H

rccapplication. cpp

#include "rccapplication. h"

RCCApplication::RCCApplication(int argc, char *argv[]):

  QCoreApplication(argc, argv)

{

}

RCCApplication::~RCCApplication()

{

  delete pdM;

  delete pdownloadingThread;

  for (ParsingThread* ppT: parsingThreadsList)

  {

  delete ppT;

  }

  delete proutineThread;

}

rccconsts. h

#ifndef RCCCONSTS_H

#define RCCCONSTS_H

namespace RCCConsts

{

  const int THREAD_SLEEP_TIME_MS = 100;

  const int PAGEDATA_DEFAULT_CHUNK_SIZE = 20;

  const int PAGEDATA_CHUNK_SIZE_COUNT_MULTIPLIER = 3;

  const char* const USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.54 Safari/537.36";

  const char* const HTTP = "http://";

  const char* const HTTPS = "https://";

  const int APPROXIMATE_HREFS_PER_PAGE = 150;

  const int TIME_BEFORE_AF_CHECK_MS = 1000;

  const int MAX_DOWNLOAD_ATTEMPTS = 5;

  const char* const TEXT_PLAIN_TEXT_HTML = "text/html";

  const int CONTENT_DUPLICATE = 1001;

}

#endif // RCCCONSTS_H

rccsettings. h

#ifndef RCCSETTINGS_H

#define RCCSETTINGS_H

#include <QSettings>

class RCCSettings: public QSettings

{

  Q_OBJECT

public:

  static RCCSettings* instance();

private:

  RCCSettings(const QString &file, QSettings::Format format);

  static RCCSettings *_instance;

};

#endif // RCCSETTINGS_H

rccsettings. cpp

#include "rccsettings. h"

RCCSettings* RCCSettings::_instance = nullptr;


RCCSettings* RCCSettings::instance()

{

  if (!_instance)

  _instance = new RCCSettings("settings. ini", QSettings::IniFormat);

  return _instance;

}

RCCSettings::RCCSettings(const QString &file, QSettings::Format format):

  QSettings(file, format)

{

}

main. cpp

#include "includes. h"

#include "objectcreator. h"

#include "rccapplication. h"

int main(int argc, char *argv[])

{

  QFile settingsFile("settings. ini");

  if (!settingsFile. exists())

  {

  QFile innerSettingsFile(":/settings. ini");

  innerSettingsFile. open(QIODevice::ReadOnly);

  settingsFile. open(QIODevice::WriteOnly);

  settingsFile. write(innerSettingsFile. readAll());

  innerSettingsFile. close();

  settingsFile. close();

  qDebug() << "There was no settings file. Settings file is created. Check it and start app again.";

  return 0;

  }

  RCCApplication a(argc, argv);

  RCCSettings *psett = RCCSettings::instance();

  QString applicationManagerClass = psett->value( "ApplicationManager", "r").toString();

  ApplicationManager* pappM = ObjectCreator::applicationManager(applicationManagerClass);

  int result = pappM->run();

  delete pappM;

  return result;

}

application_finishers/applicationfinisher. h

#ifndef APPLICATIONFINISHER_H

#define APPLICATIONFINISHER_H

#include "includes. h"

#include "rccapplication. h"

class RCCApplication;

class ApplicationFinisher

{

public:

  ApplicationFinisher();

  virtual ~ApplicationFinisher();

  virtual bool needToFinishApplication() = 0;

protected:

  RCCApplication *_papp;

};

#endif // APPLICATIONFINISHER_H

application_finishers/ applicationfinisher. cpp

#include "applicationfinisher. h"

ApplicationFinisher::ApplicationFinisher():

  _papp((RCCApplication*)qApp)

{

}

ApplicationFinisher::~ApplicationFinisher()

{

}

application_finishers/stopfileaf. h

#ifndef STOPFILEAF_H

#define STOPFILEAF_H

#include "applicationfinisher. h"

class StopFileAF : public ApplicationFinisher

{

public:

  StopFileAF();

  virtual bool needToFinishApplication();

protected:

  QString _fileName;

};

#endif // STOPFILEAF_H

application_finishers/ stopfileaf. cpp

#include "stopfileaf. h"

StopFileAF::StopFileAF()

{

  RCCSettings *psett = RCCSettings::instance();

  _fileName = psett->value( "StopFile", "r").toString();

}

bool StopFileAF::needToFinishApplication()

{

  QFile stopFile(_fileName);

  if (stopFile. exists())

  {

  stopFile. remove();

  return true;

  }

  return false;

}

application_finishers/timeoutaf. h

#ifndef TIMEOUTAF_H

#define TIMEOUTAF_H

#include "applicationfinisher. h"

class TimeoutAF : public ApplicationFinisher

{

public:

  TimeoutAF();

  virtual bool needToFinishApplication();

protected:

  QElapsedTimer _timer;

  int _timeout;

};

#endif // TIMEOUTAF_H

application_finishers/ timeoutaf. cpp

#include "timeoutaf. h"

TimeoutAF::TimeoutAF()

{

  RCCSettings *psett = RCCSettings::instance();

  _timeout = psett->value( "TimeoutSeconds", "r").toInt();

  _timer. start();

}

bool TimeoutAF::needToFinishApplication()

{

  return (_timer. elapsed() / 1000) > _timeout;

}

application_finishers/workisdoneaf. h

#ifndef NOWORKAPPLICATIONFINISHER_H

#define NOWORKAPPLICATIONFINISHER_H

#include "applicationfinisher. h"

class WorkIsDoneAF : public ApplicationFinisher

{

public:

  WorkIsDoneAF();

  virtual bool needToFinishApplication();

};

#endif // NOWORKAPPLICATIONFINISHER_H

application_finishers/ workisdoneaf. cpp

#include "workisdoneaf. h"

WorkIsDoneAF::WorkIsDoneAF()

{

}

bool WorkIsDoneAF::needToFinishApplication()

{

  return _papp->pdM->allWorkIsDone();

}

application_managers/applicationmanager. h

#ifndef APPLICATIONMANAGER_H

#define APPLICATIONMANAGER_H

#include "includes. h"

#include "data_managers/datamanager. h"

class RCCApplication;

class ApplicationFinisher;

class ApplicationManager

{

public:

  ApplicationManager();

  virtual ~ApplicationManager();

  virtual int run() = 0;

protected:

  virtual DataManager* _setupDataManager() = 0;

  virtual void _setupThreads() = 0;

  virtual void _setupApplicationFinishers() = 0;

  virtual void _startThreads();

  RCCApplication *_app;

  QVector<ApplicationFinisher*> _appFs;

};

#include "objectcreator. h"

#endif // APPLICATIONMANAGER_H

application_managers/applicationmanager. cpp

#include "applicationmanager. h"

ApplicationManager::ApplicationManager():

  _app((RCCApplication*)qApp)

{

}

ApplicationManager::~ApplicationManager()

{

  for (auto pfinisher: _appFs)

  {

  delete pfinisher;

  }

}

void ApplicationManager::_startThreads()

{

  _app->pdownloadingThread->start();

  for (ParsingThread *pthread: _app->parsingThreadsList)

  {

  pthread->start();

  }

  _app->proutineThread->start();

}

application_managers/textfileam. h

#ifndef TEXTFILEAPPLICATIONMANAGER_H

#define TEXTFILEAPPLICATIONMANAGER_H

#include "includes. h"

#include "applicationmanager. h"

#include "rccapplication. h"

class TextFileAM : public ApplicationManager

{

public:

  TextFileAM();

  virtual int run();

protected:

  virtual DataManager* _setupDataManager();

  virtual void _setupThreads();

  virtual void _setupApplicationFinishers();

  virtual void _stopThreads();

  DataManager* _pdM;

};

#endif // TEXTFILEAPPLICATIONMANAGER_H

application_managers/textfileam. cpp

#include "textfileam. h"

TextFileAM::TextFileAM()

{

  _pdM = _setupDataManager();

  _setupThreads();

  _setupApplicationFinishers();

  _startThreads();

}

int TextFileAM::run()

{

  RCCSettings *psett = RCCSettings::instance();

  QElapsedTimer runTimer;

  runTimer. start();

  while(true)

  {

  _app->processEvents();

  _app->thread()->msleep(1000);

  bool finish = false;

  for (auto pfinisher: _appFs)

  {

  if (pfinisher->needToFinishApplication())

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9