diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-06-20 14:33:09 +1000 |
commit | 6352e8e3196f78388b6c771073f9e03eaa612673 (patch) | |
tree | e23772f79a7fbc41bc9108951e9e136857484bf4 /source/platform | |
parent | 6741a057e5639280d85d0f88ba26f000baa58f61 (diff) |
everything everywhere
all at once
Diffstat (limited to 'source/platform')
-rw-r--r-- | source/platform/CMakeLists.txt | 11 | ||||
-rw-r--r-- | source/platform/StarDesktopService.hpp | 17 | ||||
-rw-r--r-- | source/platform/StarP2PNetworkingService.hpp | 65 | ||||
-rw-r--r-- | source/platform/StarStatisticsService.hpp | 40 | ||||
-rw-r--r-- | source/platform/StarUserGeneratedContentService.hpp | 26 |
5 files changed, 159 insertions, 0 deletions
diff --git a/source/platform/CMakeLists.txt b/source/platform/CMakeLists.txt new file mode 100644 index 0000000..edab1a2 --- /dev/null +++ b/source/platform/CMakeLists.txt @@ -0,0 +1,11 @@ +INCLUDE_DIRECTORIES ( + ${STAR_EXTERN_INCLUDES} + ${STAR_CORE_INCLUDES} + ${STAR_PLATFORM_INCLUDES} + ) + +SET (star_platform_HEADERS + StarP2PNetworkingService.hpp + StarStatisticsService.hpp + StarUserGeneratedContentService.hpp + ) diff --git a/source/platform/StarDesktopService.hpp b/source/platform/StarDesktopService.hpp new file mode 100644 index 0000000..dafdc74 --- /dev/null +++ b/source/platform/StarDesktopService.hpp @@ -0,0 +1,17 @@ +#ifndef STAR_DESKTOP_SERVICE_HPP +#define STAR_DESKTOP_SERVICE_HPP + +namespace Star { + +STAR_CLASS(DesktopService); + +class DesktopService { +public: + ~DesktopService() = default; + + virtual void openUrl(String const& url) = 0; +}; + +} + +#endif diff --git a/source/platform/StarP2PNetworkingService.hpp b/source/platform/StarP2PNetworkingService.hpp new file mode 100644 index 0000000..562c2cb --- /dev/null +++ b/source/platform/StarP2PNetworkingService.hpp @@ -0,0 +1,65 @@ +#ifndef STAR_P2P_NETWORKING_SERVICE_HPP +#define STAR_P2P_NETWORKING_SERVICE_HPP + +#include "StarEither.hpp" +#include "StarHostAddress.hpp" +#include "StarStrongTypedef.hpp" +#include "StarRpcPromise.hpp" + +namespace Star { + +STAR_CLASS(P2PSocket); +STAR_CLASS(P2PNetworkingService); + +enum class P2PJoinRequestReply { + No, + Yes, + Ignore, +}; + +// P2P networking is assumed to be guaranteed in order delivery of arbitrarily +// sized messages. Neither the P2PSocket or the P2PNetworkingService are +// assumed to be thread safe interfaces, but access to independent P2PSockets +// from different threads or access to a P2PSocket and the P2PNetworkingService +// from different threads is assumed to be safe. +class P2PSocket { +public: + virtual ~P2PSocket() = default; + + virtual bool isOpen() = 0; + virtual bool sendMessage(ByteArray const& message) = 0; + virtual Maybe<ByteArray> receiveMessage() = 0; +}; + +strong_typedef(String, P2PNetworkingPeerId); + +// API for platform specific peer to peer multiplayer services. +class P2PNetworkingService { +public: + virtual ~P2PNetworkingService() = default; + + // P2P friends cannot join this player + virtual void setJoinUnavailable() = 0; + // P2P friends can join this player's local game + virtual void setJoinLocal(uint32_t capacity) = 0; + // P2P friends can join this player at the given remote server + virtual void setJoinRemote(HostAddressWithPort location) = 0; + // Updates rich presence activity info + virtual void setActivityData(String const& title, Maybe<pair<uint16_t, uint16_t>>) = 0; + + // If this player joins another peer's game using the P2P UI, this will return + // a pending join location + virtual MVariant<P2PNetworkingPeerId, HostAddressWithPort> pullPendingJoin() = 0; + // This will return a username and a promise keeper to respond to the join request + virtual Maybe<pair<String, RpcPromiseKeeper<P2PJoinRequestReply>>> pullJoinRequest() = 0; + + virtual void setAcceptingP2PConnections(bool acceptingP2PConnections) = 0; + virtual List<P2PSocketUPtr> acceptP2PConnections() = 0; + virtual void update() = 0; + + virtual Either<String, P2PSocketUPtr> connectToPeer(P2PNetworkingPeerId peerId) = 0; +}; + +}; + +#endif diff --git a/source/platform/StarStatisticsService.hpp b/source/platform/StarStatisticsService.hpp new file mode 100644 index 0000000..c6afec7 --- /dev/null +++ b/source/platform/StarStatisticsService.hpp @@ -0,0 +1,40 @@ +#ifndef STAR_STATS_BACKEND_HPP +#define STAR_STATS_BACKEND_HPP + +#include "StarJson.hpp" + +namespace Star { + +STAR_CLASS(StatisticsService); + +class StatisticsService { +public: + virtual ~StatisticsService() = default; + + virtual bool initialized() const = 0; + virtual Maybe<String> error() const = 0; + + // The functions below aren't valid unless initialized() returns true and + // error() is empty. + + // setStat should return false for stats or types that aren't known by the + // service, without reporting an error. + // By sending all stats to the StatisticsService, we can configure collection + // of new stats entirely on the service, without any modifications to the game. + virtual bool setStat(String const& name, String const& type, Json const& value) = 0; + virtual Json getStat(String const& name, String const& type, Json def = {}) const = 0; + + // reportEvent should return false if the service doesn't handle this event. + virtual bool reportEvent(String const& name, Json const& fields) = 0; + + virtual bool unlockAchievement(String const& name) = 0; + virtual StringSet achievementsUnlocked() const = 0; + + virtual void refresh() = 0; + virtual void flush() = 0; + virtual bool reset() = 0; +}; + +} + +#endif diff --git a/source/platform/StarUserGeneratedContentService.hpp b/source/platform/StarUserGeneratedContentService.hpp new file mode 100644 index 0000000..3a582ba --- /dev/null +++ b/source/platform/StarUserGeneratedContentService.hpp @@ -0,0 +1,26 @@ +#ifndef STAR_USER_GENERATED_CONTENT_SERVICE_HPP +#define STAR_USER_GENERATED_CONTENT_SERVICE_HPP + +namespace Star { + +STAR_CLASS(UserGeneratedContentService); + +class UserGeneratedContentService { +public: + ~UserGeneratedContentService() = default; + + // Returns a list of the content the user is currently subscribed to. + virtual StringList subscribedContentIds() const = 0; + + // If the content has been downloaded successfully, returns the path to the + // downloaded content directory on the filesystem, otherwise nothing. + virtual Maybe<String> contentDownloadDirectory(String const& contentId) const = 0; + + // Start downloading subscribed content in the background, returns true when + // all content is synchronized. + virtual bool triggerContentDownload() = 0; +}; + +} + +#endif |