dbusoorexx Bringing the Power of D-Bus to Your Fingertips



Similar documents
D-Bus Language Bindings for oorexx

New Features in BSF4ooRexx (Camouflaging Java as oorexx)

The 2014 Edition of BSF4ooRexx (for Windows, Linux, MacOSX)

How To Run A Test File Extension On A Rexx (Unix) On A Microsoft Linux (Amd64) (Orchestra) (For Windows) (

Implementing Rexx Handlers in NetRexx/Java/Rexx

Java 7 Recipes. Freddy Guime. vk» (,\['«** g!p#« Carl Dea. Josh Juneau. John O'Conner

An Introduction to Procedural and Object-oriented Programming (Object Rexx) 8 "Automating Windows and Windows Applications"

Exploiting the Web with Tivoli Storage Manager

PHP on the D-BUS. Welcome!

CORBA, DCOP and DBUS. A performance comparison.

DB2 Connect for NT and the Microsoft Windows NT Load Balancing Service

An Introduction to Procedural and Object-oriented Programming (Object Rexx) 3 "Automating Windows and Windows Applications"

Integrating with BarTender Integration Builder

DiskPulse DISK CHANGE MONITOR

Accessing Data with ADOBE FLEX 4.6

Design Notes for an Efficient Password-Authenticated Key Exchange Implementation Using Human-Memorable Passwords

Android Developer Fundamental 1

SendMIME Pro Installation & Users Guide

This presentation will discuss how to troubleshoot different types of project creation issues with Information Server DataStage version 8.

SOSFTP Managed File Transfer

Practice Fusion API Client Installation Guide for Windows

How To Install An Aneka Cloud On A Windows 7 Computer (For Free)

Web Services for Management Perl Library VMware ESX Server 3.5, VMware ESX Server 3i version 3.5, and VMware VirtualCenter 2.5

A Tool for Evaluation and Optimization of Web Application Performance

An Introduction to Procedural and Object-oriented Programming (Object Rexx) 1 "Automating Windows and Windows Applications"

Command Line Interface User Guide for Intel Server Management Software

Using LDAP Authentication in a PowerCenter Domain

BlackBerry Enterprise Service 10. Secure Work Space for ios and Android Version: Security Note

The presentation explains how to create and access the web services using the user interface. WebServices.ppt. Page 1 of 14

GUARD1 PLUS SE Administrator's Manual

Connect Getting Started Guide. Connect Getting Started Guide

NetSpective Logon Agent Guide for NetAuditor

Java Application Developer Certificate Program Competencies

3.5. cmsg Developer s Guide. Data Acquisition Group JEFFERSON LAB. Version

Firewall Builder Architecture Overview

Monitoring Oracle Enterprise Performance Management System Release Deployments from Oracle Enterprise Manager 12c

Getting Started with the Internet Communications Engine

IBM WebSphere Application Server Version 7.0

AllJoyn Analytics Service Framework 1.0 Interface Definition

1. Installing and configuring APC UPS Management

1. Product Information

How To Install Netbackup Access Control (Netbackup) On A Netbackups (Net Backup) On Unix And Non Ha (Net Backup) (Net Backups) (Unix) (Non Ha) (Windows) (

Thomas Jefferson High School for Science and Technology Program of Studies Foundations of Computer Science. Unit of Study / Textbook Correlation

Desktop : Ubuntu Desktop, Ubuntu Desktop Server : RedHat EL 5, RedHat EL 6, Ubuntu Server, Ubuntu Server, CentOS 5, CentOS 6

Adjusting Prevention Policy Options Based on Prevention Events. Version 1.0 July 2006

Projektseminar aus Wirtschaftsinformatik

A Heterogeneous Internetworking Model with Enhanced Management and Security Functions

$ftp = Net::FTP->new("some.host.name", Debug => 0) or die "Cannot connect to some.host.name: $@";

Integrating VoltDB with Hadoop

F-Secure Internet Gatekeeper

Volume SYNAMETRICS TECHNOLOGIES. A Division of IndusSoft Technologies, Inc. DeltaCopy User s Guide

Introduction to Network Security Lab 1 - Wireshark

Introducing Apache Pivot. Greg Brown, Todd Volkert 6/10/2010

User s Manual. Version January EVS SNMP Monitoring

IBM WebSphere Adapter for Quick Start Tutorials

Security Guide. BlackBerry Enterprise Service 12. for ios, Android, and Windows Phone. Version 12.0

StreamServe Persuasion SP4 Service Broker

The programming language C. sws1 1

Project 1: Implement a simple hosts framework using UNIX TCP Sockets to demonstrate the concept of Mobile Agents

Continuous Integration Part 2

LOCKSS on LINUX. CentOS6 Installation Manual 08/22/2013

So today we shall continue our discussion on the search engines and web crawlers. (Refer Slide Time: 01:02)

Covene Cohesion Server Installation Guide A Modular Platform for Pexip Infinity Management November 11, 2014 Version 2.0 Revision 1.

Version Overview. Business value

Application Release Automation (ARA) Vs. Continuous Delivery

Administration Quick Start

We will learn the Python programming language. Why? Because it is easy to learn and many people write programs in Python so we can share.

Qlik Sense Enabling the New Enterprise

Efficiency of Web Based SAX XML Distributed Processing

Online Backup Client User Manual Linux

Virtual CD v10. Network Management Server Manual. H+H Software GmbH

Exclaimer Signature Manager 2.0 User Manual

Ipswitch Client Installation Guide

(n)code Solutions CA A DIVISION OF GUJARAT NARMADA VALLEY FERTILIZERS COMPANY LIMITED P ROCEDURE F OR D OWNLOADING

Setting Up the Site Licenses

Object Oriented Software Design

SSO Plugin. Installation for BMC AR System and WUT. J System Solutions. Version 3.4

Invitation to Ezhil : A Tamil Programming Language for Early Computer-Science Education 07/10/13

Enhanced Connector Applications SupportPac VP01 for IBM WebSphere Business Events 3.0.0

Dell SupportAssist Version 2.0 for Dell OpenManage Essentials Quick Start Guide

7 Why Use Perl for CGI?

A Comparative Study on Vega-HTTP & Popular Open-source Web-servers

ODBC Driver User s Guide. Objectivity/SQL++ ODBC Driver User s Guide. Release 10.2

Oracle Universal Content Management

DS License Server. Installation and Configuration Guide. 3DEXPERIENCE R2014x

HP Operations Manager Software for Windows Integration Guide

Apache JMeter HTTP(S) Test Script Recorder

Signiant Agent installation

Federated Access to an HTTP Web Service Using Apache (WSTIERIA Project Technical Note 1)

Specialized Android APP Development Program with Java (SAADPJ) Duration 2 months

Object Oriented Software Design

Example of Standard API

Windows PowerShell Cookbook

NetIQ AppManager for IBM WebSphere Application Server UNIX Management Guide

RecoveryVault Express Client User Manual

ODBC Client Driver Help Kepware, Inc.

avast! for linux technical documentation

Hello World Portlet Rendered with JSP for WebSphere Portal Version 4.1

Installation Guidelines (MySQL database & Archivists Toolkit client)

Oracle Fusion Middleware 11gR2: Forms, and Reports ( ) Certification with SUSE Linux Enterprise Server 11 SP2 (GM) x86_64

Transcription:

Institut für Betriebswirtschaftslehre und Wirtschaftsinformatik dbusoorexx Bringing the Power of D-Bus to Your Fingertips LinuxCon Europe 2015, Dublin October 6 th, 2015 Rony G. Flatscher Wirtschaftsuniversität Wien Welthandelsplatz 1 A-1020 Wien Austria Hier LinuxCon Vortrags-/Vorlesungstitel Automatisierung Europe, 2015, von Dublin Windows im Master Anwendungen eintragen (3) 1 Prof. Dr. Rony G. Flatscher

Agenda D-Bus History, usages, concepts, importance has been increasing! Very brief overview of oorexx (open object Rexx) History, easy syntax, reads like pseudo-code, fun! D-Bus Language Bindings for oorexx ("dbusoorexx") Overview, marrying a dynamic language with a strictly typed wire protocol Examples for clients, servers (services) Important utility for on-the-fly documentation " dbusdoc.rex" (also "dbuslistobjectpaths.rex") Roundup and outlook, URLs for further fun Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 2 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus History History RedHat, Inc. Havoc Pennington First release of the D-Bus specifications: 2003-09-06 (revision 0.8), cf. <http://dbus.freedesktop.org/releases/dbus/> Handed over to "freedesktop.org", cf. <http://dbus.freedesktop.org> Became part of all Linux distributions Latest release, version 1.10.0 (distros often use older versions) Cross-platfrom, ported to other operating systems, e.g. MacOSX Windows Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 3 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Usages, 1 Linux kernel communicates with environment Uses the "system" D-Bus daemon (a message broker) Broadcasting D-Bus signals to report noteworthy events E.g. reporting additions/removal of devices For security reasons D-Bus services and interactions are controlled by system service configuration files Warning: do not change the service configuration files with administrative privileges, if you are not 100% sure what you are doing! You could harm your own system bad time! Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 4 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Usages, 2 Applications (services) within sessions Uses the "session" D-Bus daemon (a message broker) Using the user's credentials for using D-Bus services and interactions Allows to interact with D-Bus "session" services using D-Bus messages Allows to control the desktop and many applications Allows to learn about events broadcasted as D-Bus signals from "session" services Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 5 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Concepts, 1 D-Bus Transports Unix sockets, address prefix: "unix:" Server and client on same computer launchd, address prefix: "launchd:" Server and client on same computer nonce-tcp/ip sockets, address prefix: "nonce-tcp:" Server and client on same computer TCP/IP sockets, address prefix: "tcp:" Server and client on same or different computer Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 6 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Concepts, 2 D-Bus Messages Employing a transport, D-Bus messages can be exchanged Message consists of an interface name and a member name There are four message types "call message" that may cause a "reply message" or an "error message" (or no reply at all) a one-way "signal message" Arguments and return values are strictly typed 13 basic types (boolean, byte, double, int16, float, string,...) 4 container types (array, map/dict, structure, variant) Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 7 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Datatypes array a.array boolean b Rexx string byte y Rexx string double d Rexx string int16 n Rexx string int32 i Rexx string in64 x Rexx string objpath o Rexx string signature g Rexx string string s Rexx string uint16 q Rexx string uint32 u Rexx string uint64 t Rexx string unix_fd h Rexx string variant v depends on signature structure ().Array map/dict a{s }.Directory Some examples: org.freedesktop.dbus.introspectable s Introspect() org.freedesktop.dbus.properties v Get(ss) a{sv} GetAll(s) Set(ssv) org.freedesktop.dbus.notifications CloseNotification(u) as GetCapabilities() (ssss) GetServerInformation() u Notify(susssasa{sv}i) Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 8 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Concepts, 3 D-Bus Connection A connection between a D-Bus client and a D-Bus server Dubbed "bus" D-Bus Message Daemon/Broker A D-Bus server A set of services that allow it to act as a message broker Relays D-Bus messages among D-Bus clients connected to it Manages D-Bus connections Allows to assign one or more unique names to connections Can start D-Bus services on demand Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 9 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus D-Bus Message Daemon/Broker Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 10 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Concepts, 4 Object Path A String starting with "/" Denotes the "object" one wishes to send a D-Bus message to Sending D-Bus messages Unique bus name, service name Object path Interface name Member name Arguments Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 11 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Concepts, 5 Discovering D-Bus service object interfaces on the fly Message org.freedesktop.dbus.introspectable.introspect() Returns a XML-encoded file with the interface definitions Addressed to a D-Bus object in a D-Bus service Exploited by e.g. dbusoorexx, including dbusdoc.rex d-feet qt-qdbusviewer Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 12 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Concepts, 6 Private D-Bus Server Allows to create a simple "private" D-Bus server No daemon/broker services available D-Bus clients can interact with D-Bus server D-Bus infrastructure allows to Connect to a (private) D-Bus server Exchange D-Bus messages with the D-Bus server Makes it easy to create client-server apps fast If using the tcp-transport, then D-Bus based interactions can be accross multiple computers! Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 13 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

Brief introduction to oorexx Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 14 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

Introduction to oorexx, 1 The Origin: REXX, IBM, 1979 IBM (Mike F. Cowlishaw, Hursley) Replacement for the somewhat awkward EXEC II mainframe scripting language REXX should be "human centric" by comparison Easy syntax, hence really easy to learn and to remember! Feasible for rare programmers and home/business programmers! ANSI (!) Rexx standard in 1996 Many interpreters on different platforms, e.g. Amiga! Declared to be IBM's SAA scripting language IBM implemented it on all of its platforms! IBM mainframes to this day controlled by REXX! Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 15 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

Introduction to oorexx, 2 Nutshell REXX, Example 2 Fundamental Concepts (Code 1) say "Hello world!" /* yields: Hello world! */ say 1/3 /* yields: 0.333333333 */ numeric digits 25 /* now use 25 significant digits in arithmetics */ say "1"/3 /* yields: 0.3333333333333333333333333 */ "rm -rf *" /* remove all files recursively */ "Everything is a string" Everything outside of quotes gets uppercased Arbitraryly precise decimal arithmetic ANSI Rexx rules served for defining the rules for other programming languages and is used for implementing decimal arithmetics in hardware Unknown statements are passed to invoker Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 16 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

Introduction to oorexx, 3 The Successor: Object REXX, IBM, 1997 IBM created a true object-oriented replacement Initial research by Simon Nash (started 1988, Hursley), continued and finalized by Rick McGuire (1997) Continues to execute REXX programs unchanged Adds directives (led in with two colons ::) Directs the interpreter to carry out services before interpreting the program starting with line 1 Adds classes, methods, messages (own operator) "Everything is an object" 1997 part of OS/2 Warp IBM sold commercial versions for AIX, Windows Experimental versions for Linux, Solaris Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 17 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

Introduction to oorexx, 4 The Opensource: Open Object REXX, 2005 IBM handed over the Object REXX source code to the nonprofit special interest group (SIG) Rexx Language Association (RexxLA) In 2005 RexxLA published first opensource version as "Open Object Rexx (oorexx)", version 3.0 Currently at version 4.2 available for all major operating systems Linux, MacOSX, Windows (with OLE/COM-support) Work on version 5.0 has started Helping hands always welcome! :-) Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 18 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

Introduction to oorexx, 5 Nutshell Example.Dog ~new("sweety") ~bark /* create a dog, let it bark */.BigDog~new("Grobian")~bark /* create a big dog, let it bark */ ::class Dog ::method init /* constructor method */ expose name /* establish direct access to attribute (object variable) */ use arg name /* retrieve argument, assign it to attribute */ ::attribute name /* defines an attribute */ ::method bark say self~name":" "Wuff Wuff" ::class BigDog subclass Dog ::method bark say self~name":" "WUFFF! WUFFF!! WUFFF!!!" /* yields the following output: */ Sweety: Wuff Wuff Grobian: WUFFF! WUFFF!! WUFFF!!! Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 19 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 20 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Overview, 1 Combination of native code ("dbusoorexx", C++) and the oorexx package named "dbus.cls" (oorexx) Closely coupled "dbusoorexx" depends on classes and behaviour of "dbus.cls" "dbus.cls", an oorexx package/program, depends on the features and behaviour of "dbusoorexx", a C++ library Do not change the code, unless you know what you are doing! Goals Make it easy for oorexx programmers to interact with D-Bus Take advantage of a dynamically typed language Apply the Rexx "human-orientation" philosophy where possible Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 21 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Overview, 2 "dbus.cls" Defines oorexx classes for the D-Bus language binding DBus Core class to allow - Connecting to D-Bus daemons (e.g. "system", "session", address) - Sending distinct call and signal messages to D-Bus services - Filtering and fetching signal messages from other D-Bus services - Getting oorexx proxy objects for D-Bus service objects DBusProxy Utility class to camouflage a service object as an oorexx object - Returned by.dbus method getobject(busname,objectpath) Automatic method lookup, marshalling of arguments and unmarshalling of return values Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 22 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Overview, 3 DBusServiceObject Allows oorexx objects to be used as D-Bus service objects DBusSignalListener Implicitly used by.dbus Allows for additional filtering of D-Bus signal messages DBusServer Allows to create a private D-Bus server in oorexx Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 23 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Overview, 4 IDBusPathMaker Utility class to set up D-Bus service-object discovery for oorexx DBusServiceObjects IntrospectHelper, IntrospectHelperInterface Utility classes to create introspection data on-the-fly IDBus, IDBusNode, IDBusInterface, IDBusMethod, IDBusCallMethod, IDBusSignalMethod, IDBusPropertyMethod, IDBusArg, IDBusAnnotation Utility classes for introspection of D-Bus service objects Needed by classes and routines in "dbus.cls" Usually not used by oorexx programmers Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 24 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Overview, 5 Public routines dbus.box(signature[,args]) Needed for variant values that expect a specific signature stringtoutf8(string) D-Bus string datatype must be UTF-8 Converts a Rexx string to UTF-8 (if it contains non-us characters), requires the BSF4ooRexx package Camouflages Java (JRE) as a dynamic, caseless oorexx class library Cf. <http://bsf4oorexx.sourceforge.net/> DBusDataType(value[,type]) Returns the D-Bus datatype name of value, else.nil If type argument given, returns.true or.false, type can be: B[usname], I[nterfaceName], M[ember], O[bjectPath], S[ignature] Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 25 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Example 1 (org.freedesktop.notifications), 1 Using a common service Bus name ("service name") org.freedesktop.notifications Object path /org/freedesktop/notifications Interface name org.freedesktop.notifications Members as (ssss) u CloseNotification(u) GetCapabilities() GetServerInformation() Notify(susssasa{sv}i) Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 26 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Excursion: On-the-fly Documentation, 1 D-Bus documentation sometimes "meager" Idea to exploit the D-Bus infrastructure The "org.freedesktop.dbus" family of interfaces org.freedesktop.dbus.introspection.introspect() Usually implemented by every D-Bus service objects Render interface definitions as HTML text Format results with CSS to allow easy usage, format changes Collect complex signatures and list them at the end Usage: dbusdoc.rex [[session system] [service name]] Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 27 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Excursion: On-the-fly Documentation, 2 rexx dbusdoc.rex Notifications Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 28 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Example 1 (org.freedesktop.notifications), 2 Getting the D-Bus service object as an oorexx object.dbus method getobject(busname,objectpath) returns a DBusProxyObject which Remembers the bus name and the object path Used for sending messages Interrogates the interfaces of the target D-Bus service object Used for automatically determining methods, marshalling arguments and unmarshalling return values Very simple and easy to interact with D-Bus service objects! Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 29 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Example 1 (org.freedesktop.notifications), 3 /* get access to remote object */ o=.dbus~session~getobject("org.freedesktop.notifications","/org/freedesktop/notifications") id=o~notify("an oorexx App",, "oorexx", "oorexx Demo", "Hello, my beloved world!",,, -1).dbus~session~close /* explicitly close session bus, shuts down DBus message loop thread */ ::requires "dbus.cls" /* get DBus support */ Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 30 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Example 1 [Without Proxy], 4 conn=.dbus~session /* get connection to session dbus */ /* define message arguments */ busname ="org.freedesktop.notifications" objectname ="/org/freedesktop/notifications" interfacename ="org.freedesktop.notifications" membername ="Notify" replysignature="u" /* uint32 */ callsignature ="susssasa{sv}i" /* string,uint32,string,string,string,array of string,dict,int32 */ id=conn~message("call",busname,objectname,interfacename,membername,replysignature,callsignature, - "An oorexx App",, "oorexx", "oorexx Demo", "Hello, my beloved world!",,, -1) conn~close /* explicitly close connection, shuts down DBus message loop thread */ ::requires "dbus.cls" /* get DBus support */ Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 31 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Intercepting DBus Signals One-way D-Bus messages with no return value Interface, name, arguments (optional) D-Bus daemon allows filtering for them Only forwards matching signal D-Bus messages.dbus method listener to add a Rexx listener object Invokes Rexx method named after the signal Otherwise the unknown mechanism of oorexx can be employed Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 32 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Example 2 (Listening to Signals), 1 signal on halt -- intercept ctl-c (jump to label 'halt:' below) conn=.dbus~session -- get the "session" connection conn~listener("add",.rexxsignallistener~new) -- add the Rexx listener object conn~match("add", "type='signal'",.true) -- ask for any signal message say "Hit enter to stop listener..." parse pull answer -- wait for pressing enter halt: -- a label for a halt condition (ctl-c) say "closing connection." conn~close -- close connection, stops message loop ::requires "dbus.cls" -- get dbus support for oorexx ::class RexxSignalListener -- just dump all signals/events we receive to be continued on next page Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 33 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Example 2 (Listening to Signals), 2 continued from previous page ::class RexxSignalListener -- just dump all signals/events we receive ::method unknown -- this method intercepts all unknown messages use arg methname, methargs slotdir=methargs[methargs~size] -- last argument is slotdir say "-->" pp(slotdir~messagetypename) pp(slotdir~interface) - pp(slotdir~member)", nrargs="methargs~items-1 if methargs~items>1 then do do i=1 to methargs~items-1 say " argument #" i":" pp(methargs[i]) end end say "-"~copies(79) ::method NameOwnerChanged -- demo how to directly intercept a signal use arg name, old, new, slotdir say "==> NameOwnerChanged:" "Name:" pp(name)", OldOwner:" pp(old) - ", NewOwner:" pp(new) say "-"~copies(79) ::routine pp -- "pretty print": enclose string value with square brackets parse arg value return "["value"]" Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 34 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Example 2 (Listening to Signals), 3 Running client yields (starting and then clicking into another terminal window): rony@rony-thinkpad-x230:~/work/code$ rexx listener.rex --> [signal] [org.freedesktop.dbus] [NameAcquired], nrargs=1 argument # 1: [:1.193] ------------------------------------------------------------------------------- Hit enter to stop listener... --> [signal] [org.ayatana.bamf.matcher] [StackingOrderChanged], nrargs=0 ------------------------------------------------------------------------------- --> [signal] [org.freedesktop.dbus.properties] [PropertiesChanged], nrargs=2 argument # 1: [org.ayatana.bamf.view] argument # 2: [a Directory] ------------------------------------------------------------------------------- --> [signal] [org.ayatana.bamf.view] [ActiveChanged], nrargs=1 argument # 1: [1] ------------------------------------------------------------------------------- --> [signal] [org.ayatana.bamf.matcher] [ActiveWindowChanged], nrargs=2 argument # 1: [/org/ayatana/bamf/window/67112584] argument # 2: [/org/ayatana/bamf/window/67108875] ------------------------------------------------------------------------------- --> [signal] [org.freedesktop.dbus.properties] [PropertiesChanged], nrargs=2 argument # 1: [org.ayatana.bamf.view] argument # 2: [a Directory] ------------------------------------------------------------------------------- cut Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 35 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Creating DBus Services ("DBus Server") In a nutshell (setting up a D-Bus service) Create a Rexx class that implements the methods Supply a method named Introspect returning XML Request a busname from the D-Bus daemon Define an interface and an object name.dbus method serviceobject to add a D-Bus object (object name) and its Rexx service object Invokes Rexx method named after the D-Bus message Otherwise the unknown mechanism of oorexx can be employed Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 36 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Example 3 (Multiplier, Server/Service), 1 #!/usr/bin/rexx busname ="org.rexxla.oorexx.demo.hello" objectpath ="/org/rexxla/oorexx/demo/hello" signal on halt -- intercept ctl-c (jump to label "halt:") conn=.dbus~session -- get the session bus res=conn~busname("request", busname) -- request a bus name if res<>.dbus.dir~primaryowner & res<>.dbus.dir~alreadyowner then -- o.k., wait for clients? do say "res="res "problem with requesting the bus name" busname", aborting..." exit -1 end service=.hellorexxservice~new -- create an instance of the Rexx service conn~serviceobject("add", objectpath, service) -- add service object to connection say "Hit enter to stop server..." parse pull answer halt: -- a ctl-c causes a jump to this label say "closing connection." conn~close -- close connection, stops message loop ::requires "dbus.cls" -- get dbus support for oorexx ::class HelloRexxService -- the methods of this class service DBus clients! to be continued on next page Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 37 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Example 3 (Multiplier, Server/Service), 2 continued from previous page ::class HelloRexxService -- the methods of this class service DBus clients! ::method Multiply -- implementation of "orx.rexxla.oorexx.demo.hello.multiply" use arg number1, number2, slotdir say "Multiply-request received: sender-bus=["slotdir~sender"]" "at=["slotdir~datetime"]" return number1*number2 ::method Introspect /* return the introspection data for this service object */ return '<!DOCTYPE node PUBLIC "-//freedesktop//dtd D-BUS Object Introspection 1.0//EN"' - '"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"> ' - '<node> ' - ' <interface name="org.freedesktop.dbus.introspectable"> ' - ' <method name="introspect"> ' - ' <arg name="data" direction="out" type="s"/> ' - ' </method> ' - ' </interface> ' - ' <interface name="org.rexxla.oorexx.demo.hello"> ' - ' <method name="multiply"> ' - ' <arg name="number1" direction="in" type="d"/> ' - ' <arg name="number2" direction="in" type="d"/> ' - ' <arg name="result" direction="out" type="d"/> ' - ' </method> ' - ' </interface> ' - '</node> ' Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 38 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx Example 3 (Multiplier, Client), 3 #!/usr/bin/rexx conn=.dbus~connect("session") -- connect to the "session" bus busname ="org.rexxla.oorexx.demo.hello" objectpath ="/org/rexxla/oorexx/demo/hello" o=conn~getobject(busname, objectpath) -- get the DBus object parse arg num1 num2 -- parse command line arguments if num1="" then num1=12.345 -- supply a default if num2="" then num2=10.01 -- supply a default say num1"*"num2"="o~multiply(num1,num2) -- use the multiply method conn~close ::requires "dbus.cls" -- get dbus support for oorexx Running client yields: rony@rony-thinkpad-x230:~/work/code$ rexx c_multiplier.rex 12.345*10.01=123.573450 rony@rony-thinkpad-x230:~/work/code$ rexx c_multiplier.rex 987.65 43.219 987.65*43.219=42685.2453 Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 39 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

About Packaging dbusoorexx: Anyone who could give a helping hand? :-) No knowledge about creating packages for the different Linux distros! Can you provide one by any chance? Mostlikely a rpm and a deb package would be very helpful for the project A package for the binaries and closely related files liboorexxdbus.so dubs.cls (executable) dbusdoc.rex, dbuslistobjectpaths.rex (executables) dbusdoc.css (default rendering definitions) A separate (?) package for the documentation and samples oorexxdbusoverview.pdf, sample Rexx scripts oorexxdocs (JavaDoc-like documentation for oorexx) Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 40 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

Roundup and Outlook Genuine oorexx language binding for oorexx 32- and 64-bit ports available Deployable on all Linux systems Makes it very easy to exploit D-Bus Rexx philosophy "human-orientness" a guiding principle All D-Bus service objects can be interacted with All D-Bus signals (events) can be handled oorexx D-Bus service objects easy to implement! Great tools come with it "dbusdoc.rex", "dbuslistobjectpaths.rex" Support for other D-Bus platforms available! MacOSX Windows Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 41 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher

D-Bus Language Bindings for oorexx URLs as of 2015-10-05 These slides: <http://wi.wu.ac.at/rgf/rexx/misc/lce2015/> Student's works: <http://wi.wu.ac.at/rgf/diplomarbeiten/> oorexx: <http://www.oorexx.org> Code: <http://sourceforge.net/projects/oorexx/> Helpbooks (rexxpg.pdf, rexxref.pdf), or book: <http://facultas.at/flatscher> Brief: <http://wi.wu.ac.at/rgf/rexx/misc/ecoop06/ecoop2006_rdl_workshop_flatscher_paper.pdf> RexxLA (owner): <http://www.rexxla.org> dbusoorexx (code contains all platforms) Code: <http://sourceforge.net/projects/bsf4oorexx/files/ga/sandbox/dbusoorexx/> Docs: <http://wi.wu.ac.at/rgf/rexx/orx22/201112-dbus4oorexx-article.pdf> D-Bus for Windows: <http://wi.wu.ac.at/rgf/rexx/orx22/work/> D-Bus for MacOSX, eg. via <http://www.macports.org/> Hier LinuxCon Vortrags-/Vorlesungstitel Europe, 2015, Dublinim Master eintragen 42 Hier Name des Vortragenden im Rony Master G. eintragen Flatscher