hello mr fox
This commit is contained in:
121
solanaceae/zox/ngc.hpp
Normal file
121
solanaceae/zox/ngc.hpp
Normal file
@@ -0,0 +1,121 @@
|
||||
#pragma once
|
||||
|
||||
#include <solanaceae/toxcore/tox_event_interface.hpp>
|
||||
|
||||
#include <solanaceae/util/event_provider.hpp>
|
||||
|
||||
#include <array>
|
||||
#include <vector>
|
||||
|
||||
// fwd
|
||||
//struct ToxI;
|
||||
|
||||
// zoff ngc history sync (draft1?)
|
||||
// https://gist.github.com/zoff99/81917ddb2e55b2ce602cac4772a7b68c
|
||||
|
||||
namespace Events {
|
||||
|
||||
struct ZoxNGC_ngch_request {
|
||||
uint32_t group_number {0u};
|
||||
uint32_t peer_number {0u};
|
||||
|
||||
bool _private {true};
|
||||
|
||||
uint8_t sync_delta {130u};
|
||||
};
|
||||
|
||||
struct ZoxNGC_ngch_syncmsg {
|
||||
uint32_t group_number {0u};
|
||||
uint32_t peer_number {0u};
|
||||
|
||||
bool _private {true};
|
||||
|
||||
uint32_t message_id {0u};
|
||||
// TODO: span
|
||||
std::array<uint8_t, 32> sender_pub_key;
|
||||
uint32_t timestamp {0u};
|
||||
std::string_view sender_name;
|
||||
std::string_view message_text;
|
||||
};
|
||||
|
||||
} // Events
|
||||
|
||||
enum class ZoxNGC_Event : uint32_t {
|
||||
// hs
|
||||
v0x01_id0x01 = 0,
|
||||
ngch_request = v0x01_id0x01,
|
||||
|
||||
v0x01_id0x02,
|
||||
ngch_syncmsg = v0x01_id0x02,
|
||||
|
||||
v0x01_id0x03,
|
||||
ngch_syncmsg_file = v0x01_id0x03,
|
||||
|
||||
//v0x01_id0x04,
|
||||
//v0x01_id0x05,
|
||||
//v0x01_id0x06,
|
||||
//v0x01_id0x07,
|
||||
//v0x01_id0x08,
|
||||
//v0x01_id0x09,
|
||||
//v0x01_id0x0a,
|
||||
//v0x01_id0x0b,
|
||||
//v0x01_id0x0c,
|
||||
//v0x01_id0x0d,
|
||||
//v0x01_id0x0e,
|
||||
//v0x01_id0x0f,
|
||||
//v0x01_id0x10,
|
||||
|
||||
v0x01_id0x11,
|
||||
ngch_ft = v0x01_id0x11,
|
||||
|
||||
// ...
|
||||
|
||||
// v0x02_id0x01
|
||||
|
||||
MAX
|
||||
};
|
||||
|
||||
static_assert(size_t(ZoxNGC_Event::v0x01_id0x02) == size_t(ZoxNGC_Event::v0x01_id0x01) + 1u);
|
||||
|
||||
struct ZoxNGCEventI {
|
||||
using enumType = ZoxNGC_Event;
|
||||
virtual bool onEvent(const Events::ZoxNGC_ngch_request&) { return false; }
|
||||
virtual bool onEvent(const Events::ZoxNGC_ngch_syncmsg&) { return false; }
|
||||
};
|
||||
|
||||
using ZoxNGCEventProviderI = EventProviderI<ZoxNGCEventI>;
|
||||
|
||||
class ZoxNGCEventProvider : public ToxEventI, public ZoxNGCEventProviderI {
|
||||
ToxEventProviderI& _tep;
|
||||
//ToxI& _t;
|
||||
|
||||
void subscribeToEvents(void); // private
|
||||
|
||||
public:
|
||||
ZoxNGCEventProvider(ToxEventProviderI& tep/*, ToxI& t*/);
|
||||
|
||||
protected:
|
||||
bool onZoxGroupEvent(
|
||||
uint32_t group_number, uint32_t peer_number,
|
||||
uint8_t version, uint8_t pkt_id,
|
||||
const uint8_t* data, size_t data_size,
|
||||
bool _private
|
||||
);
|
||||
|
||||
bool parse_ngch_request(
|
||||
uint32_t group_number, uint32_t peer_number,
|
||||
const uint8_t* data, size_t data_size,
|
||||
bool _private
|
||||
);
|
||||
|
||||
bool parse_ngch_syncmsg(
|
||||
uint32_t group_number, uint32_t peer_number,
|
||||
const uint8_t* data, size_t data_size,
|
||||
bool _private
|
||||
);
|
||||
|
||||
protected:
|
||||
bool onToxEvent(const Tox_Event_Group_Custom_Packet* e) override;
|
||||
bool onToxEvent(const Tox_Event_Group_Custom_Private_Packet* e) override;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user