New rxSimpleTest example
[anna.git] / example / diameter / rxSimpleTest / MyDiameterEngine.hpp
diff --git a/example/diameter/rxSimpleTest/MyDiameterEngine.hpp b/example/diameter/rxSimpleTest/MyDiameterEngine.hpp
new file mode 100755 (executable)
index 0000000..93f26e4
--- /dev/null
@@ -0,0 +1,60 @@
+// ANNA - Anna is Not Nothingness Anymore                                                         //
+//                                                                                                //
+// (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
+//                                                                                                //
+// See project site at http://redmine.teslayout.com/projects/anna-suite                           //
+// See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
+
+
+#ifndef example_diameter_rxSimpleTest_MyDiameterEngine_hpp
+#define example_diameter_rxSimpleTest_MyDiameterEngine_hpp
+
+// Project
+#include <anna/diameter.comm/Engine.hpp>
+
+// Process
+#include <MyDiameterEntity.hpp>
+#include <MyLocalServer.hpp>
+
+// Standard
+#include <string>
+
+
+namespace anna {
+  namespace diameter {
+    namespace stack {
+      class Dictionary;
+    }
+  }
+}
+
+class MyDiameterEngine : public anna::diameter::comm::Engine {
+public:
+
+  MyDiameterEngine(const char *className, const anna::diameter::stack::Dictionary *baseProtocolDictionary) : Engine(className, baseProtocolDictionary) {;}
+
+// Default implementation is enough
+//   void readDPA(anna::DataBlock &dpa, const anna::DataBlock & dpr) throw() {;} // DPA is not replied
+//   void readDWA(anna::DataBlock &dwa, const anna::DataBlock & dwr) throw() {;} // DWA is not replied
+
+private:
+  anna::Recycler<MyDiameterEntity> a_entitiesRecycler;
+
+  anna::diameter::comm::Entity* allocateEntity() throw() { return a_entitiesRecycler.create(); }
+
+  void releaseEntity(anna::diameter::comm::Entity* entity) throw() {
+    MyDiameterEntity* aux = static_cast <MyDiameterEntity*>(entity);
+    a_entitiesRecycler.release(aux);
+  }
+
+  anna::Recycler<MyLocalServer> a_localServersRecycler;
+
+  anna::diameter::comm::LocalServer* allocateLocalServer() throw() { return a_localServersRecycler.create(); }
+
+  void releaseLocalServer(anna::diameter::comm::LocalServer* localServer) throw() {
+    MyLocalServer* aux = static_cast <MyLocalServer*>(localServer);
+    a_localServersRecycler.release(aux);
+  }
+};
+
+#endif