#pragma once #include #include #include #include #include #include #include #include #include "dvlnet/abstract_net.h" #include "storm/storm_net.hpp" namespace devilution::net { class cdwrap : public abstract_net { private: std::unique_ptr dvlnet_wrap; ankerl::unordered_dense::map registered_handlers; buffer_t game_init_info; std::optional game_pw; tl::function_ref()> make_net_fn_; void reset(); public: explicit cdwrap(tl::function_ref()> makeNetFn) : make_net_fn_(makeNetFn) { reset(); } int create(std::string_view addrstr) override; int join(std::string_view addrstr) override; bool SNetReceiveMessage(uint8_t *sender, void **data, size_t *size) override; bool SNetSendMessage(uint8_t dest, void *data, size_t size) override; bool SNetReceiveTurns(char **data, size_t *size, uint32_t *status) override; bool SNetSendTurn(char *data, size_t size) override; void SNetGetProviderCaps(struct _SNETCAPS *caps) override; bool SNetRegisterEventHandler(event_type evtype, SEVTHANDLER func) override; bool SNetUnregisterEventHandler(event_type evtype) override; bool SNetLeaveGame(net::leaveinfo_t type) override; bool SNetDropPlayer(int playerid, net::leaveinfo_t flags) override; bool SNetGetOwnerTurnsWaiting(uint32_t *turns) override; bool SNetGetTurnsInTransit(uint32_t *turns) override; void process_network_packets() override; void setup_gameinfo(buffer_t info) override; std::string make_default_gamename() override; bool send_info_request() override; void clear_gamelist() override; std::vector get_gamelist() override; void setup_password(std::string pw) override; void clear_password() override; DvlNetLatencies get_latencies(uint8_t playerid) override; virtual ~cdwrap() = default; }; } // namespace devilution::net