From 457cb2e9cc53d376e827045843df1aaeda8ded79 Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Sat, 11 Aug 2018 06:54:58 +0000 Subject: [PATCH] 00_MQTT2_SERVER.pm: add NRCLIENTS, set state. global/FileLog: add FD (Forum #90145) git-svn-id: https://svn.fhem.de/fhem/trunk@17124 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_MQTT2_SERVER.pm | 10 +++++++--- fhem/FHEM/92_FileLog.pm | 4 ++++ fhem/FHEM/TcpServerUtils.pm | 4 ++-- fhem/fhem.pl | 1 + 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/fhem/FHEM/00_MQTT2_SERVER.pm b/fhem/FHEM/00_MQTT2_SERVER.pm index c381fe0b4..3ca8b486e 100644 --- a/fhem/FHEM/00_MQTT2_SERVER.pm +++ b/fhem/FHEM/00_MQTT2_SERVER.pm @@ -61,6 +61,7 @@ MQTT2_SERVER_Define($$) Log3 $hash, 1, "$ret. Exiting."; exit(1); } + $hash->{NRCLIENTS} = 0; $hash->{clients} = {}; $hash->{retain} = {}; InternalTimer(1, "MQTT2_SERVER_keepaliveChecker", $hash, 0); @@ -89,12 +90,14 @@ MQTT2_SERVER_Undef($@) my $ret = TcpServer_Close($hash); my $sname = $hash->{SNAME}; return undef if(!$sname); - delete($defs{$sname}{clients}{$hash->{NAME}}); + + my $shash = $defs{$sname}; + delete($shash->{clients}{$hash->{NAME}}); + $shash->{NRCLIENTS}--; if($hash->{lwt}) { # Last will my ($tp, $val) = split(':', $hash->{lwt}, 2); - MQTT2_SERVER_doPublish($defs{$sname}, $tp, $val, undef, - $hash->{cflags} & 0x20); + MQTT2_SERVER_doPublish($shash, $tp, $val, undef, $hash->{cflags} & 0x20); } return $ret; } @@ -164,6 +167,7 @@ MQTT2_SERVER_Read($@) my $nhash = TcpServer_Accept($hash, "MQTT2_SERVER"); return if(!$nhash); $nhash->{CD}->blocking(0); + $hash->{NRCLIENTS}++; return; } diff --git a/fhem/FHEM/92_FileLog.pm b/fhem/FHEM/92_FileLog.pm index 221b0202e..db907815d 100644 --- a/fhem/FHEM/92_FileLog.pm +++ b/fhem/FHEM/92_FileLog.pm @@ -112,6 +112,7 @@ FileLog_Define($@) } $hash->{FH} = $fh; + $hash->{FD} = $fh->fileno() if($fh); $hash->{REGEXP} = $a[3]; $hash->{logfile} = $a[2]; $hash->{currentlogfile} = $f; @@ -161,6 +162,7 @@ FileLog_Switch($) return 0; } $log->{FH} = $fh; + $log->{FD} = $fh->fileno(); setReadingsVal($log, "linesInTheFile", 0, TimeNow()); return 1; } @@ -294,6 +296,7 @@ FileLog_Set($@) } return "Can't open $cn" if(!defined($fh)); $hash->{FH} = $fh; + $hash->{FD} = $fh->fileno(); } } elsif($cmd eq "addRegexpPart") { @@ -355,6 +358,7 @@ FileLog_Set($@) rename("$mylogfile.new", $mylogfile); $fh = new IO::File(">>$mylogfile"); $hash->{FH} = $fh; + $hash->{FD} = $fh->fileno(); $hash->{REGEXP} .= "|".$vh->{REGEXP}; $hash->{DEF} = $hash->{logfile} . " ". $hash->{REGEXP}; diff --git a/fhem/FHEM/TcpServerUtils.pm b/fhem/FHEM/TcpServerUtils.pm index 91bce498a..119edd8d6 100644 --- a/fhem/FHEM/TcpServerUtils.pm +++ b/fhem/FHEM/TcpServerUtils.pm @@ -34,7 +34,7 @@ TcpServer_Open($$$) Blocking => ($^O =~ /Win/ ? 1 : 0), # Needed for .WRITEBUFFER@darwin ReuseAddr => 1 ); - $hash->{STATE} = "Initialized"; + readingsSingleUpdate($hash, "state", "Initialized", 0); $hash->{SERVERSOCKET} = $hash->{IPV6} ? IO::Socket::INET6->new(@opts) : IO::Socket::INET->new(@opts); @@ -145,7 +145,7 @@ TcpServer_Accept($$) $nhash{CD} = $clientinfo[0]; # sysread / close won't work on fileno $nhash{TYPE} = $type; $nhash{SSL} = $hash->{SSL}; - $nhash{STATE} = "Connected"; + readingsSingleUpdate(\%nhash, "state", "Connected", 0); $nhash{SNAME} = $name; $nhash{TEMPORARY} = 1; # Don't want to save it $nhash{BUF} = ""; diff --git a/fhem/fhem.pl b/fhem/fhem.pl index e7db4a6af..abcb9eb1d 100755 --- a/fhem/fhem.pl +++ b/fhem/fhem.pl @@ -1386,6 +1386,7 @@ OpenLogfile($) } LOG->autoflush(1); $logopened = 1; + $defs{global}{FD} = LOG->fileno(); return undef; }