/* * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution (the "License"). All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file. Do not * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ #pragma once #include #include #include #include #include namespace Presence { class PresenceSystemComponent : public AZ::Component , protected PresenceRequestBus::Handler { #define DEBUG_PRESENCE 1 public: //////////////////////////////////////////////////////////////////////////////////////// //! Component setup AZ_COMPONENT(PresenceSystemComponent, "{1B04E968-2729-4CA0-8841-21E50FE9133C}"); //////////////////////////////////////////////////////////////////////////////////////// //! Component overrides static void Reflect(AZ::ReflectContext* context); static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided); static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible); protected: //////////////////////////////////////////////////////////////////////// //! AZ::Component interface implementation void Activate() override; void Deactivate() override; //////////////////////////////////////////////////////////////////////// //! PresenceRequestBus interface implementation void SetPresence(const SetPresenceParams& params) override; void QueryPresence(const QueryPresenceParams& params); public: //////////////////////////////////////////////////////////////////////// //! Base class for platform specific implementations class Implementation { public: AZ_CLASS_ALLOCATOR(Implementation, AZ::SystemAllocator, 0); static Implementation* Create(PresenceSystemComponent& presenceSystemComponent); Implementation(PresenceSystemComponent& presenceSystemComponent); AZ_DISABLE_COPY_MOVE(Implementation); virtual ~Implementation(); virtual void SetPresence(const SetPresenceParams& params) = 0; virtual void QueryPresence(const QueryPresenceParams& params) = 0; static void OnPresenceSetComplete(const SetPresenceParams& params); static void OnPresenceQueriedComplete(const QueryPresenceParams& params, const PresenceDetails& details); PresenceSystemComponent& m_presenceSystemComponent; }; private: //////////////////////////////////////////////////////////////////////////////////////// //! Private pointer to the platform specific implementation AZStd::unique_ptr m_pimpl; }; }