aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbin/tekicmd176
1 files changed, 176 insertions, 0 deletions
diff --git a/bin/tekicmd b/bin/tekicmd
new file mode 100755
index 0000000..cecdf66
--- /dev/null
+++ b/bin/tekicmd
@@ -0,0 +1,176 @@
+#!/usr/bin/perl -T
+################################################################################
+# _____ _
+# |_ _| |_ ___
+# | | | ' \/ -_)
+# |_| |_||_\___|
+# _ _ ____ _ _
+# / \ _ __ ___| |_(_) ___ __ _ | _ \ _ __ ___ (_) ___ ___| |_
+# / _ \ | '__/ __| __| |/ __/ _` | | |_) | '__/ _ \| |/ _ \/ __| __|
+# / ___ \| | | (__| |_| | (_| (_| | | __/| | | (_) | | __/ (__| |_
+# /_/ \_\_| \___|\__|_|\___\__,_| |_| |_| \___// |\___|\___|\__|
+# |__/
+# The Arctica Modular Remote Computing Framework
+#
+################################################################################
+#
+# Copyright (C) 2015-2017 The Arctica Project
+# http://http://arctica-project.org/
+#
+# This code is licensed under AGPL-3+.
+#
+# AGPL-3+
+# -------
+# This programm is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This programm is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program; if not, write to the
+# Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Copyright (C) 2015-2017 Guangzhou Nianguan Electronics Technology Co.Ltd.
+# <opensource@gznianguan.com>
+# Copyright (C) 2015-2017 Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+#
+#
+# Note: As this project is licensed under AGPL-3+, all linked-in
+# shared libraries derived from the Arctica Project must be
+# considered as licensed under AGPL-3+ in this context, too
+# (they are normally dual licensed under GPL-2 or AGPL-3+).
+#
+# Please consider this, when offering a modified version of
+# Arctica Browser as a serivce. To comply with AGPL-3+, you have
+# to make the modified source code of all components of Arctica
+# Browser available to your users.
+#
+################################################################################
+use Data::Dumper;
+use X11::Protocol;
+use Glib::Object::Introspection;
+use Arctica::Core::JABus::Socket;
+use Arctica::Core::eventInit qw( genARandom BugOUT );
+
+my $ACO = Arctica::Core::eventInit->new({
+ app_name=>'arctica-tekicmd',
+ app_class =>'tekicmd',
+ app_version=>'0.0.1.2'});
+
+
+my %args;
+foreach my $arg (@ARGV) {
+ if ($arg =~ /-suspend/) {
+ if ($args{'do'} eq "") {
+ $args{'do'} = "suspend";
+ } else {
+ die("Only do one action....");
+ }
+ } elsif ($arg =~ /-resume/) {
+ if ($args{'do'} eq "") {
+ $args{'do'} = "resume";
+ } else {
+ die("Only do one action....");
+ }
+ } elsif ($arg =~ /-clientnxwid\=([\da-zA-Z]{4,})/) {
+ my $wid = $1;
+ if ($args{'do'} eq "") {
+ $args{'do'} = "clientnxwid";
+ $args{'val'} = $wid;
+ } else {
+ die("Only do one action....");
+ }
+ } elsif ($arg =~ /-audiobitrate\=([\d\:]{1,})/) {
+ my $bitrate = $1;
+ if ($args{'do'} eq "") {
+ $args{'do'} = "audiobitrate";
+ $args{'val'} = $bitrate;
+ } else {
+ die("Only do one action....");
+ }
+ } elsif ($arg =~ /-display\=(\:[\d\.]{1,})/) {
+ my $display_no = $1;
+ if ($display_no) {
+ $args{'display'} = $display_no;
+ }
+ }
+}
+
+
+
+if ($args{'display'} eq "") {
+ if ($ENV{'DISPLAY'}) {
+ $args{'display'} = $ENV{'DISPLAY'};
+ } else {
+ die("No DISPLAY env or cmd line '-display'?!");
+ }
+} else {
+ $ENV{'DISPLAY'} = $args{'display'};
+}
+
+
+if ($args{'do'} eq "") {
+ die("Do WHAT?");
+}
+
+
+my $teki_socket_id = get_tmp_local_socket_id();
+BugOUT(9,"Got TeKi Socket ID: $teki_socket_id");
+
+
+my $teki_socket = Arctica::Core::JABus::Socket->new($ACO,{
+ type => "unix",
+ destination => "local",
+ is_client => 1,
+ connect_to => $teki_socket_id,
+ handle_in_dispatch => {
+ tekicmd => \&got_response,
+ },
+ hooks => {
+ on_ready => \&do_something,
+ },
+ });
+
+
+$ACO->{'Glib'}{'MainLoop'}->run;
+
+
+sub do_something {
+ if ($args{'do'} ne "") {
+ BugOUT(9,"Sending: $args{'do'} $args{'val'}");
+ $teki_socket->client_send('tekicmd',{
+ do => $args{'do'},
+ val => $args{'val'},
+ });
+ exit 0;#FIXME.... in the future we may want to hang around for something to return...
+ } else {
+ die("This Should never ever happen, EVER!");
+ }
+}
+
+
+################################################################################
+# FIX ME! TMP STUFF, REMOVE IN FINAL VERSION!
+sub got_response {
+ print Dump(@_);
+}
+
+
+sub get_tmp_local_socket_id {
+
+ my $x11 = X11::Protocol->new() or die("Are we even in an X11 environment?");
+ my ($teki_sock_id,undef) = $x11 ->GetProperty($x11->root, $x11->atom('TEKI_SOCKET'), $x11->atom('STRING'), 0, ~0, 0);
+ if ($teki_sock_id =~ /^([0-9a-zA-Z]{16,})$/) {
+ $teki_sock_id = $1;
+ return $teki_sock_id;
+ } else {
+ die("No Telekinesis service connected to display '$ENV{'DISPLAY'}'?");
+ }
+
+}