consider to extend the command handling protocol on UI-Bus (#1058)

This commit is contained in:
Fischlurch 2017-01-09 03:24:17 +01:00
parent 38b908d510
commit 2e9bd78791
5 changed files with 97 additions and 62 deletions

View file

@ -37,8 +37,6 @@
** a delegate to implement those translation tasks on receipt of a
** command related UI-bus message.
**
** @todo initial draft and WIP-WIP-WIP as of 1/2017
**
** @see AbstractTangible_test::invokeCommand()
** @see gui::test::Nexus::prepareDiagnosticCommandHandler()
**
@ -50,33 +48,20 @@
#include "lib/error.hpp"
//#include "include/logging.h"
//#include "lib/idi/entry-id.hpp"
#include "include/session-command-facade.h"
#include "proc/control/command-def.hpp"
//#include "gui/notification-service.hpp"
//#include "gui/ctrl/bus-term.hpp"
//#include "gui/ctrl/nexus.hpp"
//#include "lib/util.hpp"
//#include "gui/model/tangible.hpp"
#include "lib/diff/gen-node.hpp"
//#include "lib/idi/entry-id.hpp"
#include "include/session-command-facade.h"
#include <boost/noncopyable.hpp>
//#include <string>
namespace gui {
namespace ctrl{
namespace error = lumiera::error;
// using lib::HashVal;
// using util::isnil;
// using lib::idi::EntryID;
using lib::diff::Rec;
using lib::diff::GenNode;
using lib::diff::DataCap;
using proc::control::SessionCommand;
// using std::string;
/**
@ -90,15 +75,35 @@ namespace ctrl{
: public DataCap::Predicate
, boost::noncopyable
{
GenNode::ID const& commandID_;
/** @todo unimplemented extension of command protocol
* to clone a given command definition prototype
* @param subID additional identifier to extend command-ID
* @return extended command ID, comprised of the basic ID, as given by
* the GenNode::ID of the commandMsg (see CommandHandler(GenNode)),
* extended by the subID and some random digits.
* @throw error::Logic always, not yet implemented ///////////////////////////////////////////////////TICKET #1058 consider extension of UI-Bus protocol
*/
bool
handle (Rec const& bindingArgs) override ///< the argument binding message
handle (string const& subID) override ///< the "bang!" message (command invocation)
{
throw error::Logic ("Extended Protocol for cloning command prototypes (Ticket #1058)"
, error::LUMIERA_ERROR_UNIMPLEMENTED);
}
/** handle command argument binding message */
bool
handle (Rec const& bindingArgs) override
{
SessionCommand::facade().bindArg (commandID_, bindingArgs);
return true;
}
/** handle the "bang!" message (trigger invocation) */
bool
handle (int const&) override ///< the "bang!" message (command invocation)
{
@ -106,6 +111,7 @@ namespace ctrl{
return true;
}
public:
CommandHandler (GenNode const& commandMsg)
: commandID_{commandMsg.idi}

View file

@ -39,9 +39,8 @@
** both CoreService and Nexus are mutually interdependent from an operational
** perspective, since they exchange messages in both directions.
**
** @todo initial draft and WIP-WIP-WIP as of 12/2015
**
** @see TODO_abstract-tangible-test.cpp
** @see AbstractTangible_test
** @see BusTerm_test
**
*/
@ -52,39 +51,26 @@
#include "lib/error.hpp"
#include "include/logging.h"
//#include "lib/idi/entry-id.hpp"
#include "lib/idi/entry-id.hpp"
#include "include/session-command-facade.h"
#include "gui/notification-service.hpp"
#include "gui/ctrl/command-handler.hpp"
#include "gui/ctrl/bus-term.hpp"
#include "gui/ctrl/nexus.hpp"
//#include "lib/util.hpp"
//#include "gui/model/tangible.hpp"
//#include "lib/diff/record.hpp"
#include "lib/idi/entry-id.hpp"
#include <boost/noncopyable.hpp>
//#include <string>
namespace gui {
namespace ctrl{
// using lib::HashVal;
// using util::isnil;
// using lib::idi::EntryID;
// using lib::diff::Record;
// using std::string;
/**
* Attachment point to "central services" within the UI-Bus.
* Attachment point to »central services« within the UI-Bus.
* This special implementation of the [BusTerm] interface receives and
* handles those messages to be processed by centralised services:
* - commands need to be sent down to Proc-Layer
* - presentation state messages need to be recorded and acted upon.
*
* @todo write type comment
*/
class CoreService
: public BusTerm

View file

@ -73,15 +73,15 @@ namespace gui {
/* === Interface Lifecycle === */
typedef lumiera::InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_GuiNotification, 0)
, GuiNotification
> ServiceInstanceHandle;
using ServiceInstanceHandle = lumiera::InstanceHandle< LUMIERA_INTERFACE_INAME(lumieraorg_GuiNotification, 0)
, GuiNotification
> ;
lib::SingletonRef<GuiNotification> implInstance_;
ServiceInstanceHandle serviceInstance_;
public:
NotificationService();
NotificationService(); /////////////////////////////////////////////////////////TICKET #1047 : define GuiNotification
};

View file

@ -103,7 +103,8 @@ namespace ctrl {
/* ==== standard implementation of the BusTerm interface ==== */
/** prepare or trigger invocation of a command.
* @param command a GenNode holding parameters invocation trigger
* @param command a GenNode either holding command parameters
* or an int to signal actual command invocation
* @remarks some commands can simply be invoked right away, but
* in the general case, command preparation and invocation
* is a multi-step process. The gui::interact::InvocationTrail

View file

@ -296,7 +296,7 @@
</html></richcontent>
</node>
</node>
<node CREATED="1481320847724" HGAP="42" ID="ID_545146501" MODIFIED="1481768822574" TEXT="wo ansiedeln" VSHIFT="-5">
<node CREATED="1481320847724" HGAP="42" ID="ID_545146501" MODIFIED="1483927830295" TEXT="wo ansiedeln" VSHIFT="-6">
<icon BUILTIN="help"/>
<node CREATED="1481509901926" ID="ID_1612540786" MODIFIED="1481509907305" TEXT="in proc::control"/>
<node CREATED="1481767522123" FOLDED="true" ID="ID_789146708" MODIFIED="1483584068634">
@ -407,8 +407,9 @@
</node>
</node>
</node>
<node CREATED="1481320850779" ID="ID_1632600003" MODIFIED="1481320854143" TEXT="hochfahren">
<node CREATED="1481509921211" ID="ID_1515469097" MODIFIED="1483584030011">
<node CREATED="1481320850779" HGAP="45" ID="ID_1632600003" MODIFIED="1483927828448" TEXT="hochfahren" VSHIFT="-3">
<icon BUILTIN="button_ok"/>
<node CREATED="1481509921211" FOLDED="true" ID="ID_1515469097" MODIFIED="1483927808469">
<richcontent TYPE="NODE"><html>
<head>
@ -492,7 +493,8 @@
<node CREATED="1482464436919" ID="ID_64274402" MODIFIED="1482464442042" TEXT="f&#xfc;hrt Commands aus"/>
<node CREATED="1482464442438" ID="ID_1339868449" MODIFIED="1482464449049" TEXT="startet den Builder"/>
</node>
<node CREATED="1481599421021" ID="ID_461768132" MODIFIED="1481686898425" TEXT="Locking kl&#xe4;ren">
<node CREATED="1481599421021" ID="ID_461768132" MODIFIED="1483927800437" TEXT="Locking kl&#xe4;ren">
<icon BUILTIN="button_ok"/>
<node CREATED="1481684383530" ID="ID_236117" MODIFIED="1481684451657" TEXT="zwei unabh&#xe4;ngige Locks">
<icon BUILTIN="yes"/>
<node CREATED="1481684391921" ID="ID_138369898" MODIFIED="1481684442846" TEXT="Front-End">
@ -705,7 +707,7 @@
<icon BUILTIN="yes"/>
</node>
<node CREATED="1483748323014" ID="ID_1031176077" MODIFIED="1483748339768" TEXT="Nachrichten vom UI-Bus entnehmen">
<node COLOR="#520262" CREATED="1483908814960" HGAP="34" ID="ID_430949603" MODIFIED="1483910973175" TEXT="Design sinnvoll?" VSHIFT="6">
<node COLOR="#520262" CREATED="1483908814960" FOLDED="true" HGAP="34" ID="ID_430949603" MODIFIED="1483927840787" TEXT="Design sinnvoll?" VSHIFT="6">
<linktarget COLOR="#b694bf" DESTINATION="ID_430949603" ENDARROW="Default" ENDINCLINATION="178;425;" ID="Arrow_ID_1062305149" SOURCE="ID_329609486" STARTARROW="Default" STARTINCLINATION="-629;-2354;"/>
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="help"/>
@ -740,8 +742,8 @@
<node CREATED="1483909714201" ID="ID_1677179961" MODIFIED="1483909722659" TEXT="k&#xf6;nnte UI-Abl&#xe4;ufe abstrakt testbar machen"/>
</node>
</node>
<node CREATED="1483755303243" HGAP="86" ID="ID_1425274731" MODIFIED="1483910253374" TEXT="Brauche Command-Handler" VSHIFT="11">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1483755303243" FOLDED="true" HGAP="86" ID="ID_1425274731" MODIFIED="1483927529180" TEXT="Brauche Command-Handler" VSHIFT="11">
<icon BUILTIN="button_ok"/>
<node CREATED="1483755317105" ID="ID_775818551" MODIFIED="1483755319685" TEXT="ist ein Visitor"/>
<node CREATED="1483755320136" ID="ID_1343109260" MODIFIED="1483755327580" TEXT="Knackpunkt: Command-ID">
<node CREATED="1483755331671" FOLDED="true" ID="ID_1913103415" MODIFIED="1483910224790" TEXT="wird im Visitor gebraucht">
@ -822,7 +824,7 @@
<node CREATED="1483755360196" ID="ID_514688462" MODIFIED="1483755368542" TEXT="Nachrichten kommen ohne bestimmte Ordnung an"/>
</node>
</node>
<node CREATED="1483910254385" HGAP="88" ID="ID_267402281" MODIFIED="1483910443222" TEXT="Command-Instanz-Management" VSHIFT="-8">
<node CREATED="1483910254385" FOLDED="true" HGAP="88" ID="ID_267402281" MODIFIED="1483927533299" TEXT="Command-Instanz-Management" VSHIFT="-8">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1483910266799" ID="ID_86909318" MODIFIED="1483910282066" TEXT="wie funktioniert&apos;s?">
<icon BUILTIN="help"/>
@ -875,6 +877,20 @@
<linktarget COLOR="#e0ac6d" DESTINATION="ID_242219866" ENDARROW="Default" ENDINCLINATION="-2132;93;" ID="Arrow_ID_1940592535" SOURCE="ID_876058329" STARTARROW="Default" STARTINCLINATION="2588;-604;"/>
<linktarget COLOR="#e9ba2d" DESTINATION="ID_242219866" ENDARROW="Default" ENDINCLINATION="-784;1692;" ID="Arrow_ID_1617518648" SOURCE="ID_1479669922" STARTARROW="None" STARTINCLINATION="3436;-1136;"/>
</node>
<node CREATED="1483927472385" HGAP="30" ID="ID_774425061" MODIFIED="1483927503424" VSHIFT="13">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
vertagt; Ticket <font color="#c52a05">#1058</font>
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="bell"/>
</node>
</node>
</node>
<node CREATED="1483755390640" ID="ID_1882657994" MODIFIED="1483755397495" TEXT="Vorlage">
@ -915,6 +931,9 @@
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1483927552823" HGAP="-105" ID="ID_458362835" MODIFIED="1483927563707" TEXT="Unit-Test" VSHIFT="12">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node CREATED="1483748340524" ID="ID_841368846" MODIFIED="1483748346879" TEXT="API-Funktionen aufrufen"/>
</node>
@ -8279,7 +8298,7 @@
</node>
</node>
</node>
<node CREATED="1448658726090" HGAP="18" ID="ID_37610818" MODIFIED="1483925094852" TEXT="Commands" VSHIFT="36">
<node CREATED="1448658726090" FOLDED="true" HGAP="18" ID="ID_37610818" MODIFIED="1483927583127" TEXT="Commands" VSHIFT="36">
<node CREATED="1448658755071" ID="ID_1033500384" MODIFIED="1448658767933" TEXT="wie definieren">
<icon BUILTIN="help"/>
<node CREATED="1448658974985" ID="ID_974207484" MODIFIED="1448658989011" TEXT="Definition braucht Session-Modell"/>
@ -8849,8 +8868,10 @@
</body>
</html></richcontent>
</node>
<node CREATED="1453545968166" ID="ID_399884859" MODIFIED="1454718147309" TEXT="Command-Handler">
<node CREATED="1453546129537" ID="ID_1926242869" MODIFIED="1453546137220" TEXT="empf&#xe4;ngt &quot;act&quot;-Nachrichten">
<node CREATED="1453545968166" ID="ID_399884859" MODIFIED="1483927661023" TEXT="Command-Handler">
<icon BUILTIN="button_ok"/>
<node CREATED="1453546129537" FOLDED="true" ID="ID_1926242869" MODIFIED="1483927654562" TEXT="empf&#xe4;ngt &quot;act&quot;-Nachrichten">
<icon BUILTIN="button_ok"/>
<node CREATED="1453546367201" ID="ID_1473684366" MODIFIED="1453546575633" TEXT="&quot;bang&quot; -&gt; HandlingPattern">
<icon BUILTIN="button_ok"/>
</node>
@ -8959,8 +8980,17 @@
<node CREATED="1483925338796" ID="ID_348930186" MODIFIED="1483925348375" TEXT="implementiert in SessionCommandService"/>
</node>
</node>
<node CREATED="1453546138215" ID="ID_621186206" MODIFIED="1483910591582" TEXT="Verbindung zum ProcDispatcher">
<icon BUILTIN="pencil"/>
<node CREATED="1453546138215" FOLDED="true" ID="ID_621186206" MODIFIED="1483927648540" TEXT="Verbindung zum ProcDispatcher">
<icon BUILTIN="button_ok"/>
<node CREATED="1483927603312" ID="ID_1803909975" MODIFIED="1483927622749" TEXT="Aufruf der SessionCommand facade">
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1483927624157" ID="ID_86978128" MODIFIED="1483927636406" TEXT="in CommandHandler gepackt">
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1483927637022" ID="ID_455471953" MODIFIED="1483927642261" TEXT="total einfach hier">
<icon BUILTIN="ksmiletris"/>
</node>
</node>
<node CREATED="1453546183561" ID="ID_1080090125" MODIFIED="1453546187900" TEXT="Mock-Variante">
<node CREATED="1453546195240" ID="ID_1905175534" MODIFIED="1454711242234" TEXT="loggen">
@ -8974,6 +9004,18 @@
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1483927678318" HGAP="25" ID="ID_1324099152" MODIFIED="1483927692050" TEXT="Notification-Facade &#xf6;ffnen" VSHIFT="4">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1483927692988" ID="ID_354422174" MODIFIED="1483927756533" TEXT="Lebenszyklus-Fragen verifizieren">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1483927735679" ID="ID_783490676" MODIFIED="1483927757596" TEXT="Integration in UI-Main verifizieren">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1483927710450" ID="ID_1085939201" MODIFIED="1483927759044" TEXT="Hochfahren des UI / Schlie&#xdf;en des UI">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node CREATED="1453546083296" ID="ID_1154674875" MODIFIED="1455421793848" TEXT="Presentation-State-Manager">
<icon BUILTIN="button_ok"/>
<node CREATED="1455290707481" ID="ID_551153117" MODIFIED="1455290724712">
@ -11479,13 +11521,13 @@
<icon BUILTIN="yes"/>
</node>
</node>
<node CREATED="1481688517437" ID="ID_241232196" MODIFIED="1483747248364" TEXT="Lifecycle">
<node CREATED="1481688517437" HGAP="24" ID="ID_241232196" MODIFIED="1483927980740" TEXT="Lifecycle" VSHIFT="8">
<icon BUILTIN="info"/>
<node CREATED="1481688521532" ID="ID_1825349679" MODIFIED="1481688527391" TEXT="Session started on demand"/>
<node CREATED="1481688521532" ID="ID_1825349679" MODIFIED="1483927971331" TEXT="Session startet on demand"/>
<node CREATED="1481688529539" ID="ID_1972961763" MODIFIED="1481688540109" TEXT="SessionManager ist zust&#xe4;ndig"/>
<node CREATED="1481688544921" ID="ID_1934560784" MODIFIED="1481688561386" TEXT="wenn Session geladen, ist ProcDispatcher freigegeben"/>
<node CREATED="1481688562830" ID="ID_708961458" MODIFIED="1481688582024" TEXT="SessionSubsystem startet processing loop im ProcDispatcher"/>
<node CREATED="1481777252497" ID="ID_1789585729" MODIFIED="1483654905825" TEXT="Shutdown">
<node CREATED="1481777252497" FOLDED="true" ID="ID_1789585729" MODIFIED="1483927959131" TEXT="Shutdown">
<linktarget COLOR="#5a97df" DESTINATION="ID_1789585729" ENDARROW="Default" ENDINCLINATION="3216;0;" ID="Arrow_ID_1930701586" SOURCE="ID_1392452935" STARTARROW="None" STARTINCLINATION="8475;0;"/>
<node CREATED="1481777297635" ID="ID_483368010" MODIFIED="1481777305432" TEXT="Deadlock-Gefahr">
<icon BUILTIN="messagebox_warning"/>
@ -11508,15 +11550,15 @@
</node>
<node CREATED="1481777397542" ID="ID_1147135932" MODIFIED="1481778447806" TEXT="DispatcherLoop stirbt"/>
<node CREATED="1481777410972" ID="ID_457965735" MODIFIED="1481777418982" TEXT="sigTerm"/>
<node CREATED="1481778453137" ID="ID_1895977623" MODIFIED="1481778465907" TEXT="bewirkt reapen des LoopThread">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1482712050992" ID="ID_336551514" MODIFIED="1482712065548" TEXT="wie genau">
<icon BUILTIN="help"/>
<node CREATED="1483927907096" ID="ID_1366384241" MODIFIED="1483927919263" TEXT="destruktor setzt auch PImpl auf NULL">
<icon BUILTIN="idea"/>
<node CREATED="1483927920718" ID="ID_409709261" MODIFIED="1483927929088" TEXT="niemand sonst fa&#xdf;t den PImpl an"/>
<node CREATED="1483927929773" ID="ID_1082393310" MODIFIED="1483927945790" TEXT="atomar wg. Lock auf ProcDispatcher"/>
</node>
</node>
</node>
</node>
</node>
<node CREATED="1481778538165" HGAP="37" ID="ID_522398894" MODIFIED="1483747241417" TEXT="ProcDispatcher" VSHIFT="12">
<node CREATED="1481778538165" FOLDED="true" HGAP="37" ID="ID_522398894" MODIFIED="1483927987223" TEXT="ProcDispatcher" VSHIFT="12">
<icon BUILTIN="button_ok"/>
<node CREATED="1481826274018" HGAP="18" ID="ID_1916296972" MODIFIED="1482430840977" TEXT="Requirements" VSHIFT="-7">
<icon BUILTIN="button_ok"/>