ARB
ad_remote.h
Go to the documentation of this file.
1 // ============================================================= //
2 // //
3 // File : ad_remote.h //
4 // Purpose : //
5 // //
6 // Coded by Ralf Westram (coder@reallysoft.de) in April 2013 //
7 // Institute of Microbiology (Technical University Munich) //
8 // http://www.arb-home.de/ //
9 // //
10 // ============================================================= //
11 
12 #ifndef AD_REMOTE_H
13 #define AD_REMOTE_H
14 
15 #ifndef ARB_ASSERT_H
16 #include "arb_assert.h"
17 #endif
18 #ifndef ARBDBT_H
19 #include "arbdbt.h"
20 #endif
21 #ifndef ARB_SLEEP_H
22 #include <arb_sleep.h>
23 #endif
24 
25 struct MacroTalkSleep : public ARB_inc_sleep {
26  MacroTalkSleep() : ARB_inc_sleep(30, 250, MS, 20) {}
27 };
28 
29 #define REMOTE_BASE_LEN 11 // len of REMOTE_BASE
30 #define MAX_REMOTE_APP_LEN 30 // max len of application (e.g. "ARB_EDIT4")
31 #define MAX_REMOTE_ITEM_LEN 7 // max len of item in APP container ("action", "result", ...)
32 
33 #define MAX_REMOTE_PATH_LEN (REMOTE_BASE_LEN + MAX_REMOTE_APP_LEN + 1 + MAX_REMOTE_ITEM_LEN)
34 
35 // --------------------------------------------------------------------------------
36 
37 class remote_awars {
38  mutable char name[MAX_REMOTE_PATH_LEN+1];
39  int length; // of awar-path inclusive last '/'
40  char *app_id;
41 
42  const char *item(const char *itemname) const {
43  arb_assert(strlen(itemname) <= MAX_REMOTE_ITEM_LEN);
44  strcpy(name+length, itemname);
45  return name;
46  }
47 
48  void init() {
49 #if defined(ASSERTION_USED)
50  size_t alen = strlen(app_id);
51  arb_assert(alen>0 && alen <= MAX_REMOTE_APP_LEN);
52 #endif
53  length = sprintf(name, REMOTE_BASE "%s/", app_id);
55  }
56 
57 public:
58  remote_awars(const char *application) : app_id(ARB_strdup(application)) { init(); }
59  remote_awars(const remote_awars& other) : app_id(ARB_strdup(other.app_id)) { init(); }
62  free(app_id);
63  }
64 
65  // definition of term as used here:
66  // server = process running DB server ( = macro recorder/executor)
67  // client = process performing remote actions (e.g. "ARB_EDIT4"; is identical with server when executing a remote cmd for "ARB_NTREE")
68  // macro = the executed perl macro
69 
70  // The following DB entries trigger GUI interaction in ../SL/MACROS/dbserver.cxx@check_for_remote_command
71  // check_for_remote_command creates 'action', 'awar' and 'value' as soon as a client is ready to remote-execute.
72  const char *action() const { return item("action"); } // contains name of GUI-action to be performed
73  const char *result() const { return item("result"); } //
74  const char *awar() const { return item("awar"); }
75  const char *value() const { return item("value"); }
76 
77  // synchronization (needed to avoid that multiple clients with same application_id randomly accept remote-commands)
78  const char *authReq() const { return item("authReq"); } // == 1 -> a macro wants to remote-execute in some client [set to 1 by macro, reset to 0 by server when last macro terminates]
79  const char *authAck() const { return item("authAck"); } // == pid -> client received and accepted 'authReq' [set to its pid by client, reset to 0 by macro when granting authorization or by server when last macro terminates]
80  const char *granted() const { return item("granted"); } // == pid -> client with pid is authorized to remote-execute commands [set to the clients pid by macro, reset by server when last macro terminates]
81 
82  const char *recAuth() const { return item("recAuth"); } // == pid -> client/server with pid is authorized to record commands [set/cleared by client/server; results in error if multiple pids try to authorize]
83 
84  const char *appID() const { return app_id; }
85 };
86 
87 #else
88 #error ad_remote.h included twice
89 #endif // AD_REMOTE_H
DECLARE_ASSIGNMENT_OPERATOR(remote_awars)
#define arb_assert(cond)
Definition: arb_assert.h:245
remote_awars(const char *application)
Definition: ad_remote.h:58
remote_awars(const remote_awars &other)
Definition: ad_remote.h:59
const char * granted() const
Definition: ad_remote.h:80
const char * result() const
Definition: ad_remote.h:73
#define MAX_REMOTE_PATH_LEN
Definition: ad_remote.h:33
#define MAX_REMOTE_ITEM_LEN
Definition: ad_remote.h:31
char * ARB_strdup(const char *str)
Definition: arb_string.h:27
const char * authAck() const
Definition: ad_remote.h:79
const char * value() const
Definition: ad_remote.h:75
const char * authReq() const
Definition: ad_remote.h:78
#define REMOTE_BASE
Definition: arbdbt.h:22
const char * appID() const
Definition: ad_remote.h:84
const char * awar() const
Definition: ad_remote.h:74
Definition: arb_sleep.h:30
#define MAX_REMOTE_APP_LEN
Definition: ad_remote.h:30
const char * recAuth() const
Definition: ad_remote.h:82
const char * action() const
Definition: ad_remote.h:72