{
}
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 |


