From 3ca9428fa7b4a7131f794256658a201bb4202b17 Mon Sep 17 00:00:00 2001 From: Stefan Sayer Date: Tue, 12 Jun 2007 16:33:09 +0000 Subject: [PATCH] PySemsB2ABCalleeDialog added, which has onPyB2ABEvent handler to pass events between b2ab sessions git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@366 8eb893ce-cfd4-0310-b710-fb5ebe64c474 --- apps/py_sems/PySemsB2ABDialog.cpp | 20 ++++++++++++++++++ apps/py_sems/PySemsB2ABDialog.h | 24 ++++++++++++++++++++++ apps/py_sems/sip/PySemsB2ABDialog.sip | 29 +++++++++++++++++++-------- apps/py_sems/sip/py_sems.sbf | 4 ++-- 4 files changed, 67 insertions(+), 10 deletions(-) diff --git a/apps/py_sems/PySemsB2ABDialog.cpp b/apps/py_sems/PySemsB2ABDialog.cpp index e964a535..35e9f854 100644 --- a/apps/py_sems/PySemsB2ABDialog.cpp +++ b/apps/py_sems/PySemsB2ABDialog.cpp @@ -44,6 +44,11 @@ void PySemsB2ABDialog::onSessionStart(const AmSipRequest& req) AmB2ABCallerSession::onSessionStart(req); } +AmB2ABCalleeSession* PySemsB2ABDialog::createCalleeSession() { + return new PySemsB2ABCalleeDialog(getLocalTag()); + +} + void PySemsB2ABDialog::process(AmEvent* event) { DBG("PySemsB2ABDialog::process\n"); @@ -68,3 +73,18 @@ void PySemsB2ABDialog::process(AmEvent* event) return; } +void PySemsB2ABCalleeDialog::onB2ABEvent(B2ABEvent* ev) { + PySemsB2ABEvent* py_ev = dynamic_cast(ev); + if (NULL != py_ev) { + DBG("calling onPyB2AB...\n"); + onPyB2ABEvent(py_ev); + } else { + AmB2ABCalleeSession::onB2ABEvent(ev); + } +} + + +void PySemsB2ABCalleeDialog::onPyB2ABEvent(PySemsB2ABEvent* py_ev) { + DBG("ignoring PySemsB2ABEvent\n"); + delete py_ev; //-- don't delete, ownership already been transfered to python? +} diff --git a/apps/py_sems/PySemsB2ABDialog.h b/apps/py_sems/PySemsB2ABDialog.h index c99dde22..2ca8fb3d 100644 --- a/apps/py_sems/PySemsB2ABDialog.h +++ b/apps/py_sems/PySemsB2ABDialog.h @@ -27,6 +27,8 @@ #include "AmB2ABSession.h" #include "AmPlaylist.h" +class PySemsB2ABCalleeDialog; + class PySemsB2ABDialog : public AmB2ABCallerSession, public PySemsDialogBase { @@ -42,6 +44,28 @@ public: // @see AmEventHandler void process(AmEvent* event); + + AmB2ABCalleeSession* createCalleeSession(); +}; + +/** \brief base class for events in Py-B2AB sessions */ +struct PySemsB2ABEvent: public B2ABEvent +{ + public: + PySemsB2ABEvent(int ev_id) + : B2ABEvent(ev_id) + {} }; +class PySemsB2ABCalleeDialog : public AmB2ABCalleeSession +{ + public: + PySemsB2ABCalleeDialog(const string& other_local_tag) + : AmB2ABCalleeSession(other_local_tag) { } + + protected: + void onB2ABEvent(B2ABEvent* ev); + + virtual void onPyB2ABEvent(PySemsB2ABEvent* py_ev); +}; #endif diff --git a/apps/py_sems/sip/PySemsB2ABDialog.sip b/apps/py_sems/sip/PySemsB2ABDialog.sip index 6e42d1c4..938bd61f 100644 --- a/apps/py_sems/sip/PySemsB2ABDialog.sip +++ b/apps/py_sems/sip/PySemsB2ABDialog.sip @@ -49,14 +49,14 @@ public: protected: virtual AmB2ABCalleeSession* createCalleeSession() /Factory/; - virtual void onB2ABEvent(B2ABEvent* /In,Out/); + virtual void onB2ABEvent(PySemsB2ABEvent* /TransferBack/); - virtual void relayEvent(AmEvent* ev); + virtual void relayEvent(PySemsB2ABEvent* ev /Transfer/); private: PySemsB2ABDialog(const PySemsB2ABDialog&); }; -class AmB2ABCalleeSession +class AmB2ABCalleeSession { %TypeHeaderCode #include "../../../core/AmB2ABSession.h" @@ -64,8 +64,6 @@ class AmB2ABCalleeSession public: AmB2ABCalleeSession(const string& /*other_local_tag*/); - void onB2ABEvent(B2ABEvent* /*In,Out*/); - void connectSession(); void disconnectSession(); @@ -74,13 +72,28 @@ private: }; -class B2ABEvent -: AmEvent +class PySemsB2ABCalleeDialog : AmB2ABCalleeSession { %TypeHeaderCode +#include "../PySemsB2ABDialog.h" #include "../../../core/AmB2ABSession.h" %End public: - B2ABEvent(int /* ev_id */); + PySemsB2ABCalleeDialog(const string& /*other_local_tag*/); + +protected: + virtual void onPyB2ABEvent(PySemsB2ABEvent* /TransferBack/); + +private: + PySemsB2ABCalleeDialog(const PySemsB2ABCalleeDialog& /* other_s*/); +}; + +class PySemsB2ABEvent +{ +%TypeHeaderCode +#include "../PySemsB2ABDialog.h" +%End +public: + PySemsB2ABEvent(int /* ev_id */); }; diff --git a/apps/py_sems/sip/py_sems.sbf b/apps/py_sems/sip/py_sems.sbf index 92123ff3..a4a5973d 100644 --- a/apps/py_sems/sip/py_sems.sbf +++ b/apps/py_sems/sip/py_sems.sbf @@ -1,3 +1,3 @@ target = py_sems_lib -sources = sippy_sems_libcmodule.cpp sippy_sems_libB2ABEvent.cpp sippy_sems_libAmB2ABCalleeSession.cpp sippy_sems_libPySemsB2ABDialog.cpp sippy_sems_libPySemsB2BDialog.cpp sippy_sems_libPySemsDialog.cpp sippy_sems_libAmAudioFile.cpp sippy_sems_libAmAudioEvent.cpp sippy_sems_libAmEvent.cpp sippy_sems_libAmSipDialog.cpp sippy_sems_libAmSipReply.cpp sippy_sems_libAmSipRequest.cpp sippy_sems_libstring.cpp -headers = sipAPIpy_sems_lib.h sippy_sems_libB2ABEvent.h sippy_sems_libAmB2ABCalleeSession.h sippy_sems_libPySemsB2ABDialog.h sippy_sems_libPySemsB2BDialog.h sippy_sems_libPySemsDialog.h sippy_sems_libAmAudioFile.h sippy_sems_libAmAudioEvent.h sippy_sems_libAmEvent.h sippy_sems_libAmSipDialog.h sippy_sems_libAmSipReply.h sippy_sems_libAmSipRequest.h sippy_sems_libstring.h +sources = sippy_sems_libcmodule.cpp sippy_sems_libPySemsB2ABEvent.cpp sippy_sems_libPySemsB2ABCalleeDialog.cpp sippy_sems_libAmB2ABCalleeSession.cpp sippy_sems_libPySemsB2ABDialog.cpp sippy_sems_libPySemsB2BDialog.cpp sippy_sems_libPySemsDialog.cpp sippy_sems_libAmAudioFile.cpp sippy_sems_libAmAudioEvent.cpp sippy_sems_libAmEvent.cpp sippy_sems_libAmSipDialog.cpp sippy_sems_libAmSipReply.cpp sippy_sems_libAmSipRequest.cpp sippy_sems_libstring.cpp +headers = sipAPIpy_sems_lib.h sippy_sems_libPySemsB2ABEvent.h sippy_sems_libPySemsB2ABCalleeDialog.h sippy_sems_libAmB2ABCalleeSession.h sippy_sems_libPySemsB2ABDialog.h sippy_sems_libPySemsB2BDialog.h sippy_sems_libPySemsDialog.h sippy_sems_libAmAudioFile.h sippy_sems_libAmAudioEvent.h sippy_sems_libAmEvent.h sippy_sems_libAmSipDialog.h sippy_sems_libAmSipReply.h sippy_sems_libAmSipRequest.h sippy_sems_libstring.h