Safir SDK Core
Loading...
Searching...
No Matches
ConsumerBase.h
Go to the documentation of this file.
1/******************************************************************************
2*
3* Copyright Saab AB, 2006-2013 (http://safirsdkcore.com)
4*
5* Created by: Anders Widén / stawi
6*
7*******************************************************************************
8*
9* This file is part of Safir SDK Core.
10*
11* Safir SDK Core is free software: you can redistribute it and/or modify
12* it under the terms of version 3 of the GNU General Public License as
13* published by the Free Software Foundation.
14*
15* Safir SDK Core is distributed in the hope that it will be useful,
16* but WITHOUT ANY WARRANTY; without even the implied warranty of
17* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18* GNU General Public License for more details.
19*
20* You should have received a copy of the GNU General Public License
21* along with Safir SDK Core. If not, see <http://www.gnu.org/licenses/>.
22*
23******************************************************************************/
24
25#ifndef _SAFIR_DOB_CONSUMER_BASE_H
26#define _SAFIR_DOB_CONSUMER_BASE_H
27
29#include <Safir/Dob/Defs.h>
38
39#ifdef _MSC_VER
40//we need to disable the warning about inheriting by dominance, it is intended to be this way,
41//and there is no way to produce code that does not give this warning, unfortunately.
42//see also the comment on ConsumerBase
43#pragma warning (disable: 4250)
44#endif
45
46namespace Safir
47{
48namespace Dob
49{
50 //Forward declarations:
51 class RevokedRegistrationBase;
52 class CompletedRegistrationBase;
53 class EntityRequestBase;
54 class EntityInjectionBase;
55 class ServiceRequestBase;
56 class StopHandler;
57 class Dispatcher;
58 class EntityHandler;
59 class EntityHandlerInjection;
60 class EntityHandlerPending;
61 class ServiceHandler;
62 class ServiceHandlerPending;
63 class Requestor;
64 class MessageSender;
65 class RegistrationSubscriber;
66 class MessageSubscriber;
67 class EntitySubscriber;
68
69 namespace Internal
70 {
71 //forward declaration
72 class Callbacks;
73
87 {
88 public:
89 virtual ~ConsumerBase() {}
90
91 private:
92 friend class Safir::Dob::Internal::Callbacks;
93
94 virtual RevokedRegistrationBase * ToRevokedRegistrationBase()
96 (L"Call to ConsumerBase::ToRevokedRegistrationBase is illegal. Method must be overridden!",
97 __WFILE__,__LINE__);}
98 virtual CompletedRegistrationBase * ToCompletedRegistrationBase()
100 (L"Call to ConsumerBase::ToCompletedRegistrationBase is illegal. Method must be overridden!",
101 __WFILE__,__LINE__);}
102 virtual EntityRequestBase * ToEntityRequestBase()
104 (L"Call to ConsumerBase::ToEntityRequestBase is illegal. Method must be overridden!",
105 __WFILE__,__LINE__);}
106 virtual EntityInjectionBase * ToEntityInjectionBase()
108 (L"Call to ConsumerBase::ToEntityInjectionBase is illegal. Method must be overridden!",
109 __WFILE__,__LINE__);}
110 virtual ServiceRequestBase * ToServiceRequestBase()
111 {throw Dob::Typesystem::SoftwareViolationException
112 (L"Call to ConsumerBase::ToServiceRequestBase is illegal. Method must be overridden!",
113 __WFILE__,__LINE__);}
114 virtual StopHandler * ToStopHandler()
115 {throw Dob::Typesystem::SoftwareViolationException
116 (L"Call to ConsumerBase::ToStopHandler is illegal. Method must be overridden!",
117 __WFILE__,__LINE__);}
118 virtual Dispatcher * ToDispatcher()
119 {throw Dob::Typesystem::SoftwareViolationException
120 (L"Call to ConsumerBase::ToDispatcher is illegal. Method must be overridden!",
121 __WFILE__,__LINE__);}
122 virtual EntityHandler * ToEntityHandler()
123 {throw Dob::Typesystem::SoftwareViolationException
124 (L"Call to ConsumerBase::ToEntityHandler is illegal. Method must be overridden!",
125 __WFILE__,__LINE__);}
126 virtual EntityHandlerInjection * ToEntityHandlerInjection()
127 {throw Dob::Typesystem::SoftwareViolationException
128 (L"Call to ConsumerBase::ToEntityHandlerInjection is illegal. Method must be overridden!",
129 __WFILE__,__LINE__);}
130 virtual EntityHandlerPending * ToEntityHandlerPending()
131 {throw Dob::Typesystem::SoftwareViolationException
132 (L"Call to ConsumerBase::ToEntityHandlerPending is illegal. Method must be overridden!",
133 __WFILE__,__LINE__);}
134 virtual ServiceHandler * ToServiceHandler()
135 {throw Dob::Typesystem::SoftwareViolationException
136 (L"Call to ConsumerBase::ToServiceHandler is illegal. Method must be overridden!",
137 __WFILE__,__LINE__);}
138 virtual ServiceHandlerPending * ToServiceHandlerPending()
139 {throw Dob::Typesystem::SoftwareViolationException
140 (L"Call to ConsumerBase::ToServiceHandlerPending is illegal. Method must be overridden!",
141 __WFILE__,__LINE__);}
142 virtual Requestor * ToRequestor()
143 {throw Dob::Typesystem::SoftwareViolationException
144 (L"Call to ConsumerBase::ToRequestor is illegal. Method must be overridden!",
145 __WFILE__,__LINE__);}
146 virtual MessageSender * ToMessageSender()
147 {throw Dob::Typesystem::SoftwareViolationException
148 (L"Call to ConsumerBase::ToMessageSender is illegal. Method must be overridden!",
149 __WFILE__,__LINE__);}
150 virtual RegistrationSubscriber * ToRegistrationSubscriber()
151 {throw Dob::Typesystem::SoftwareViolationException
152 (L"Call to ConsumerBase::ToRegistrationSubscriber is illegal. Method must be overridden!",
153 __WFILE__,__LINE__);}
154 virtual MessageSubscriber * ToMessageSubscriber()
155 {throw Dob::Typesystem::SoftwareViolationException
156 (L"Call to ConsumerBase::ToMessageSubscriber is illegal. Method must be overridden!",
157 __WFILE__,__LINE__);}
158 virtual EntitySubscriber * ToEntitySubscriber()
159 {throw Dob::Typesystem::SoftwareViolationException
160 (L"Call to ConsumerBase::ToEntitySubscriber is illegal. Method must be overridden!",
161 __WFILE__,__LINE__);}
162
163
164 //These functions take a void ptr and call the desired version of the above methods
165 static RevokedRegistrationBase * ToRevokedRegistrationBase(void * consumerBase)
166 {return static_cast<ConsumerBase*>(consumerBase)->ToRevokedRegistrationBase();}
167 static CompletedRegistrationBase * ToCompletedRegistrationBase(void * consumerBase)
168 {return static_cast<ConsumerBase*>(consumerBase)->ToCompletedRegistrationBase();}
169 static EntityRequestBase * ToEntityRequestBase(void * consumerBase)
170 {return static_cast<ConsumerBase*>(consumerBase)->ToEntityRequestBase();}
171 static EntityInjectionBase * ToEntityInjectionBase(void * consumerBase)
172 {return static_cast<ConsumerBase*>(consumerBase)->ToEntityInjectionBase();}
173 static ServiceRequestBase * ToServiceRequestBase(void * consumerBase)
174 {return static_cast<ConsumerBase*>(consumerBase)->ToServiceRequestBase();}
175 static StopHandler * ToStopHandler(void * consumerBase)
176 {return static_cast<ConsumerBase*>(consumerBase)->ToStopHandler();}
177 static Dispatcher * ToDispatcher(void * consumerBase)
178 {return static_cast<ConsumerBase*>(consumerBase)->ToDispatcher();}
179 static EntityHandler * ToEntityHandler(void * consumerBase)
180 {return static_cast<ConsumerBase*>(consumerBase)->ToEntityHandler();}
181 static EntityHandlerInjection * ToEntityHandlerInjection(void * consumerBase)
182 {return static_cast<ConsumerBase*>(consumerBase)->ToEntityHandlerInjection();}
183 static EntityHandlerPending * ToEntityHandlerPending(void * consumerBase)
184 {return static_cast<ConsumerBase*>(consumerBase)->ToEntityHandlerPending();}
185 static ServiceHandler * ToServiceHandler(void * consumerBase)
186 {return static_cast<ConsumerBase*>(consumerBase)->ToServiceHandler();}
187 static ServiceHandlerPending * ToServiceHandlerPending(void * consumerBase)
188 {return static_cast<ConsumerBase*>(consumerBase)->ToServiceHandlerPending();}
189 static Requestor * ToRequestor(void * consumerBase)
190 {return static_cast<ConsumerBase*>(consumerBase)->ToRequestor();}
191 static MessageSender * ToMessageSender(void * consumerBase)
192 {return static_cast<ConsumerBase*>(consumerBase)->ToMessageSender();}
193 static RegistrationSubscriber * ToRegistrationSubscriber(void * consumerBase)
194 {return static_cast<ConsumerBase*>(consumerBase)->ToRegistrationSubscriber();}
195 static MessageSubscriber * ToMessageSubscriber(void * consumerBase)
196 {return static_cast<ConsumerBase*>(consumerBase)->ToMessageSubscriber();}
197 static EntitySubscriber * ToEntitySubscriber(void * consumerBase)
198 {return static_cast<ConsumerBase*>(consumerBase)->ToEntitySubscriber();}
199 };
200 }
201
208 public virtual Internal::ConsumerBase
209 {
210 public:
213
221 const Safir::Dob::Typesystem::HandlerId& handlerId) = 0;
222
223 private:
224 RevokedRegistrationBase * ToRevokedRegistrationBase() override {return this;}
225 };
226
233 {
234 public:
242 const Safir::Dob::Typesystem::HandlerId& handlerId) = 0;
243
244 private:
245 CompletedRegistrationBase * ToCompletedRegistrationBase() override {return this;}
246 };
247
254 public virtual Internal::ConsumerBase
255 {
256 public:
259
281 virtual void OnCreateRequest(const Safir::Dob::EntityRequestProxy entityRequestProxy,
282 Safir::Dob::ResponseSenderPtr responseSender) = 0;
283
295 virtual void OnUpdateRequest(const Safir::Dob::EntityRequestProxy entityRequestProxy,
296 Safir::Dob::ResponseSenderPtr responseSender) = 0;
297
309 virtual void OnDeleteRequest(const Safir::Dob::EntityRequestProxy entityRequestProxy,
310 Safir::Dob::ResponseSenderPtr responseSender) = 0;
311
312 private:
313 EntityRequestBase * ToEntityRequestBase() override {return this;}
314 };
315
347 {
348 public:
355 virtual void OnInjectedNewEntity(const Safir::Dob::InjectedEntityProxy injectedEntityProxy)
356 {
357 (void)injectedEntityProxy; //unused
358 }
359
366 virtual void OnInjectedUpdatedEntity(const Safir::Dob::InjectedEntityProxy injectedEntityProxy)
367 {
368 (void)injectedEntityProxy; //unused
369 }
370
377 virtual void OnInjectedDeletedEntity(const Safir::Dob::InjectedEntityProxy injectedEntityProxy)
378 {
379 (void)injectedEntityProxy; //unused
380 }
381
399 const Safir::Dob::Typesystem::HandlerId& handlerId)
400 {
401 //unused parameters
402 (void)typeId;
403 (void)handlerId;
404 }
405
406
407 private:
408 EntityInjectionBase * ToEntityInjectionBase() override {return this;}
409 };
410
417 public virtual Internal::ConsumerBase
418 {
419 public:
422
434 virtual void OnServiceRequest(const Safir::Dob::ServiceRequestProxy serviceRequestProxy,
435 Safir::Dob::ResponseSenderPtr responseSender ) = 0;
436
437 private:
438 ServiceRequestBase * ToServiceRequestBase() override {return this;}
439 };
440
441}
442}
443
444
445#endif
446
#define DOSE_CPP_API
Definition DoseCppExportDefs.h:33
#define __WFILE__
Definition Exceptions.h:31
This namespace contains all the functionality and definitions of the SAFIR SDK.
Definition Backdoor.h:31
std::shared_ptr< ResponseSender > ResponseSenderPtr
Definition ResponseSender.h:106
DotsC_TypeId TypeId
A unique type identifier.
Definition Defs.h:218
Base class used when composing more elaborated interfaces.
Definition ConsumerBase.h:87
virtual ~ConsumerBase()
Definition ConsumerBase.h:89
Base class used when composing more elaborated interfaces.
Definition ConsumerBase.h:209
virtual ~RevokedRegistrationBase()
Virtual destructor is needed since we have virtual member functions.
Definition ConsumerBase.h:212
virtual void OnRevokedRegistration(const Safir::Dob::Typesystem::TypeId typeId, const Safir::Dob::Typesystem::HandlerId &handlerId)=0
Indicates that the handler is no longer registered for the given type.
Base class used when composing more elaborated interfaces.
Definition ConsumerBase.h:233
virtual void OnCompletedRegistration(const Safir::Dob::Typesystem::TypeId typeId, const Safir::Dob::Typesystem::HandlerId &handlerId)=0
Indicates that a pending registration has completed and the handler is now registered.
Interface to receive entity requests.
Definition ConsumerBase.h:255
virtual void OnCreateRequest(const Safir::Dob::EntityRequestProxy entityRequestProxy, Safir::Dob::ResponseSenderPtr responseSender)=0
Called when someone requests an entity to be created.
virtual void OnDeleteRequest(const Safir::Dob::EntityRequestProxy entityRequestProxy, Safir::Dob::ResponseSenderPtr responseSender)=0
Called when someone requests an entity to be deleted.
virtual void OnUpdateRequest(const Safir::Dob::EntityRequestProxy entityRequestProxy, Safir::Dob::ResponseSenderPtr responseSender)=0
Called when someone requests an entity to be updated.
virtual ~EntityRequestBase()
Virtual destructor is needed since we have virtual member functions.
Definition ConsumerBase.h:258
This Consumer Base class contains callback methods that can be overridden by an entity handler that r...
Definition ConsumerBase.h:347
virtual void OnInjectedDeletedEntity(const Safir::Dob::InjectedEntityProxy injectedEntityProxy)
Called when an entity delete is about to be injected in the system.
Definition ConsumerBase.h:377
virtual void OnInjectedNewEntity(const Safir::Dob::InjectedEntityProxy injectedEntityProxy)
Called when a new entity is about to be injected in the system.
Definition ConsumerBase.h:355
virtual void OnInitialInjectionsDone(const Safir::Dob::Typesystem::TypeId typeId, const Safir::Dob::Typesystem::HandlerId &handlerId)
Indicates that all initial injection data has been transfered to the handler.
Definition ConsumerBase.h:398
virtual void OnInjectedUpdatedEntity(const Safir::Dob::InjectedEntityProxy injectedEntityProxy)
Called when an updated entity is about to be injected in the system.
Definition ConsumerBase.h:366
Interface to receive service requests.
Definition ConsumerBase.h:418
virtual void OnServiceRequest(const Safir::Dob::ServiceRequestProxy serviceRequestProxy, Safir::Dob::ResponseSenderPtr responseSender)=0
Called when a service request is received.
virtual ~ServiceRequestBase()
Virtual destructor is needed since we have virtual member functions.
Definition ConsumerBase.h:421
Proxy class for an entity request.
Definition EntityRequestProxy.h:54
Proxy class for entity injections.
Definition InjectedEntityProxy.h:53
Proxy class for a service request.
Definition ServiceRequestProxy.h:53
Meant to be used when something goes very wrong.
Definition Exceptions.h:364
Class containing the identity of a handler.
Definition HandlerId.h:46