#pragma once class File; class StatsCounter; class User; class File; class Stat; class StatsSyncher { private: static const int SAVE_INTERVAL = 20 * 5; static const int SEND_INTERVAL = 20 * 60; volatile bool busy; volatile std::unordered_map* serverStats; volatile std::unordered_map* failedSentStats; StatsCounter* statsCounter; File *unsentFile, *lastServerFile; File *unsentFileTmp, *lastServerFileTmp; File *unsentFileOld, *lastServerFileOld; User* user; int noSaveIn, noSendIn; public: StatsSyncher(User* user, StatsCounter* statsCounter, File* dir); private: void attemptRename(File* dir, const std::wstring& name, File* to); std::unordered_map* loadStatsFromDisk(File* file, File* tmp, File* old); std::unordered_map* loadStatsFromDisk(File* file); void doSend(std::unordered_map* stats); void doSave(std::unordered_map* stats, File* file, File* tmp, File* old); protected: std::unordered_map* doGetStats(); public: void getStatsFromServer(); void saveUnsent(std::unordered_map* stats); void sendUnsent(std::unordered_map* stats, std::unordered_map* fullStats); void forceSendUnsent(std::unordered_map* stats); void forceSaveUnsent(std::unordered_map* stats); bool maySave(); bool maySend(); void tick(); };