/**
This file is a part of rexy's matrix client
Copyright (C) 2019 rexy712
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program 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 Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
#ifndef MATRIX_SYNCER_HPP
#define MATRIX_SYNCER_HPP
#include "raii/curler.hpp"
#include "raii/rjp_string.hpp"
#include "raii/string.hpp"
#include "matrix/session_info.hpp"
#include "matrix/connection.hpp"
#include "matrix/sync_response.hpp"
#include "matrix/netreturn.hpp"
#include //size_t
#include //shared_ptr
namespace matrix{
//Specialized class used for syncing up with homeserver.
//Designed to be run on a dedicated thread.
//Shares state with spawning session.
class syncer : public connection
{
private:
raii::rjp_string m_next_batch; //string which tracks where we are in the server history
public:
syncer(const std::shared_ptr&);
//Copy and move ctor
syncer(const syncer& b) = default;
syncer(syncer&& b) = default;
//Dtor
~syncer(void) = default;
//Copy and move assignment
syncer& operator=(const syncer&) = default;
syncer& operator=(syncer&&) = default;
/*
* Sync state with the homeserver. Will wait for up to timeout ms.
* Returns: the raw json response from the homeserver.
*/
netreturn sync(size_t timeout);
};
}
#endif