NAP
portalcomponent.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4 
5 #pragma once
6 
7 // Local Includes
8 #include "portalitem.h"
9 #include "portalevent.h"
10 #include "portalservice.h"
11 #include "portalwebsocketserver.h"
12 
13 // External Includes
14 #include <component.h>
15 #include <componentptr.h>
16 #include <nap/resourceptr.h>
17 
18 namespace nap
19 {
20  // Forward declares
21  class PortalComponentInstance;
22 
26  class NAPAPI PortalComponent : public Component
27  {
28  RTTI_ENABLE(Component)
29  DECLARE_COMPONENT(PortalComponent, PortalComponentInstance)
30 
31  public:
33  std::vector<ResourcePtr<PortalItem>> mItems;
34  };
35 
36 
37  /*
38  * Handles communication between the NAP application and a web portal.
39  */
41  {
42  RTTI_ENABLE(ComponentInstance)
43 
44  public:
45 
50  ComponentInstance(entity, resource) { }
51 
57  virtual bool init(utility::ErrorState& error) override;
58 
62  virtual void onDestroy() override;
63 
70  bool processRequest(PortalEvent& event, utility::ErrorState& error);
71 
78  bool processUpdate(PortalEvent& event, utility::ErrorState& error);
79 
83  const PortalWebSocketServer& getServer() const { return *mServer; }
84 
88  PortalWebSocketServer& getServer() { return *mServer; }
89 
90  private:
91 
96  virtual void onItemUpdate(const PortalItem& item);
97 
98  PortalService* mService = nullptr;
99  PortalWebSocketServer* mServer = nullptr;
100  std::vector<PortalItem*> mItems;
101  std::unordered_map<std::string, PortalItem*> mItemMap;
102 
103  //Slot which is called when a portal item sends an update event
104  Slot<const PortalItem&> mItemUpdateSlot = { this, &PortalComponentInstance::onItemUpdate };
105  };
106 }
nap::PortalService
Definition: portalservice.h:25
nap::Slot
Slot.
Definition: signalslot.h:21
nap::rtti::ObjectPtr
Definition: objectptr.h:154
nap::PortalComponentInstance::PortalComponentInstance
PortalComponentInstance(EntityInstance &entity, Component &resource)
Definition: portalcomponent.h:49
nap::utility::ErrorState
Definition: errorstate.h:19
nap::PortalComponentInstance
Definition: portalcomponent.h:40
nap::PortalComponentInstance::getServer
const PortalWebSocketServer & getServer() const
Definition: portalcomponent.h:83
nap::PortalItem
Definition: portalitem.h:19
nap::EntityInstance
Definition: entity.h:34
nap::PortalWebSocketServer
Definition: portalwebsocketserver.h:24
nap::ComponentInstance
Definition: component.h:43
nap::PortalComponent
Definition: portalcomponent.h:26
nap::Component
Definition: component.h:151
nap::PortalComponentInstance::getServer
PortalWebSocketServer & getServer()
Definition: portalcomponent.h:88
nap
Definition: templateapp.h:17
nap::PortalEvent
Definition: portalevent.h:26
nap::PortalComponent::mServer
ResourcePtr< PortalWebSocketServer > mServer
Property: "Server" the portal WebSocket server this component listens to for events.
Definition: portalcomponent.h:32
nap::PortalComponent::mItems
std::vector< ResourcePtr< PortalItem > > mItems
Property: 'Items' the portal items contained by this portal component.
Definition: portalcomponent.h:33