Safir SDK Core
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ConsumerBase.h
Go to the documentation of this file.
1 /******************************************************************************
2 *
3 * Copyright Saab AB, 2006-2013 (http://safir.sourceforge.net)
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>
31 #include <Safir/Dob/EntityProxy.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 
46 namespace Safir
47 {
48 namespace 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 
82  class DOSE_CPP_API ConsumerBase
83  {
84  public:
85  virtual ~ConsumerBase() {}
86 
87  private:
88  friend class Safir::Dob::Internal::Callbacks;
89 
90  virtual RevokedRegistrationBase * ToRevokedRegistrationBase()
92  (L"Call to ConsumerBase::ToRevokedRegistrationBase is illegal. Method must be overridden!",
93  __WFILE__,__LINE__);}
94  virtual CompletedRegistrationBase * ToCompletedRegistrationBase()
96  (L"Call to ConsumerBase::ToCompletedRegistrationBase is illegal. Method must be overridden!",
97  __WFILE__,__LINE__);}
98  virtual EntityRequestBase * ToEntityRequestBase()
100  (L"Call to ConsumerBase::ToEntityRequestBase is illegal. Method must be overridden!",
101  __WFILE__,__LINE__);}
102  virtual EntityInjectionBase * ToEntityInjectionBase()
104  (L"Call to ConsumerBase::ToEntityInjectionBase is illegal. Method must be overridden!",
105  __WFILE__,__LINE__);}
106  virtual ServiceRequestBase * ToServiceRequestBase()
107  {throw Dob::Typesystem::SoftwareViolationException
108  (L"Call to ConsumerBase::ToServiceRequestBase is illegal. Method must be overridden!",
109  __WFILE__,__LINE__);}
110  virtual StopHandler * ToStopHandler()
111  {throw Dob::Typesystem::SoftwareViolationException
112  (L"Call to ConsumerBase::ToStopHandler is illegal. Method must be overridden!",
113  __WFILE__,__LINE__);}
114  virtual Dispatcher * ToDispatcher()
115  {throw Dob::Typesystem::SoftwareViolationException
116  (L"Call to ConsumerBase::ToDispatcher is illegal. Method must be overridden!",
117  __WFILE__,__LINE__);}
118  virtual EntityHandler * ToEntityHandler()
119  {throw Dob::Typesystem::SoftwareViolationException
120  (L"Call to ConsumerBase::ToEntityHandler is illegal. Method must be overridden!",
121  __WFILE__,__LINE__);}
122  virtual EntityHandlerInjection * ToEntityHandlerInjection()
123  {throw Dob::Typesystem::SoftwareViolationException
124  (L"Call to ConsumerBase::ToEntityHandlerInjection is illegal. Method must be overridden!",
125  __WFILE__,__LINE__);}
126  virtual EntityHandlerPending * ToEntityHandlerPending()
127  {throw Dob::Typesystem::SoftwareViolationException
128  (L"Call to ConsumerBase::ToEntityHandlerPending is illegal. Method must be overridden!",
129  __WFILE__,__LINE__);}
130  virtual ServiceHandler * ToServiceHandler()
131  {throw Dob::Typesystem::SoftwareViolationException
132  (L"Call to ConsumerBase::ToServiceHandler is illegal. Method must be overridden!",
133  __WFILE__,__LINE__);}
134  virtual ServiceHandlerPending * ToServiceHandlerPending()
135  {throw Dob::Typesystem::SoftwareViolationException
136  (L"Call to ConsumerBase::ToServiceHandlerPending is illegal. Method must be overridden!",
137  __WFILE__,__LINE__);}
138  virtual Requestor * ToRequestor()
139  {throw Dob::Typesystem::SoftwareViolationException
140  (L"Call to ConsumerBase::ToRequestor is illegal. Method must be overridden!",
141  __WFILE__,__LINE__);}
142  virtual MessageSender * ToMessageSender()
143  {throw Dob::Typesystem::SoftwareViolationException
144  (L"Call to ConsumerBase::ToMessageSender is illegal. Method must be overridden!",
145  __WFILE__,__LINE__);}
146  virtual RegistrationSubscriber * ToRegistrationSubscriber()
147  {throw Dob::Typesystem::SoftwareViolationException
148  (L"Call to ConsumerBase::ToRegistrationSubscriber is illegal. Method must be overridden!",
149  __WFILE__,__LINE__);}
150  virtual MessageSubscriber * ToMessageSubscriber()
151  {throw Dob::Typesystem::SoftwareViolationException
152  (L"Call to ConsumerBase::ToMessageSubscriber is illegal. Method must be overridden!",
153  __WFILE__,__LINE__);}
154  virtual EntitySubscriber * ToEntitySubscriber()
155  {throw Dob::Typesystem::SoftwareViolationException
156  (L"Call to ConsumerBase::ToEntitySubscriber is illegal. Method must be overridden!",
157  __WFILE__,__LINE__);}
158 
159 
160  //These functions take a void ptr and call the desired version of the above methods
161  static RevokedRegistrationBase * ToRevokedRegistrationBase(void * consumerBase)
162  {return static_cast<ConsumerBase*>(consumerBase)->ToRevokedRegistrationBase();}
163  static CompletedRegistrationBase * ToCompletedRegistrationBase(void * consumerBase)
164  {return static_cast<ConsumerBase*>(consumerBase)->ToCompletedRegistrationBase();}
165  static EntityRequestBase * ToEntityRequestBase(void * consumerBase)
166  {return static_cast<ConsumerBase*>(consumerBase)->ToEntityRequestBase();}
167  static EntityInjectionBase * ToEntityInjectionBase(void * consumerBase)
168  {return static_cast<ConsumerBase*>(consumerBase)->ToEntityInjectionBase();}
169  static ServiceRequestBase * ToServiceRequestBase(void * consumerBase)
170  {return static_cast<ConsumerBase*>(consumerBase)->ToServiceRequestBase();}
171  static StopHandler * ToStopHandler(void * consumerBase)
172  {return static_cast<ConsumerBase*>(consumerBase)->ToStopHandler();}
173  static Dispatcher * ToDispatcher(void * consumerBase)
174  {return static_cast<ConsumerBase*>(consumerBase)->ToDispatcher();}
175  static EntityHandler * ToEntityHandler(void * consumerBase)
176  {return static_cast<ConsumerBase*>(consumerBase)->ToEntityHandler();}
177  static EntityHandlerInjection * ToEntityHandlerInjection(void * consumerBase)
178  {return static_cast<ConsumerBase*>(consumerBase)->ToEntityHandlerInjection();}
179  static EntityHandlerPending * ToEntityHandlerPending(void * consumerBase)
180  {return static_cast<ConsumerBase*>(consumerBase)->ToEntityHandlerPending();}
181  static ServiceHandler * ToServiceHandler(void * consumerBase)
182  {return static_cast<ConsumerBase*>(consumerBase)->ToServiceHandler();}
183  static ServiceHandlerPending * ToServiceHandlerPending(void * consumerBase)
184  {return static_cast<ConsumerBase*>(consumerBase)->ToServiceHandlerPending();}
185  static Requestor * ToRequestor(void * consumerBase)
186  {return static_cast<ConsumerBase*>(consumerBase)->ToRequestor();}
187  static MessageSender * ToMessageSender(void * consumerBase)
188  {return static_cast<ConsumerBase*>(consumerBase)->ToMessageSender();}
189  static RegistrationSubscriber * ToRegistrationSubscriber(void * consumerBase)
190  {return static_cast<ConsumerBase*>(consumerBase)->ToRegistrationSubscriber();}
191  static MessageSubscriber * ToMessageSubscriber(void * consumerBase)
192  {return static_cast<ConsumerBase*>(consumerBase)->ToMessageSubscriber();}
193  static EntitySubscriber * ToEntitySubscriber(void * consumerBase)
194  {return static_cast<ConsumerBase*>(consumerBase)->ToEntitySubscriber();}
195  };
196  }
197 
201  class DOSE_CPP_API RevokedRegistrationBase:
202  public virtual Internal::ConsumerBase
203  {
204  public:
207 
214  virtual void OnRevokedRegistration(const Safir::Dob::Typesystem::TypeId typeId,
215  const Safir::Dob::Typesystem::HandlerId& handlerId) = 0;
216 
217  private:
218  virtual RevokedRegistrationBase * ToRevokedRegistrationBase() {return this;}
219  };
220 
224  class DOSE_CPP_API CompletedRegistrationBase : public virtual RevokedRegistrationBase
225  {
226  public:
233  virtual void OnCompletedRegistration(const Safir::Dob::Typesystem::TypeId typeId,
234  const Safir::Dob::Typesystem::HandlerId& handlerId) = 0;
235 
236  private:
237  virtual CompletedRegistrationBase * ToCompletedRegistrationBase() {return this;}
238  };
239 
243  class DOSE_CPP_API EntityRequestBase:
244  public virtual Internal::ConsumerBase
245  {
246  public:
248  virtual ~EntityRequestBase() {}
249 
271  virtual void OnCreateRequest(const Safir::Dob::EntityRequestProxy entityRequestProxy,
272  Safir::Dob::ResponseSenderPtr responseSender) = 0;
273 
285  virtual void OnUpdateRequest(const Safir::Dob::EntityRequestProxy entityRequestProxy,
286  Safir::Dob::ResponseSenderPtr responseSender) = 0;
287 
299  virtual void OnDeleteRequest(const Safir::Dob::EntityRequestProxy entityRequestProxy,
300  Safir::Dob::ResponseSenderPtr responseSender) = 0;
301 
302  private:
303  virtual EntityRequestBase * ToEntityRequestBase() {return this;}
304  };
305 
334  class DOSE_CPP_API EntityInjectionBase : public virtual EntityRequestBase
335  {
336  public:
343  virtual void OnInjectedNewEntity(const Safir::Dob::InjectedEntityProxy injectedEntityProxy) {}
344 
351  virtual void OnInjectedUpdatedEntity(const Safir::Dob::InjectedEntityProxy injectedEntityProxy) {}
352 
359  virtual void OnInjectedDeletedEntity(const Safir::Dob::InjectedEntityProxy injectedEntityProxy) {}
360 
378  const Dob::Typesystem::HandlerId& handlerId)
379  { //This is an empty implementation, but we have this little bit to avoid MSVC++ warnings
380 #ifdef _MSC_VER
381  typeId;handlerId;
382 #endif
383  }
384 
385 
386  private:
387  virtual EntityInjectionBase * ToEntityInjectionBase() {return this;}
388  };
389 
393  class DOSE_CPP_API ServiceRequestBase:
394  public virtual Internal::ConsumerBase
395  {
396  public:
398  virtual ~ServiceRequestBase() {}
399 
411  virtual void OnServiceRequest(const Safir::Dob::ServiceRequestProxy serviceRequestProxy,
412  Safir::Dob::ResponseSenderPtr responseSender ) = 0;
413 
414  private:
415  virtual ServiceRequestBase * ToServiceRequestBase() {return this;}
416  };
417 
418 }
419 }
420 
421 
422 #endif
423 
boost::shared_ptr< ResponseSender > ResponseSenderPtr
Definition: ResponseSender.h:107
Class containing the identity of a handler.
Definition: HandlerId.h:45
Proxy class for a service request.
Definition: ServiceRequestProxy.h:52
virtual ~ServiceRequestBase()
Virtual destructor is needed since we have virtual member functions.
Definition: ConsumerBase.h:398
Base class used when composing more elaborated interfaces.
Definition: ConsumerBase.h:224
virtual void OnInjectedUpdatedEntity(const Safir::Dob::InjectedEntityProxy injectedEntityProxy)
Called when an updated entity is about to be injected in the system.
Definition: ConsumerBase.h:351
Meant to be used when something goes very wrong.
Definition: Exceptions.h:360
virtual ~ConsumerBase()
Definition: ConsumerBase.h:85
DotsC_TypeId TypeId
A unique type identifier.
Definition: Dob/Typesystem/Defs.h:221
Proxy class for an entity request.
Definition: EntityRequestProxy.h:53
virtual void OnInitialInjectionsDone(const Safir::Dob::Typesystem::TypeId typeId, const Dob::Typesystem::HandlerId &handlerId)
Indicates that all initial injection data has been transfered to the handler.
Definition: ConsumerBase.h:377
Base class used when composing more elaborated interfaces.
Definition: ConsumerBase.h:82
#define __WFILE__
Definition: Exceptions.h:31
Proxy class for entity injections.
Definition: InjectedEntityProxy.h:52
virtual ~EntityRequestBase()
Virtual destructor is needed since we have virtual member functions.
Definition: ConsumerBase.h:248
virtual ~RevokedRegistrationBase()
Virtual destructor is needed since we have virtual member functions.
Definition: ConsumerBase.h:206
This Consumer Base class contains callback methods that can be overridden by an entity handler that r...
Definition: ConsumerBase.h:334
Interface to receive entity requests.
Definition: ConsumerBase.h:243
virtual void OnInjectedDeletedEntity(const Safir::Dob::InjectedEntityProxy injectedEntityProxy)
Called when an entity delete is about to be injected in the system.
Definition: ConsumerBase.h:359
virtual void OnInjectedNewEntity(const Safir::Dob::InjectedEntityProxy injectedEntityProxy)
Called when a new entity is about to be injected in the system.
Definition: ConsumerBase.h:343
Base class used when composing more elaborated interfaces.
Definition: ConsumerBase.h:201
Interface to receive service requests.
Definition: ConsumerBase.h:393