solanaceae_toxcore/solanaceae/core/tox_event_interface.hpp

178 lines
5.7 KiB
C++

#pragma once
#include <tox/tox_events.h>
#include <string_view>
// defines the full event interface for tox event subscription
struct ToxEventI {
virtual ~ToxEventI(void) {}
#define VIRT_EVENT(x) virtual bool onToxEvent(const x*) { return false; }
// return true if the event is handled and should not be given down the chain
VIRT_EVENT(Tox_Event_Conference_Connected)
VIRT_EVENT(Tox_Event_Conference_Invite)
VIRT_EVENT(Tox_Event_Conference_Message)
VIRT_EVENT(Tox_Event_Conference_Peer_List_Changed)
VIRT_EVENT(Tox_Event_Conference_Peer_Name)
VIRT_EVENT(Tox_Event_Conference_Title)
VIRT_EVENT(Tox_Event_File_Chunk_Request)
VIRT_EVENT(Tox_Event_File_Recv)
VIRT_EVENT(Tox_Event_File_Recv_Chunk)
VIRT_EVENT(Tox_Event_File_Recv_Control)
VIRT_EVENT(Tox_Event_Friend_Connection_Status)
VIRT_EVENT(Tox_Event_Friend_Lossless_Packet)
VIRT_EVENT(Tox_Event_Friend_Lossy_Packet)
VIRT_EVENT(Tox_Event_Friend_Message)
VIRT_EVENT(Tox_Event_Friend_Name)
VIRT_EVENT(Tox_Event_Friend_Read_Receipt)
VIRT_EVENT(Tox_Event_Friend_Request)
VIRT_EVENT(Tox_Event_Friend_Status)
VIRT_EVENT(Tox_Event_Friend_Status_Message)
VIRT_EVENT(Tox_Event_Friend_Typing)
VIRT_EVENT(Tox_Event_Self_Connection_Status)
VIRT_EVENT(Tox_Event_Group_Peer_Name)
VIRT_EVENT(Tox_Event_Group_Peer_Status)
VIRT_EVENT(Tox_Event_Group_Topic)
VIRT_EVENT(Tox_Event_Group_Privacy_State)
VIRT_EVENT(Tox_Event_Group_Voice_State)
VIRT_EVENT(Tox_Event_Group_Topic_Lock)
VIRT_EVENT(Tox_Event_Group_Peer_Limit)
VIRT_EVENT(Tox_Event_Group_Password)
VIRT_EVENT(Tox_Event_Group_Message)
VIRT_EVENT(Tox_Event_Group_Private_Message)
VIRT_EVENT(Tox_Event_Group_Custom_Packet)
VIRT_EVENT(Tox_Event_Group_Custom_Private_Packet)
VIRT_EVENT(Tox_Event_Group_Invite)
VIRT_EVENT(Tox_Event_Group_Peer_Join)
VIRT_EVENT(Tox_Event_Group_Peer_Exit)
VIRT_EVENT(Tox_Event_Group_Self_Join)
VIRT_EVENT(Tox_Event_Group_Join_Fail)
VIRT_EVENT(Tox_Event_Group_Moderation)
#undef VIRT_EVENT
};
// defines the interface where to subscribe
struct ToxEventProviderI {
// TODO: unsub
virtual void subscribe(ToxEventI* object, const Tox_Event event_type) = 0;
};
constexpr Tox_Event tox_event_from_string(const std::string_view str) {
#define CASE_E_TYPE(x) if (str == #x) return Tox_Event::x;
CASE_E_TYPE(TOX_EVENT_SELF_CONNECTION_STATUS)
CASE_E_TYPE(TOX_EVENT_FRIEND_REQUEST)
CASE_E_TYPE(TOX_EVENT_FRIEND_CONNECTION_STATUS)
CASE_E_TYPE(TOX_EVENT_FRIEND_LOSSY_PACKET)
CASE_E_TYPE(TOX_EVENT_FRIEND_LOSSLESS_PACKET)
CASE_E_TYPE(TOX_EVENT_FRIEND_NAME)
CASE_E_TYPE(TOX_EVENT_FRIEND_STATUS)
CASE_E_TYPE(TOX_EVENT_FRIEND_STATUS_MESSAGE)
CASE_E_TYPE(TOX_EVENT_FRIEND_MESSAGE)
CASE_E_TYPE(TOX_EVENT_FRIEND_READ_RECEIPT)
CASE_E_TYPE(TOX_EVENT_FRIEND_TYPING)
CASE_E_TYPE(TOX_EVENT_FILE_CHUNK_REQUEST)
CASE_E_TYPE(TOX_EVENT_FILE_RECV)
CASE_E_TYPE(TOX_EVENT_FILE_RECV_CHUNK)
CASE_E_TYPE(TOX_EVENT_FILE_RECV_CONTROL)
CASE_E_TYPE(TOX_EVENT_CONFERENCE_INVITE)
CASE_E_TYPE(TOX_EVENT_CONFERENCE_CONNECTED)
CASE_E_TYPE(TOX_EVENT_CONFERENCE_PEER_LIST_CHANGED)
CASE_E_TYPE(TOX_EVENT_CONFERENCE_PEER_NAME)
CASE_E_TYPE(TOX_EVENT_CONFERENCE_TITLE)
CASE_E_TYPE(TOX_EVENT_CONFERENCE_MESSAGE)
CASE_E_TYPE(TOX_EVENT_GROUP_PEER_NAME)
CASE_E_TYPE(TOX_EVENT_GROUP_PEER_STATUS)
CASE_E_TYPE(TOX_EVENT_GROUP_TOPIC)
CASE_E_TYPE(TOX_EVENT_GROUP_PRIVACY_STATE)
CASE_E_TYPE(TOX_EVENT_GROUP_VOICE_STATE)
CASE_E_TYPE(TOX_EVENT_GROUP_TOPIC_LOCK)
CASE_E_TYPE(TOX_EVENT_GROUP_PEER_LIMIT)
CASE_E_TYPE(TOX_EVENT_GROUP_PASSWORD)
CASE_E_TYPE(TOX_EVENT_GROUP_MESSAGE)
CASE_E_TYPE(TOX_EVENT_GROUP_PRIVATE_MESSAGE)
CASE_E_TYPE(TOX_EVENT_GROUP_CUSTOM_PACKET)
CASE_E_TYPE(TOX_EVENT_GROUP_CUSTOM_PRIVATE_PACKET)
CASE_E_TYPE(TOX_EVENT_GROUP_INVITE)
CASE_E_TYPE(TOX_EVENT_GROUP_PEER_JOIN)
CASE_E_TYPE(TOX_EVENT_GROUP_PEER_EXIT)
CASE_E_TYPE(TOX_EVENT_GROUP_SELF_JOIN)
CASE_E_TYPE(TOX_EVENT_GROUP_JOIN_FAIL)
CASE_E_TYPE(TOX_EVENT_GROUP_MODERATION)
return (Tox_Event)-1; // TODO: add invalid event enum?
#undef CASE_E_TYPE
}
constexpr std::string_view tox_event_to_string(const Tox_Event e) {
#define CASE_E_TYPE(x) if (e == x) return #x;
CASE_E_TYPE(TOX_EVENT_SELF_CONNECTION_STATUS)
CASE_E_TYPE(TOX_EVENT_FRIEND_REQUEST)
CASE_E_TYPE(TOX_EVENT_FRIEND_CONNECTION_STATUS)
CASE_E_TYPE(TOX_EVENT_FRIEND_LOSSY_PACKET)
CASE_E_TYPE(TOX_EVENT_FRIEND_LOSSLESS_PACKET)
CASE_E_TYPE(TOX_EVENT_FRIEND_NAME)
CASE_E_TYPE(TOX_EVENT_FRIEND_STATUS)
CASE_E_TYPE(TOX_EVENT_FRIEND_STATUS_MESSAGE)
CASE_E_TYPE(TOX_EVENT_FRIEND_MESSAGE)
CASE_E_TYPE(TOX_EVENT_FRIEND_READ_RECEIPT)
CASE_E_TYPE(TOX_EVENT_FRIEND_TYPING)
CASE_E_TYPE(TOX_EVENT_FILE_CHUNK_REQUEST)
CASE_E_TYPE(TOX_EVENT_FILE_RECV)
CASE_E_TYPE(TOX_EVENT_FILE_RECV_CHUNK)
CASE_E_TYPE(TOX_EVENT_FILE_RECV_CONTROL)
CASE_E_TYPE(TOX_EVENT_CONFERENCE_INVITE)
CASE_E_TYPE(TOX_EVENT_CONFERENCE_CONNECTED)
CASE_E_TYPE(TOX_EVENT_CONFERENCE_PEER_LIST_CHANGED)
CASE_E_TYPE(TOX_EVENT_CONFERENCE_PEER_NAME)
CASE_E_TYPE(TOX_EVENT_CONFERENCE_TITLE)
CASE_E_TYPE(TOX_EVENT_CONFERENCE_MESSAGE)
CASE_E_TYPE(TOX_EVENT_GROUP_PEER_NAME)
CASE_E_TYPE(TOX_EVENT_GROUP_PEER_STATUS)
CASE_E_TYPE(TOX_EVENT_GROUP_TOPIC)
CASE_E_TYPE(TOX_EVENT_GROUP_PRIVACY_STATE)
CASE_E_TYPE(TOX_EVENT_GROUP_VOICE_STATE)
CASE_E_TYPE(TOX_EVENT_GROUP_TOPIC_LOCK)
CASE_E_TYPE(TOX_EVENT_GROUP_PEER_LIMIT)
CASE_E_TYPE(TOX_EVENT_GROUP_PASSWORD)
CASE_E_TYPE(TOX_EVENT_GROUP_MESSAGE)
CASE_E_TYPE(TOX_EVENT_GROUP_PRIVATE_MESSAGE)
CASE_E_TYPE(TOX_EVENT_GROUP_CUSTOM_PACKET)
CASE_E_TYPE(TOX_EVENT_GROUP_CUSTOM_PRIVATE_PACKET)
CASE_E_TYPE(TOX_EVENT_GROUP_INVITE)
CASE_E_TYPE(TOX_EVENT_GROUP_PEER_JOIN)
CASE_E_TYPE(TOX_EVENT_GROUP_PEER_EXIT)
CASE_E_TYPE(TOX_EVENT_GROUP_SELF_JOIN)
CASE_E_TYPE(TOX_EVENT_GROUP_JOIN_FAIL)
CASE_E_TYPE(TOX_EVENT_GROUP_MODERATION)
return "<unk>"; // TODO: add invalid event enum?
#undef CASE_E_TYPE
}