summaryrefslogtreecommitdiff
path: root/PLUGINS/src/servicedemo/svccli.c
diff options
context:
space:
mode:
Diffstat (limited to 'PLUGINS/src/servicedemo/svccli.c')
-rw-r--r--PLUGINS/src/servicedemo/svccli.c90
1 files changed, 90 insertions, 0 deletions
diff --git a/PLUGINS/src/servicedemo/svccli.c b/PLUGINS/src/servicedemo/svccli.c
new file mode 100644
index 0000000..9a4ed44
--- /dev/null
+++ b/PLUGINS/src/servicedemo/svccli.c
@@ -0,0 +1,90 @@
+/*
+ * svccli.c: Sample service client plugin
+ *
+ * See the README file for copyright information and how to reach the author.
+ *
+ * $Id: svccli.c 1.1 2005/08/21 10:44:29 kls Exp $
+ */
+
+#include <stdlib.h>
+#include <vdr/interface.h>
+#include <vdr/plugin.h>
+
+static const char *VERSION = "0.1.1";
+static const char *DESCRIPTION = "Service demo client";
+static const char *MAINMENUENTRY = "Service demo";
+
+class cPluginSvcCli : public cPlugin {
+public:
+ virtual const char *Version(void) { return VERSION; }
+ virtual const char *Description(void) { return DESCRIPTION; }
+ virtual const char *MainMenuEntry(void) { return MAINMENUENTRY; }
+ virtual cOsdObject *MainMenuAction(void);
+ virtual bool Service(const char *Id, void *Data);
+ };
+
+struct ReportBoredPlugin_v1_0 {
+ cPlugin *BoredPlugin;
+ };
+
+struct AddService_v1_0 {
+ int a, b;
+ int sum;
+ };
+
+// --- cPluginSvcCli ----------------------------------------------------------
+
+cOsdObject *cPluginSvcCli::MainMenuAction(void)
+{
+ char s[128];
+ cPlugin *p;
+
+ // Inform server plugin that we are bored
+ // (directed communication)
+ ReportBoredPlugin_v1_0 rbp;
+ rbp.BoredPlugin = this;
+ p = cPluginManager::GetPlugin("svcsvr");
+ if (p)
+ p->Service("ReportBoredPlugin-v1.0", &rbp);
+
+ // See if any plugin can add
+ // (detect capability)
+ p = cPluginManager::CallFirstService("AddService-v1.0", NULL);
+ if (p) {
+ snprintf(s, sizeof(s), "Plugin %s can add", p->Name());
+ Interface->Confirm(s);
+ }
+
+ // Perform add
+ // (use general service)
+ AddService_v1_0 adds;
+ adds.a = 1;
+ adds.b = 1;
+ if (cPluginManager::CallFirstService("AddService-v1.0", &adds)) {
+ snprintf(s, sizeof(s), "Plugin thinks that 1+1=%i", adds.sum);
+ Interface->Confirm(s);
+ }
+
+ // Inform other plugins that we are bored
+ // (broadcast)
+ rbp.BoredPlugin = this;
+ cPluginManager::CallAllServices("ReportBoredPlugin-v1.0", &rbp);
+
+ return NULL;
+}
+
+bool cPluginSvcCli::Service(const char *Id, void *Data)
+{
+ if (strcmp(Id, "ReportBoredPlugin-v1.0") == 0) {
+ if (Data) {
+ ReportBoredPlugin_v1_0 *rbp = (ReportBoredPlugin_v1_0*)Data;
+ char s[128];
+ snprintf(s, sizeof(s), "Plugin %s informed client that it is bored.", rbp->BoredPlugin->Name());
+ Interface->Confirm(s);
+ }
+ return true;
+ }
+ return false;
+}
+
+VDRPLUGINCREATOR(cPluginSvcCli); // Don't touch this!