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
This commit is contained in:
rudolfkoenig 2018-08-11 06:54:58 +00:00
parent 770280a055
commit 457cb2e9cc
4 changed files with 14 additions and 5 deletions

View File

@ -61,6 +61,7 @@ MQTT2_SERVER_Define($$)
Log3 $hash, 1, "$ret. Exiting."; Log3 $hash, 1, "$ret. Exiting.";
exit(1); exit(1);
} }
$hash->{NRCLIENTS} = 0;
$hash->{clients} = {}; $hash->{clients} = {};
$hash->{retain} = {}; $hash->{retain} = {};
InternalTimer(1, "MQTT2_SERVER_keepaliveChecker", $hash, 0); InternalTimer(1, "MQTT2_SERVER_keepaliveChecker", $hash, 0);
@ -89,12 +90,14 @@ MQTT2_SERVER_Undef($@)
my $ret = TcpServer_Close($hash); my $ret = TcpServer_Close($hash);
my $sname = $hash->{SNAME}; my $sname = $hash->{SNAME};
return undef if(!$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 if($hash->{lwt}) { # Last will
my ($tp, $val) = split(':', $hash->{lwt}, 2); my ($tp, $val) = split(':', $hash->{lwt}, 2);
MQTT2_SERVER_doPublish($defs{$sname}, $tp, $val, undef, MQTT2_SERVER_doPublish($shash, $tp, $val, undef, $hash->{cflags} & 0x20);
$hash->{cflags} & 0x20);
} }
return $ret; return $ret;
} }
@ -164,6 +167,7 @@ MQTT2_SERVER_Read($@)
my $nhash = TcpServer_Accept($hash, "MQTT2_SERVER"); my $nhash = TcpServer_Accept($hash, "MQTT2_SERVER");
return if(!$nhash); return if(!$nhash);
$nhash->{CD}->blocking(0); $nhash->{CD}->blocking(0);
$hash->{NRCLIENTS}++;
return; return;
} }

View File

@ -112,6 +112,7 @@ FileLog_Define($@)
} }
$hash->{FH} = $fh; $hash->{FH} = $fh;
$hash->{FD} = $fh->fileno() if($fh);
$hash->{REGEXP} = $a[3]; $hash->{REGEXP} = $a[3];
$hash->{logfile} = $a[2]; $hash->{logfile} = $a[2];
$hash->{currentlogfile} = $f; $hash->{currentlogfile} = $f;
@ -161,6 +162,7 @@ FileLog_Switch($)
return 0; return 0;
} }
$log->{FH} = $fh; $log->{FH} = $fh;
$log->{FD} = $fh->fileno();
setReadingsVal($log, "linesInTheFile", 0, TimeNow()); setReadingsVal($log, "linesInTheFile", 0, TimeNow());
return 1; return 1;
} }
@ -294,6 +296,7 @@ FileLog_Set($@)
} }
return "Can't open $cn" if(!defined($fh)); return "Can't open $cn" if(!defined($fh));
$hash->{FH} = $fh; $hash->{FH} = $fh;
$hash->{FD} = $fh->fileno();
} }
} elsif($cmd eq "addRegexpPart") { } elsif($cmd eq "addRegexpPart") {
@ -355,6 +358,7 @@ FileLog_Set($@)
rename("$mylogfile.new", $mylogfile); rename("$mylogfile.new", $mylogfile);
$fh = new IO::File(">>$mylogfile"); $fh = new IO::File(">>$mylogfile");
$hash->{FH} = $fh; $hash->{FH} = $fh;
$hash->{FD} = $fh->fileno();
$hash->{REGEXP} .= "|".$vh->{REGEXP}; $hash->{REGEXP} .= "|".$vh->{REGEXP};
$hash->{DEF} = $hash->{logfile} . " ". $hash->{REGEXP}; $hash->{DEF} = $hash->{logfile} . " ". $hash->{REGEXP};

View File

@ -34,7 +34,7 @@ TcpServer_Open($$$)
Blocking => ($^O =~ /Win/ ? 1 : 0), # Needed for .WRITEBUFFER@darwin Blocking => ($^O =~ /Win/ ? 1 : 0), # Needed for .WRITEBUFFER@darwin
ReuseAddr => 1 ReuseAddr => 1
); );
$hash->{STATE} = "Initialized"; readingsSingleUpdate($hash, "state", "Initialized", 0);
$hash->{SERVERSOCKET} = $hash->{IPV6} ? $hash->{SERVERSOCKET} = $hash->{IPV6} ?
IO::Socket::INET6->new(@opts) : IO::Socket::INET6->new(@opts) :
IO::Socket::INET->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{CD} = $clientinfo[0]; # sysread / close won't work on fileno
$nhash{TYPE} = $type; $nhash{TYPE} = $type;
$nhash{SSL} = $hash->{SSL}; $nhash{SSL} = $hash->{SSL};
$nhash{STATE} = "Connected"; readingsSingleUpdate(\%nhash, "state", "Connected", 0);
$nhash{SNAME} = $name; $nhash{SNAME} = $name;
$nhash{TEMPORARY} = 1; # Don't want to save it $nhash{TEMPORARY} = 1; # Don't want to save it
$nhash{BUF} = ""; $nhash{BUF} = "";

View File

@ -1386,6 +1386,7 @@ OpenLogfile($)
} }
LOG->autoflush(1); LOG->autoflush(1);
$logopened = 1; $logopened = 1;
$defs{global}{FD} = LOG->fileno();
return undef; return undef;
} }