VR-Engage  2.2
Loading...
Searching...
No Matches
cigiHost.h
Go to the documentation of this file.
1/*******************************************************************************
2** Copyright (c) 2024 MAK Technologies, Inc.
3** All rights reserved.
4*******************************************************************************/
5#pragma once
6
7//! @file cigiHost.h
8//!
9//! @brief Singleton foundation for the vreCigiHost system.
10//!
11//! Creates and manages CigiSession instances as requested by message
12//! from VR-Engage PlayerStations.
13
14#include "vreCigiHost/export.h"
15
17
18#include "vreUtil/baseClass.h"
19#include "vreUtil/delegate.h"
20
21#include <boost/signals2/connection.hpp>
22
23#include <map>
24#include <list>
25#include <memory>
26#include <string>
27
28class DtCgf;
29class DtSimObjectManager;
30class DtSimulationServices;
31
32namespace makVre
33{
34class DtCigiSession;
35class DtCigiDataBase;
36
37
38class CIGIHOST_DLL DtCigiHost : public DtSpSubClass<DtCigiHost>
39{
40public:
41 using SharedDataPtr = std::shared_ptr<DtCigiDataBase>;
42
43 static Ptr instance();
44 static void destroy();
45
47 virtual ~DtCigiHost() override;
48
49 virtual Sptr setCgf(DtCgf& cgf);
50 virtual DtCgf& cgf();
51
52 virtual void init();
53 virtual void tick();
54 virtual unsigned int frame() const;
55
57
58 virtual bool shuttingDown();
59
60 virtual SharedDataPtr fetchSharedData(const std::string& key);
61 virtual void addSharedData(const std::string& key, SharedDataPtr data);
62
68
69protected:
70 virtual void shutdown();
71
72 virtual void processSessionsEnding();
73
76
77protected:
78 static Sptr theHost;
79
80 DtCgf* myCgf;
81
82 boost::signals2::scoped_connection myTickConnection;
83
84 unsigned int myFrame;
87
88 using SharedDataRef = std::weak_ptr<DtCigiDataBase>;
89 using SharedDataMap = std::map<std::string, SharedDataRef>;
91
92 using SessionPtr = std::shared_ptr<DtCigiSession>;
93 using SessionRef = std::weak_ptr<DtCigiSession>;
94 using SessionsByName = std::map<std::string, SessionPtr>;
95 using SessionsByEndpoint = std::map<std::string, SessionRef>;
96 using SessionsByHostPort = std::map<unsigned int, SessionRef>;
97
101
102 std::list<SessionCallback> mySessionStartedCallbacks;
103 std::list<SessionCallback> mySessionEndingCallbacks;
104};
105
106// Utility function for Entity list management
107template <typename LIST_T>
108void pruneReferenceMap(LIST_T& map)
109{
110 auto it = map.begin();
111 while (it != map.end())
112 {
113 if (it->second.expired())
114 {
115 it = map.erase(it);
116 }
117 else
118 {
119 ++it;
120 }
121 }
122}
123
124} // namespace makVre
Provides base classes for shared pointer managed objects with factory creation support.
Base CigiData class used by DtCigiDataTemplate.
Definition cigiData.h:25
static void destroy()
virtual void addSessionEndingCallback(const SessionCallback &cb)
virtual void removeSessionStartedCallback(const SessionCallback &cb)
virtual void addSharedData(const std::string &key, SharedDataPtr data)
static Ptr instance()
virtual void tick()
std::list< SessionCallback > mySessionStartedCallbacks
Definition cigiHost.h:102
std::map< std::string, SessionPtr > SessionsByName
Definition cigiHost.h:94
virtual void removeSessionEndingCallback(const SessionCallback &cb)
SharedDataMap mySharedDataObjects
Definition cigiHost.h:90
virtual void processSessionsEnding()
static void cgfAboutToBeDestroyedCallback(void *)
std::shared_ptr< DtCigiSession > SessionPtr
Definition cigiHost.h:92
virtual DtVreMessageResult handleCigiStopSessionMessage(DtVreMessage *msg)
std::map< std::string, SessionRef > SessionsByEndpoint
Definition cigiHost.h:95
virtual SharedDataPtr fetchSharedData(const std::string &key)
boost::signals2::scoped_connection myTickConnection
Definition cigiHost.h:82
virtual void init()
std::map< unsigned int, SessionRef > SessionsByHostPort
Definition cigiHost.h:96
std::shared_ptr< DtCigiDataBase > SharedDataPtr
Definition cigiHost.h:41
double myLastTickTime
Definition cigiHost.h:85
std::weak_ptr< DtCigiSession > SessionRef
Definition cigiHost.h:93
virtual ~DtCigiHost() override
SessionsByName mySessionsByName
Definition cigiHost.h:98
std::weak_ptr< DtCigiDataBase > SharedDataRef
Definition cigiHost.h:88
std::list< SessionCallback > mySessionEndingCallbacks
Definition cigiHost.h:103
bool myShuttingDown
Definition cigiHost.h:86
SessionsByEndpoint mySessionsByEndpoint
Definition cigiHost.h:99
DtCgf * myCgf
Definition cigiHost.h:80
virtual void shutdown()
virtual Sptr setCgf(DtCgf &cgf)
SessionsByHostPort mySessionsByHostPort
Definition cigiHost.h:100
virtual void addSessionStartedCallback(const SessionCallback &cb)
unsigned int myFrame
Definition cigiHost.h:84
virtual DtCgf & cgf()
virtual DtVreMessageResult handleCigiStartSessionMessage(DtVreMessage *msg)
std::map< std::string, SharedDataRef > SharedDataMap
Definition cigiHost.h:89
DtDelegate< void, DtCigiSession & > SessionCallback
Definition cigiHost.h:63
static Sptr theHost
Definition cigiHost.h:78
virtual bool shuttingDown()
virtual unsigned int frame() const
Definition cigiSession.h:38
Modern delegate class that can bind and invoke callables with any number of parameters.
Definition delegate.h:31
DtCigiHost * Ptr
Definition baseClass.h:181
DtSpSubClass()
Definition baseClass.h:190
std::shared_ptr< DtCigiHost > Sptr
Definition baseClass.h:184
Abstract base class for all VREngage messages.
Definition vreMessage.h:50
Contains the DLL export macro.
#define CIGIHOST_DLL
Definition export.h:20
Include export definitions for this library.
Definition glsVreMessageUtil.h:49
void pruneReferenceMap(LIST_T &map)
Definition cigiHost.h:108
DtVreMessageResult
Enumeration of possible message handling results.
Definition vreMessage.h:33
Defines the base class for all VREngage messages.