//SPDX-FileCopyrightText: 2023 Yury Gubich //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include #include "request/accepting.h" #include "taskmanager/scheduler.h" #include "database/schema/asset.h" class Session : public Accepting { public: Session ( std::weak_ptr scheduler, unsigned int id, unsigned int owner, const std::string& access, const std::string& renew, unsigned int timeout ); Session (const Session&) = delete; Session (Session&& other) = delete; ~Session (); Session& operator = (const Session&) = delete; Session& operator = (Session&& other) = delete; std::string getAccessToken () const; std::string getRenewToken () const; void accept (std::unique_ptr request) override; const unsigned int id; const unsigned int owner; void assetAdded (const DB::Asset& asset); void assetChanged (const DB::Asset& asset); void assetRemoved (unsigned int assetId); private: void onTimeout (); void sendUpdates (std::unique_ptr request); void checkUpdates (); void static removeByID (nlohmann::json& array, unsigned int id); private: std::weak_ptr scheduler; std::string access; std::string renew; std::unique_ptr polling; TM::Record::ID timeoutId; TM::Scheduler::Delay timeout; std::mutex mtx; std::map> cache; };