split recv and send, they dont share any code (probably)

This commit is contained in:
Green Sky 2024-11-03 18:21:02 +01:00
parent 2e6b15e4ad
commit 6eb5826616
No known key found for this signature in database
5 changed files with 205 additions and 21 deletions

View File

@ -44,8 +44,10 @@ target_link_libraries(solanaceae_ngcft1 PUBLIC
######################################## ########################################
add_library(solanaceae_ngchs2 add_library(solanaceae_ngchs2
./solanaceae/ngc_hs2/ngc_hs2.hpp ./solanaceae/ngc_hs2/ngc_hs2_send.hpp
./solanaceae/ngc_hs2/ngc_hs2.cpp ./solanaceae/ngc_hs2/ngc_hs2_send.cpp
./solanaceae/ngc_hs2/ngc_hs2_recv.hpp
./solanaceae/ngc_hs2/ngc_hs2_recv.cpp
) )
target_include_directories(solanaceae_ngchs2 PUBLIC .) target_include_directories(solanaceae_ngchs2 PUBLIC .)
target_compile_features(solanaceae_ngchs2 PUBLIC cxx_std_17) target_compile_features(solanaceae_ngchs2 PUBLIC cxx_std_17)

View File

@ -1,8 +1,8 @@
#include "./ngc_hs2.hpp" #include "./ngc_hs2_recv.hpp"
#include <solanaceae/tox_contacts/tox_contact_model2.hpp> #include <solanaceae/tox_contacts/tox_contact_model2.hpp>
NGCHS2::NGCHS2( NGCHS2Recv::NGCHS2Recv(
Contact3Registry& cr, Contact3Registry& cr,
RegistryMessageModelI& rmm, RegistryMessageModelI& rmm,
ToxContactModel2& tcm, ToxContactModel2& tcm,
@ -29,7 +29,6 @@ NGCHS2::NGCHS2(
; ;
_nftep_sr _nftep_sr
.subscribe(NGCFT1_Event::recv_init)
.subscribe(NGCFT1_Event::recv_request) .subscribe(NGCFT1_Event::recv_request)
.subscribe(NGCFT1_Event::recv_init) .subscribe(NGCFT1_Event::recv_init)
.subscribe(NGCFT1_Event::recv_data) .subscribe(NGCFT1_Event::recv_data)
@ -39,26 +38,26 @@ NGCHS2::NGCHS2(
; ;
} }
NGCHS2::~NGCHS2(void) { NGCHS2Recv::~NGCHS2Recv(void) {
} }
float NGCHS2::iterate(float delta) { float NGCHS2Recv::iterate(float delta) {
return 1000.f; return 1000.f;
} }
bool NGCHS2::onEvent(const Message::Events::MessageConstruct&) { bool NGCHS2Recv::onEvent(const Message::Events::MessageConstruct&) {
return false; return false;
} }
bool NGCHS2::onEvent(const Message::Events::MessageUpdated&) { bool NGCHS2Recv::onEvent(const Message::Events::MessageUpdated&) {
return false; return false;
} }
bool NGCHS2::onEvent(const Message::Events::MessageDestory&) { bool NGCHS2Recv::onEvent(const Message::Events::MessageDestory&) {
return false; return false;
} }
bool NGCHS2::onEvent(const Events::NGCFT1_recv_request& e) { bool NGCHS2Recv::onEvent(const Events::NGCFT1_recv_request& e) {
if ( if (
e.file_kind != NGCFT1_file_kind::HS2_INFO_RANGE_TIME && e.file_kind != NGCFT1_file_kind::HS2_INFO_RANGE_TIME &&
e.file_kind != NGCFT1_file_kind::HS2_SINGLE_MESSAGE e.file_kind != NGCFT1_file_kind::HS2_SINGLE_MESSAGE
@ -69,7 +68,7 @@ bool NGCHS2::onEvent(const Events::NGCFT1_recv_request& e) {
return false; return false;
} }
bool NGCHS2::onEvent(const Events::NGCFT1_recv_init& e) { bool NGCHS2Recv::onEvent(const Events::NGCFT1_recv_init& e) {
if ( if (
e.file_kind != NGCFT1_file_kind::HS2_INFO_RANGE_TIME && e.file_kind != NGCFT1_file_kind::HS2_INFO_RANGE_TIME &&
e.file_kind != NGCFT1_file_kind::HS2_SINGLE_MESSAGE e.file_kind != NGCFT1_file_kind::HS2_SINGLE_MESSAGE
@ -80,23 +79,23 @@ bool NGCHS2::onEvent(const Events::NGCFT1_recv_init& e) {
return false; return false;
} }
bool NGCHS2::onEvent(const Events::NGCFT1_recv_data&) { bool NGCHS2Recv::onEvent(const Events::NGCFT1_recv_data&) {
return false; return false;
} }
bool NGCHS2::onEvent(const Events::NGCFT1_send_data&) { bool NGCHS2Recv::onEvent(const Events::NGCFT1_send_data&) {
return false; return false;
} }
bool NGCHS2::onEvent(const Events::NGCFT1_recv_done&) { bool NGCHS2Recv::onEvent(const Events::NGCFT1_recv_done&) {
return false; return false;
} }
bool NGCHS2::onEvent(const Events::NGCFT1_send_done&) { bool NGCHS2Recv::onEvent(const Events::NGCFT1_send_done&) {
return false; return false;
} }
bool NGCHS2::onToxEvent(const Tox_Event_Group_Peer_Join* e) { bool NGCHS2Recv::onToxEvent(const Tox_Event_Group_Peer_Join* e) {
const auto group_number = tox_event_group_peer_join_get_group_number(e); const auto group_number = tox_event_group_peer_join_get_group_number(e);
const auto peer_number = tox_event_group_peer_join_get_peer_id(e); const auto peer_number = tox_event_group_peer_join_get_peer_id(e);
@ -108,7 +107,7 @@ bool NGCHS2::onToxEvent(const Tox_Event_Group_Peer_Join* e) {
return false; return false;
} }
bool NGCHS2::onToxEvent(const Tox_Event_Group_Peer_Exit* e) { bool NGCHS2Recv::onToxEvent(const Tox_Event_Group_Peer_Exit* e) {
return false; return false;
} }

View File

@ -23,7 +23,7 @@ class ToxContactModel2;
// deal with a queue, and delay (at least 1sec, 3-10sec after a peer con change) // deal with a queue, and delay (at least 1sec, 3-10sec after a peer con change)
// or we always overrequest (eg 48h), and only fetch messages in, or close to range // or we always overrequest (eg 48h), and only fetch messages in, or close to range
class NGCHS2 : public RegistryMessageModelEventI, public ToxEventI, public NGCFT1EventI { class NGCHS2Recv : public RegistryMessageModelEventI, public ToxEventI, public NGCFT1EventI {
Contact3Registry& _cr; Contact3Registry& _cr;
RegistryMessageModelI& _rmm; RegistryMessageModelI& _rmm;
RegistryMessageModelI::SubscriptionReference _rmm_sr; RegistryMessageModelI::SubscriptionReference _rmm_sr;
@ -47,7 +47,7 @@ class NGCHS2 : public RegistryMessageModelEventI, public ToxEventI, public NGCFT
static const int64_t _max_time_into_past_default {60}; // s static const int64_t _max_time_into_past_default {60}; // s
public: public:
NGCHS2( NGCHS2Recv(
Contact3Registry& cr, Contact3Registry& cr,
RegistryMessageModelI& rmm, RegistryMessageModelI& rmm,
ToxContactModel2& tcm, ToxContactModel2& tcm,
@ -55,7 +55,7 @@ class NGCHS2 : public RegistryMessageModelEventI, public ToxEventI, public NGCFT
NGCFT1& nf NGCFT1& nf
); );
~NGCHS2(void); ~NGCHS2Recv(void);
float iterate(float delta); float iterate(float delta);

View File

@ -0,0 +1,127 @@
#include "./ngc_hs2_send.hpp"
#include "solanaceae/util/span.hpp"
#include <solanaceae/tox_contacts/tox_contact_model2.hpp>
#include <solanaceae/contact/components.hpp>
// https://www.youtube.com/watch?v=AdAqsgga3qo
NGCHS2Send::NGCHS2Send(
Contact3Registry& cr,
RegistryMessageModelI& rmm,
ToxContactModel2& tcm,
NGCFT1& nft
) :
_cr(cr),
_rmm(rmm),
_tcm(tcm),
_nft(nft),
_nftep_sr(_nft.newSubRef(this))
{
_nftep_sr
.subscribe(NGCFT1_Event::recv_request)
//.subscribe(NGCFT1_Event::recv_init) // we only send init
//.subscribe(NGCFT1_Event::recv_data) // we only send data
.subscribe(NGCFT1_Event::send_data)
//.subscribe(NGCFT1_Event::recv_done)
.subscribe(NGCFT1_Event::send_done)
;
}
NGCHS2Send::~NGCHS2Send(void) {
}
float NGCHS2Send::iterate(float delta) {
// work request queue
// check if already running, discard
return 1000.f;
}
void NGCHS2Send::handleRange(Contact3Handle c, const Events::NGCFT1_recv_request& e) {
ByteSpan fid{e.file_id, e.file_id_size};
// parse
// - ts start
// - ts end
// dedupe insert into queue
}
void NGCHS2Send::handleSingleMessage(Contact3Handle c, const Events::NGCFT1_recv_request& e) {
ByteSpan fid{e.file_id, e.file_id_size};
// parse
// - ppk
// - mid
// - ts
// file content
// - message type (text/textaction/file(ft1sha1))
// - if text/textaction
// - text (string)
// - else if file
// - file type
// - file id
// dedupe insert into queue
}
bool NGCHS2Send::onEvent(const Message::Events::MessageConstruct&) {
return false;
}
bool NGCHS2Send::onEvent(const Message::Events::MessageUpdated&) {
return false;
}
bool NGCHS2Send::onEvent(const Message::Events::MessageDestory&) {
return false;
}
bool NGCHS2Send::onEvent(const Events::NGCFT1_recv_request& e) {
if (
e.file_kind != NGCFT1_file_kind::HS2_INFO_RANGE_TIME &&
e.file_kind != NGCFT1_file_kind::HS2_SINGLE_MESSAGE
) {
return false; // not for us
}
// TODO: when is it done from queue?
auto c = _tcm.getContactGroupPeer(e.group_number, e.peer_number);
if (!c) {
return false; // how
}
// is other peer allowed to make requests
//bool quick_allow {false};
bool quick_allow {true}; // HACK: disable all restrictions for this early test
// TODO: quick deny?
{
// - tagged as weakself
if (!quick_allow && c.all_of<Contact::Components::TagSelfWeak>()) {
quick_allow = true;
}
// - sub perm level??
// - out of max time range (ft specific, not a quick_allow)
}
if (e.file_kind == NGCFT1_file_kind::HS2_INFO_RANGE_TIME) {
handleRange(c, e);
} else if (e.file_kind == NGCFT1_file_kind::HS2_SINGLE_MESSAGE) {
handleSingleMessage(c, e);
}
return true;
}
bool NGCHS2Send::onEvent(const Events::NGCFT1_send_data&) {
return false;
}
bool NGCHS2Send::onEvent(const Events::NGCFT1_send_done&) {
return false;
}

View File

@ -0,0 +1,56 @@
#pragma once
#include <solanaceae/toxcore/tox_event_interface.hpp>
#include <solanaceae/contact/contact_model3.hpp>
#include <solanaceae/message3/registry_message_model.hpp>
#include <solanaceae/ngc_ft1/ngcft1.hpp>
#include <entt/container/dense_map.hpp>
// fwd
class ToxContactModel2;
// limit to 2 uploads per peer simultaniously
class NGCHS2Send : public RegistryMessageModelEventI, public NGCFT1EventI {
Contact3Registry& _cr;
RegistryMessageModelI& _rmm;
ToxContactModel2& _tcm;
NGCFT1& _nft;
NGCFT1EventProviderI::SubscriptionReference _nftep_sr;
// open/running info requests (by c)
// open/running info responses (by c)
static const bool _only_send_self_observed {true};
static const int64_t _max_time_into_past_default {60}; // s
public:
NGCHS2Send(
Contact3Registry& cr,
RegistryMessageModelI& rmm,
ToxContactModel2& tcm,
NGCFT1& nf
);
~NGCHS2Send(void);
float iterate(float delta);
void handleRange(Contact3Handle c, const Events::NGCFT1_recv_request&);
void handleSingleMessage(Contact3Handle c, const Events::NGCFT1_recv_request&);
protected:
bool onEvent(const Message::Events::MessageConstruct&) override;
bool onEvent(const Message::Events::MessageUpdated&) override;
bool onEvent(const Message::Events::MessageDestory&) override;
protected:
bool onEvent(const Events::NGCFT1_recv_request&) override;
bool onEvent(const Events::NGCFT1_send_data&) override;
bool onEvent(const Events::NGCFT1_send_done&) override;
};