
| Current Path : /var/www/web-klick.de/dsh/50_dev2017/1300__perllib/DivBasicF/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/web-klick.de/dsh/50_dev2017/1300__perllib/DivBasicF/COM.pm |
package DivBasicF::COM;
use strict;
use Data::Dumper;
use Digest::MD5;
sub new {
my $class = shift;
my $self = {};
$self->{'PARS'} = shift;
$self->{'OBJ'} = shift;
bless($self,$class);
# if ($self->{'OBJ'}) {
# $self->{'OBJ'}->{'PARENT'} = $self;
# }
$self->{'CONNECTION_ID'} = { "1" => "" };
$self->{'RESET_ID'} = { "1" => "" };
$self->{'SESSION'} = { "1" => {} };
$self->{'STORE_ID'} = { "1" => "" };
$self->{'LOCK'} = { "1" => 0 };
$self->{'STATUS'} = { "1" => 0 };
$self->{'DEFAULT'} = { "1" => [] };
$self->{'CHANNEL'} = "1";
$self->init();
if (!($self->{'FREQUENZ'})) { $self->{'FREQUENZ'} = 25; }
if (!($self->{'WAIT_TIME'})) { $self->{'WAIT_TIME'} = 20; }
($self->{'CYCLES'},$self->{'INTERVAL'}) =
$self->cycles_interval($self->{'WAIT_TIME'},$self->{'FREQUENZ'});
return($self);
}
#******************************************************************
sub cycle {
my $self = shift;
my $obj = shift;
return($self);
if (!$obj) {
$self->{'PARENT'} = $self->{'OBJ'}->cycle($self);
}
elsif (!($self->{'OBJ'})) {
$self->{'OBJ'} = $obj;
}
else {
return($self->{'OBJ'}->cycle($obj));
}
return($self);
}
#******************************************************************
sub init { my $self = shift; $self->{'COM_PARS'} = shift; }
sub log { 1; }
sub up { my $self = shift; if ($self->{'OBJ'}) { $self->{'OBJ'}->up(); } }
sub down { my $self = shift; if ($self->{'OBJ'}) { $self->{'OBJ'}->down(); } }
sub dir { my $self = shift; return($self->{'DIR'}); }
sub list { return({}); }
#******************************************************************
sub cycles_interval {
my $self = shift;
my $wait_time = shift;
my $frequenz = shift;
my $cycles = $self->{'CYCLES'};
my $interval = $self->{'INTERVAL'};
if ($frequenz) {
if (!$wait_time) {
$wait_time = $self->{'WAIT_TIME'};
}
$cycles = $wait_time * $frequenz;
$interval = 1 / $frequenz;
}
elsif ($wait_time) {
$cycles = $wait_time * $self->{'FREQUENZ'};
$cycles = 1 if ($cycles < 1);
}
return($cycles,$interval);
}
#********************************************************************
sub encode {
my $self = shift;
my $o = shift;
if ($self->{'SERIAL'}) {
return($self->{'SERIAL'}->encode($o));
}
return(Server::frezthaw::freeze($o));
}
#********************************************************************
sub decode {
my $self = shift;
my $o = shift;
my $o1 = "";
if ($self->{'SERIAL'}) {
- return($self->{'SERIAL'}->decode($o));
}
$o1 = (Server::frezthaw::thaw($o))[0];
return($o1);
}
#*********************************************************************
sub run { # Server-seitige Funktion
my $self = shift;
my $max_new = shift;
my $max_run = shift;
my $wait = shift;
my $text;
while (0 == 0) {
print "STATUS " . $self->{'STATUS'}->{$self->{'CHANNEL'}};
$text = $self->run1();
print " $text\n";
return() if ($text == -1);
$text = $wait if ($text eq "___WAIT_UNKNOWN___");
sleep($text) if ($text);
}
}
#*********************************************************************
sub msg {
my $self = shift;
$self->{'MESSAGE'} = shift;
}
#*********************************************************************
sub get {
my $self = shift;
my $o = $self->{'MESSAGE'};
delete ($self->{'MESSAGE'});
return($o);
}
#*********************************************************************
sub run1 {
my $self = shift;
my $wait = shift;
my $channel = $self->{'CHANNEL'};
my $o; my $o1; my $o2;
if ($self->{'STATUS'}->{$channel} == 0) {
$self->{'TEXT'}->{$channel} = $self->get(999999999999);
unshift(@{$self->{'TEXT'}->{$channel}},
"START_".$self->{'TEXT'}->{$channel}->[0]);
$self->{'STATUS'}->{$channel} = 2;
return("");
}
if ($self->{'STATUS'}->{$channel} == 1) {
$o = "";
$self->{'TEXT'}->{$channel} = $self->get($o);
if (!(ref($self->{'TEXT'}->{$channel}))) {
return($self->{'TEXT'}->{$channel});
}
$self->{'STATUS'}->{$channel} = 2;
return("");
}
if ($self->{'STATUS'}->{$channel} == 2) {
$self->{'TEXT'}->{$channel} =
$self->{'OBJ'}->query( [@{ $self->{'TEXT'}->{$channel} }] );
if (!(ref($self->{'TEXT'}->{$channel}))) {
$self->{'STATUS'}->{$channel} = 1;
return($self->{'TEXT'}->{$channel});
}
elsif ($self->{'TEXT'}->{$channel}->[0] =~ /^___NEXT(\-?)([a-zA-Z0-9]*)___$/) {
$o = $2;
$o1 = $1;
shift(@{$self->{'TEXT'}->{$channel}});
$self->{'STATUS'}->{$channel} = 2;
if ($o1) {
sleep($o);
} else {
return(-1) if ($o eq "EXIT");
return($o);
}
}
else {
$self->{'STATUS'}->{$channel} = 4;
}
return("");
}
if ($self->{'STATUS'}->{$channel} == 4) {
$o = ""; $o1 = "";
if ($self->{'TEXT'}->{$channel}->[0] =~ /^___QUERY(\-?)([a-zA-Z0-9]*)___$/) {
$o = $2;
$o1 = $1;
shift(@{$self->{'TEXT'}->{$channel}});
}
$self->msg($self->{'TEXT'}->{$channel});
$self->{'STATUS'}->{$channel} = 1;
if ($o1) {
sleep($o);
} else {
return(-1) if ($o eq "EXIT");
return($o);
}
}
}
#*********************************************************************
sub START {
my $self = shift;
my $mode = shift;
return(['___NEXT1___',@_]);
}
#*********************************************************************
sub query {
my $self = shift;
my $pars = shift;
my $func = shift(@$pars);
my $session = $self->get_session();
$session->{'___QUERYFUNC___'} = $func;
# print "DDDD $self $func " . Dumper($pars) . "\n"; sleep 1;
my $mode = "";
my $text = "";
my $fehler = "";
while (0 == 0) {
eval("\$text = \$self->\$func(\$mode,\@\$pars)");
if ($text) {
return($text);
} else {
if ($@) {
$fehler = $fehler . "$func: " . $@ . "\n";
} else {
$fehler = $fehler . "$func: no return value\n";
}
}
if ($func !~ /^(.*)(\_.*)$/) {
if (!($self->{'OBJ'})) {
return(["ERROR: $func on $self not found: " . $fehler]);
}
# if ($func =~ s/^(.*)\:\:(.*)$//) {
# $func = $2;
# }
return($self->{'OBJ'}->query([$func.$mode,@$pars]));
}
$mode = $2 . $mode;
$func = $1;
}
}
#*****************************************************************
sub channel {
my $self = shift;
my $ch = shift;
if (!$ch) {
my @ee = sort { $a <=> $b } values ( %{$self->{'CONNECTION_ID'}} );
$ch = sprintf("%1u",pop(@ee));
$self->{'RESET_ID'}->{$ch} = "";
$self->{'SESSION'}->{$ch} = {};
$self->{'STORE_ID'}->{$ch} = "";
$self->{'LOCK'}->{$ch} = 0;
$self->{'STATUS'}->{$ch} = 1;
$self->{'DEFAULT'}->{$ch} = [];
$self->{'TEXT'}->{$ch} = [];
}
$self->{'CHANNEL'} = $ch;
return($self->{'CHANNEL'});
}
#**************************************************************
sub get_channel {
my $self = shift;
return($self->{'CHANNEL'});
}
#**************************************************************
sub connection {
my $self = shift;
if (!($self->{'CONNECTION_ID'}->{$self->{'CHANNEL'}})) {
$self->{'RESET_ID'}->{$self->{'CHANNEL'}} = shift;
$self->{'CONNECTION_ID'}->{$self->{'CHANNEL'}} =
$self->{'RESET_ID'}->{$self->{'CHANNEL'}};
} else {
$self->{'CONNECTION_ID'}->{$self->{'CHANNEL'}} = shift;
}
return($self->{'CONNECTION_ID'}->{$self->{'CHANNEL'}});
}
#**************************************************************
sub get_connection {
my $self = shift;
my $reset_id = shift;
if ($reset_id) {
if ($self->{'CONNECTION_ID'}->{$self->{'CHANNEL'}} eq
$self->{'RESET_ID'}->{$self->{'CHANNEL'}}) {
return("");
# $reset_id = $self->{'CONNECTION_ID'}->{$self->{'CHANNEL'}};
# print "RRR $reset_id\n";
# return([$reset_id]);
# return([$self->{'CONNECTION_ID'}->{$self->{'CHANNEL'}}]);
}
}
return($self->{'CONNECTION_ID'}->{$self->{'CHANNEL'}});
}
#**************************************************************
sub session {
my $self = shift;
$self->{'SESSION'}->{$self->{'CHANNEL'}} = shift;
return($self->{'SESSION'}->{$self->{'CHANNEL'}});
}
#**************************************************************
sub get_session {
my $self = shift;
my $par = shift;
my $v = $self->{'SESSION'}->{$self->{'CHANNEL'}};
if ($par) {
$v->{'class'} = $par;
}
return($v);
}
#**************************************************************
sub get_status {
my $self = shift;
return($self->{'STATUS'}->{$self->{'CHANNEL'}});
}
#**************************************************************
sub store_id {
my $self = shift;
my $o = shift;
$self->{'STORE_ID'}->{$self->{'CHANNEL'}} = $o;
return($self->{'STORE_ID'}->{$self->{'CHANNEL'}});
}
#**************************************************************
sub get_store_id {
my $self = shift;
my $toggle = shift;
my $o;
$o = $self->{'STORE_ID'}->{$self->{'CHANNEL'}};
if (!$o) {
$o = Digest::MD5->md5_base64(Dumper($self).time().
sprintf("%1u",int rand(10000000)));
$o =~ s/\//\_/g;
$o =~ s/\+/\-/g;
}
if ($toggle) {
if ($o =~ s/\_$//) { 1; }
else {$o = $o . "_"; }
}
return($o);
}
##**************************************************************
sub umlaute {
my $self = shift;
$self->{'UMLAUTE'} = {
"Lae" => chr(228), # Linux
"Loe" => chr(246),
"Lue" => chr(252),
"Lsz" => chr(223),
"LAE" => chr(196),
"LOE" => chr(214),
"LUE" => chr(220),
"Wae" => chr(132), # Windows
"Woe" => chr(148),
"Wue" => chr(129),
"Wsz" => chr(223),
"WAE" => chr(142),
"WOE" => chr(153),
"WUE" => chr(154),
"Uae" => chr(195) . chr(164), # UTF-8
"Uoe" => chr(195) . chr(182),
"Uue" => chr(195) . chr(188),
"Usz" => chr(195) . chr(159),
"UAE" => chr(195) . chr(132),
"UOE" => chr(195) . chr(150),
"UUE" => chr(195) . chr(156)
};
}
#**************************************************************
sub c1 {
my $self = shift;
my $text = shift;
if ($self->{'CONVERT'} eq "win") {
my $u = $self->{'UMLAUTE'};
if (!$u) { $u = $self->umlaute(); }
$text =~ s/$u->{'Lae'}/$u->{'Wae'}/gs;
$text =~ s/$u->{'Loe'}/$u->{'Woe'}/gs;
$text =~ s/$u->{'Lue'}/$u->{'Wue'}/gs;
$text =~ s/$u->{'Lsz'}/$u->{'Wsz'}/gs;
$text =~ s/$u->{'LAE'}/$u->{'WAE'}/gs;
$text =~ s/$u->{'LOE'}/$u->{'WOE'}/gs;
$text =~ s/$u->{'LUE'}/$u->{'WUE'}/gs;
if ($self->{'LAZY'}) {
$text =~ s/$u->{'Uae'}/$u->{'Wae'}/gs;
$text =~ s/$u->{'Uoe'}/$u->{'Woe'}/gs;
$text =~ s/$u->{'Uue'}/$u->{'Wue'}/gs;
$text =~ s/$u->{'Usz'}/$u->{'Wsz'}/gs;
$text =~ s/$u->{'UAE'}/$u->{'WAE'}/gs;
$text =~ s/$u->{'UOE'}/$u->{'WOE'}/gs;
$text =~ s/$u->{'UUE'}/$u->{'WUE'}/gs;
}
}
elsif ($self->{'CONVERT'} eq "utf8") {
my $u = $self->{'UMLAUTE'};
if (!$u) { $u = $self->umlaute(); }
$text =~ s/$u->{'Lae'}/$u->{'Uae'}/gs;
$text =~ s/$u->{'Loe'}/$u->{'Uoe'}/gs;
$text =~ s/$u->{'Lue'}/$u->{'Uue'}/gs;
$text =~ s/$u->{'Lsz'}/$u->{'Usz'}/gs;
$text =~ s/$u->{'LAE'}/$u->{'UAE'}/gs;
$text =~ s/$u->{'LOE'}/$u->{'UOE'}/gs;
$text =~ s/$u->{'LUE'}/$u->{'UUE'}/gs;
if ($self->{'LAZY'}) {
$text =~ s/$u->{'Wae'}/$u->{'Uae'}/gs;
$text =~ s/$u->{'Woe'}/$u->{'Uoe'}/gs;
$text =~ s/$u->{'Wue'}/$u->{'Uue'}/gs;
$text =~ s/$u->{'Wsz'}/$u->{'Usz'}/gs;
$text =~ s/$u->{'WAE'}/$u->{'UAE'}/gs;
$text =~ s/$u->{'WOE'}/$u->{'UOE'}/gs;
$text =~ s/$u->{'WUE'}/$u->{'UUE'}/gs;
}
}
elsif ($self->{'CONVERT'} eq "linux") {
if ($self->{'LAZY'}) {
my $u = $self->{'UMLAUTE'};
if (!$u) { $u = $self->umlaute(); }
$text =~ s/$u->{'Uae'}/$u->{'Lae'}/gs;
$text =~ s/$u->{'Uoe'}/$u->{'Loe'}/gs;
$text =~ s/$u->{'Uue'}/$u->{'Lue'}/gs;
$text =~ s/$u->{'Usz'}/$u->{'Lsz'}/gs;
$text =~ s/$u->{'UAE'}/$u->{'LAE'}/gs;
$text =~ s/$u->{'UOE'}/$u->{'LOE'}/gs;
$text =~ s/$u->{'UUE'}/$u->{'LUE'}/gs;
$text =~ s/$u->{'Wae'}/$u->{'Lae'}/gs;
$text =~ s/$u->{'Woe'}/$u->{'Loe'}/gs;
$text =~ s/$u->{'Wue'}/$u->{'Lue'}/gs;
$text =~ s/$u->{'Wsz'}/$u->{'Lsz'}/gs;
$text =~ s/$u->{'WAE'}/$u->{'LAE'}/gs;
$text =~ s/$u->{'WOE'}/$u->{'LOE'}/gs;
$text =~ s/$u->{'WUE'}/$u->{'LUE'}/gs;
}
}
return($text);
}
#**************************************************************
sub c2 {
my $self = shift;
my $text = shift;
if ($self->{'CONVERT'} eq "win") {
my $u = $self->{'UMLAUTE'};
if (!$u) { $u = $self->umlaute(); }
$text =~ s/$u->{'Wae'}/$u->{'Lae'}/gs;
$text =~ s/$u->{'Woe'}/$u->{'Loe'}/gs;
$text =~ s/$u->{'Wue'}/$u->{'Lue'}/gs;
$text =~ s/$u->{'Wsz'}/$u->{'Lsz'}/gs;
$text =~ s/$u->{'WAE'}/$u->{'LAE'}/gs;
$text =~ s/$u->{'WOE'}/$u->{'LOE'}/gs;
$text =~ s/$u->{'WUE'}/$u->{'LUE'}/gs;
if ($self->{'LAZY'}) {
$text =~ s/$u->{'Uae'}/$u->{'Lae'}/gs;
$text =~ s/$u->{'Uoe'}/$u->{'Loe'}/gs;
$text =~ s/$u->{'Uue'}/$u->{'Lue'}/gs;
$text =~ s/$u->{'Usz'}/$u->{'Lsz'}/gs;
$text =~ s/$u->{'UAE'}/$u->{'LAE'}/gs;
$text =~ s/$u->{'UOE'}/$u->{'LOE'}/gs;
$text =~ s/$u->{'UUE'}/$u->{'LUE'}/gs;
}
}
elsif ($self->{'CONVERT'} eq "utf8") {
my $u = $self->{'UMLAUTE'};
if (!$u) { $u = $self->umlaute(); }
$text =~ s/$u->{'Uae'}/$u->{'Lae'}/gs;
$text =~ s/$u->{'Uoe'}/$u->{'Loe'}/gs;
$text =~ s/$u->{'Uue'}/$u->{'Lue'}/gs;
$text =~ s/$u->{'Usz'}/$u->{'Lsz'}/gs;
$text =~ s/$u->{'UAE'}/$u->{'LAE'}/gs;
$text =~ s/$u->{'UOE'}/$u->{'LOE'}/gs;
$text =~ s/$u->{'UUE'}/$u->{'LUE'}/gs;
if ($self->{'LAZY'}) {
$text =~ s/$u->{'Wae'}/$u->{'Lae'}/gs;
$text =~ s/$u->{'Woe'}/$u->{'Loe'}/gs;
$text =~ s/$u->{'Wue'}/$u->{'Lue'}/gs;
$text =~ s/$u->{'Wsz'}/$u->{'Lsz'}/gs;
$text =~ s/$u->{'WAE'}/$u->{'LAE'}/gs;
$text =~ s/$u->{'WOE'}/$u->{'LOE'}/gs;
$text =~ s/$u->{'WUE'}/$u->{'LUE'}/gs;
}
}
elsif ($self->{'CONVERT'} eq "linux") {
if ($self->{'LAZY'}) {
my $u = $self->{'UMLAUTE'};
if (!$u) { $u = $self->umlaute(); }
$text =~ s/$u->{'Uae'}/$u->{'Lae'}/gs;
$text =~ s/$u->{'Uoe'}/$u->{'Loe'}/gs;
$text =~ s/$u->{'Uue'}/$u->{'Lue'}/gs;
$text =~ s/$u->{'Usz'}/$u->{'Lsz'}/gs;
$text =~ s/$u->{'UAE'}/$u->{'LAE'}/gs;
$text =~ s/$u->{'UOE'}/$u->{'LOE'}/gs;
$text =~ s/$u->{'UUE'}/$u->{'LUE'}/gs;
$text =~ s/$u->{'Wae'}/$u->{'Lae'}/gs;
$text =~ s/$u->{'Woe'}/$u->{'Loe'}/gs;
$text =~ s/$u->{'Wue'}/$u->{'Lue'}/gs;
$text =~ s/$u->{'Wsz'}/$u->{'Lsz'}/gs;
$text =~ s/$u->{'WAE'}/$u->{'LAE'}/gs;
$text =~ s/$u->{'WOE'}/$u->{'LOE'}/gs;
$text =~ s/$u->{'WUE'}/$u->{'LUE'}/gs;
}
}
return($text);
}
#**************************************************************
#**************************************************************
sub xxnext {
my $self = shift;
my $session = $self->get_session();
if ($session->{'___BLOCK___'} =~ /^(.*)\,(\d+)$/) {
$session->{'___JUMP___'} = $1 . ",0";
}
}
#**************************************************************
sub xxlast {
my $self = shift;
my $name = shift;
my $session = $self->get_session();
if ($session->{'___BLOCK___'} =~ /^(.*)\,(\d+)$/) {
$session->{'___JUMP___'} = $1;
}
}
#**************************************************************
sub xxanswer {
my $self = shift;
my $mode = shift;
my $erg = shift;
if ($erg) {
$self->{'ANSWER_FUNC'} = $erg;
$self->{'ANSWER_SLEEP'} = shift;
$self->{'ANSWER_COM'} = shift;
$self->{'ANSWER_TIME'} = 0;
}
$erg = $self->{'ANSWER_TIME'} - time();
return($erg) if ($erg > 0);
$erg = $self->{'ANSWER_COM'}->get();
if ($erg > 0) {
if ($self->{'ANSWER_SLEEP'}) { $erg = $self->{'ANSWER_SLEEP'}; }
$self->{'ANSWER_TIME'} = time() + $erg;
return(["___GET___"]);
}
return(["___NEXT___",$self->{'ANSWER_FUNC'},@$erg]);
}
#*****************************************************************
sub xxget1 { my $self = shift;
my $erg = $self->{'PARENT'}->get(@_);
return($erg);
}
sub xxmsg1 { my $self = shift; return($self->{'OBJ'}->msg(@_)); }
#**************************************************************
sub xxreturn {
my $self = shift;
my $val = shift;
my $session = $self->get_session();
delete ($session->{'___BLOCK___'});
delete ($session->{'___BLOCK0___'});
delete ($session->{'___SLEEP___'});
delete ($session->{'___EXECUTED___'});
delete ($session->{'___JUMP___'});
delete ($session->{'___CALL___'});
return($val);
}
#**************************************************************
1;