tdlight/td/telegram/net/SessionMultiProxy.h
2024-01-01 03:07:21 +03:00

64 lines
1.7 KiB
C++

//
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2024
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#pragma once
#include "td/telegram/net/AuthDataShared.h"
#include "td/telegram/net/NetQuery.h"
#include "td/actor/actor.h"
#include <memory>
namespace td {
class SessionProxy;
class SessionMultiProxy final : public Actor {
public:
SessionMultiProxy(int32 session_count, std::shared_ptr<AuthDataShared> shared_auth_data, bool is_primary,
bool is_main, bool use_pfs, bool allow_media_only, bool is_media, bool is_cdn);
SessionMultiProxy(const SessionMultiProxy &) = delete;
SessionMultiProxy &operator=(const SessionMultiProxy &) = delete;
~SessionMultiProxy() final;
void send(NetQueryPtr query);
void update_main_flag(bool is_main);
void update_session_count(int32 session_count);
void update_use_pfs(bool use_pfs);
void update_options(int32 session_count, bool use_pfs, bool need_destroy_auth_key);
void update_mtproto_header();
void destroy_auth_key();
private:
int32 session_count_ = 0;
std::shared_ptr<AuthDataShared> auth_data_;
const bool is_primary_;
bool is_main_ = false;
bool use_pfs_ = false;
bool allow_media_only_ = false;
bool is_media_ = false;
bool is_cdn_ = false;
bool need_destroy_auth_key_ = false;
struct SessionInfo {
ActorOwn<SessionProxy> proxy;
int query_count{0};
};
uint32 sessions_generation_{0};
std::vector<SessionInfo> sessions_;
void start_up() final;
void init();
bool get_pfs_flag() const;
void on_query_finished(uint32 generation, int session_id);
};
} // namespace td