sending chunks working

This commit is contained in:
2023-08-09 23:02:29 +02:00
parent ae714fcedc
commit 853a54a9b5
3 changed files with 261 additions and 5 deletions

View File

@ -9,7 +9,8 @@
#include "./ngcft1.hpp"
#include "./ft1_sha1_info.hpp"
#include "entt/container/dense_map.hpp"
#include <entt/container/dense_map.hpp>
#include <variant>
@ -19,9 +20,19 @@ class SHA1_NGCFT1 : public RegistryMessageModelEventI, public NGCFT1EventI {
NGCFT1& _nft;
ToxContactModel2& _tcm;
// limit this to each group?
entt::dense_map<SHA1Digest, Message3Handle> _info_to_message;
// sha1 chunk index
// TODO: optimize lookup
entt::dense_map<SHA1Digest, Message3Handle> _chunks;
// group_number, peer_number, message, chunk_hash, timer
std::deque<std::tuple<uint32_t, uint32_t, Message3Handle, SHA1Digest, float>> _queue_requested_chunk;
//void queueUpRequestInfo(uint32_t group_number, uint32_t peer_number, const SHA1Digest& hash);
void queueUpRequestChunk(uint32_t group_number, uint32_t peer_number, Message3Handle msg, const SHA1Digest& hash);
struct SendingTransfer {
struct Info {
// copy of info data
@ -29,13 +40,28 @@ class SHA1_NGCFT1 : public RegistryMessageModelEventI, public NGCFT1EventI {
std::vector<uint8_t> info_data;
};
std::variant<Info> v;
struct Chunk {
Message3Handle msg;
uint64_t offset_into_file;
// or data?
// if memmapped, this would be just a pointer
};
std::variant<Info, Chunk> v;
float time_since_activity {0.f};
};
// key is groupid + peerid
entt::dense_map<uint64_t, entt::dense_map<uint8_t, SendingTransfer>> _sending_transfers;
static uint64_t combineIds(const uint32_t group_number, const uint32_t peer_number);
public: // TODO: config
bool _udp_only {false};
size_t _max_concurrent_in {8};
size_t _max_concurrent_out {4};
public:
SHA1_NGCFT1(
Contact3Registry& cr,
@ -44,7 +70,7 @@ class SHA1_NGCFT1 : public RegistryMessageModelEventI, public NGCFT1EventI {
ToxContactModel2& tcm
);
//void iterate(float delta);
void iterate(float delta);
protected: // events
bool onEvent(const Events::NGCFT1_recv_request&) override;