mirror of
https://github.com/naruxde/revpimodio2.git
synced 2025-11-08 22:03:53 +01:00
Bugfix: prefire mit as_thread hatte Fehler bei Übergabe in Queue
Netzwerkklassen zeigen über .config_changed an, dass Neuinstanzierung nötig ist _connect von NetFH löst ConfigChanged-Exception aus
This commit is contained in:
@@ -122,7 +122,7 @@ Thread
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Class Attributes</h3>
|
||||
<table>
|
||||
<tr><td>__slots__</td></tr><tr><td>closed</td></tr><tr><td>name</td></tr><tr><td>reconnecting</td></tr><tr><td>timeout</td></tr>
|
||||
<tr><td>__slots__</td></tr><tr><td>closed</td></tr><tr><td>config_changed</td></tr><tr><td>name</td></tr><tr><td>reconnecting</td></tr><tr><td>timeout</td></tr>
|
||||
</table>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Class Methods</h3>
|
||||
@@ -163,6 +163,9 @@ Methods</h3>
|
||||
<td><a style="color:#0000FF" href="#NetFH.get_closed">get_closed</a></td>
|
||||
<td>Pruefen ob Verbindung geschlossen ist.</td>
|
||||
</tr><tr>
|
||||
<td><a style="color:#0000FF" href="#NetFH.get_config_changed">get_config_changed</a></td>
|
||||
<td>Pruefen ob RevPi Konfiguration geaendert wurde.</td>
|
||||
</tr><tr>
|
||||
<td><a style="color:#0000FF" href="#NetFH.get_name">get_name</a></td>
|
||||
<td>Verbindugnsnamen zurueckgeben.</td>
|
||||
</tr><tr>
|
||||
@@ -307,6 +310,17 @@ Pruefen ob Verbindung geschlossen ist.
|
||||
<dd>
|
||||
True, wenn Verbindung geschlossen ist
|
||||
</dd>
|
||||
</dl><a NAME="NetFH.get_config_changed" ID="NetFH.get_config_changed"></a>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
NetFH.get_config_changed</h3>
|
||||
<b>get_config_changed</b>(<i></i>)
|
||||
<p>
|
||||
Pruefen ob RevPi Konfiguration geaendert wurde.
|
||||
</p><dl>
|
||||
<dt>Returns:</dt>
|
||||
<dd>
|
||||
True, wenn RevPi Konfiguration geaendert ist
|
||||
</dd>
|
||||
</dl><a NAME="NetFH.get_name" ID="NetFH.get_name"></a>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
NetFH.get_name</h3>
|
||||
@@ -484,7 +498,7 @@ _RevPiModIO
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Class Attributes</h3>
|
||||
<table>
|
||||
<tr><td>__slots__</td></tr><tr><td>reconnecting</td></tr>
|
||||
<tr><td>__slots__</td></tr><tr><td>config_changed</td></tr><tr><td>reconnecting</td></tr>
|
||||
</table>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
Class Methods</h3>
|
||||
@@ -510,6 +524,9 @@ Methods</h3>
|
||||
<td><a style="color:#0000FF" href="#RevPiNetIO.exit">exit</a></td>
|
||||
<td>Beendet mainloop() und optional autorefresh.</td>
|
||||
</tr><tr>
|
||||
<td><a style="color:#0000FF" href="#RevPiNetIO.get_config_changed">get_config_changed</a></td>
|
||||
<td>Pruefen ob RevPi Konfiguration geaendert wurde.</td>
|
||||
</tr><tr>
|
||||
<td><a style="color:#0000FF" href="#RevPiNetIO.get_jconfigrsc">get_jconfigrsc</a></td>
|
||||
<td>Laedt die piCotry Konfiguration und erstellt ein <class 'dict'>.</td>
|
||||
</tr><tr>
|
||||
@@ -595,6 +612,20 @@ Beendet mainloop() und optional autorefresh.
|
||||
<dd>
|
||||
<a style="color:#0000FF" href="#RevPiModIO.exit(...)">#RevPiModIO.exit(...)</a>
|
||||
</dd>
|
||||
</dl><a NAME="RevPiNetIO.get_config_changed" ID="RevPiNetIO.get_config_changed"></a>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
RevPiNetIO.get_config_changed</h3>
|
||||
<b>get_config_changed</b>(<i></i>)
|
||||
<p>
|
||||
Pruefen ob RevPi Konfiguration geaendert wurde.
|
||||
</p><p>
|
||||
In diesem Fall ist die Verbindung geschlossen und RevPiNetIO muss
|
||||
neu instanziert werden.
|
||||
</p><dl>
|
||||
<dt>Returns:</dt>
|
||||
<dd>
|
||||
True, wenn RevPi Konfiguration geaendert ist
|
||||
</dd>
|
||||
</dl><a NAME="RevPiNetIO.get_jconfigrsc" ID="RevPiNetIO.get_jconfigrsc"></a>
|
||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||
RevPiNetIO.get_jconfigrsc</h3>
|
||||
@@ -612,6 +643,9 @@ RevPiNetIO.get_reconnecting</h3>
|
||||
<b>get_reconnecting</b>(<i></i>)
|
||||
<p>
|
||||
Interner reconnect aktiv wegen Netzwerkfehlern.
|
||||
</p><p>
|
||||
Das Modul versucht intern die Verbindung neu herzustellen. Es ist
|
||||
kein weiteres Zutun noetig.
|
||||
</p><dl>
|
||||
<dt>Returns:</dt>
|
||||
<dd>
|
||||
|
||||
@@ -190,8 +190,10 @@ revpimodio2.netio.NetFH._direct_send?5(send_bytes, recv_count)
|
||||
revpimodio2.netio.NetFH.clear_dirtybytes?4(position=None)
|
||||
revpimodio2.netio.NetFH.close?4()
|
||||
revpimodio2.netio.NetFH.closed?7
|
||||
revpimodio2.netio.NetFH.config_changed?7
|
||||
revpimodio2.netio.NetFH.flush?4()
|
||||
revpimodio2.netio.NetFH.get_closed?4()
|
||||
revpimodio2.netio.NetFH.get_config_changed?4()
|
||||
revpimodio2.netio.NetFH.get_name?4()
|
||||
revpimodio2.netio.NetFH.get_reconnecting?4()
|
||||
revpimodio2.netio.NetFH.get_timeout?4()
|
||||
@@ -211,8 +213,10 @@ revpimodio2.netio.NetFH.write?4(bytebuff)
|
||||
revpimodio2.netio.NetFH?1(address, check_replace_ios, timeout=500)
|
||||
revpimodio2.netio.RevPiNetIO._create_myfh?5()
|
||||
revpimodio2.netio.RevPiNetIO._get_cpreplaceio?5()
|
||||
revpimodio2.netio.RevPiNetIO.config_changed?7
|
||||
revpimodio2.netio.RevPiNetIO.disconnect?4()
|
||||
revpimodio2.netio.RevPiNetIO.exit?4(full=True)
|
||||
revpimodio2.netio.RevPiNetIO.get_config_changed?4()
|
||||
revpimodio2.netio.RevPiNetIO.get_jconfigrsc?4()
|
||||
revpimodio2.netio.RevPiNetIO.get_reconnecting?4()
|
||||
revpimodio2.netio.RevPiNetIO.net_cleardefaultvalues?4(device=None)
|
||||
|
||||
@@ -289,7 +289,7 @@ class ProcimgWriter(Thread):
|
||||
|
||||
"""
|
||||
|
||||
__slots__ = "__dict_delay", "__eventth", "__eventqth", "__eventwork", \
|
||||
__slots__ = "__dict_delay", "__eventth", "_eventqth", "__eventwork", \
|
||||
"_adjwait", "_eventq", "_ioerror", "_maxioerrors", "_modio", \
|
||||
"_refresh", "_work", "daemon", "lck_refresh", "newdata"
|
||||
|
||||
@@ -299,7 +299,7 @@ class ProcimgWriter(Thread):
|
||||
super().__init__()
|
||||
self.__dict_delay = {}
|
||||
self.__eventth = Thread(target=self.__exec_th)
|
||||
self.__eventqth = queue.Queue()
|
||||
self._eventqth = queue.Queue()
|
||||
self.__eventwork = False
|
||||
self._adjwait = 0
|
||||
self._eventq = queue.Queue()
|
||||
@@ -340,7 +340,7 @@ class ProcimgWriter(Thread):
|
||||
or regfunc.edge == FALLING and not boolor:
|
||||
if regfunc.delay == 0:
|
||||
if regfunc.as_thread:
|
||||
self.__eventqth.put(
|
||||
self._eventqth.put(
|
||||
(regfunc, io_event._name, io_event.value),
|
||||
False
|
||||
)
|
||||
@@ -363,7 +363,7 @@ class ProcimgWriter(Thread):
|
||||
for regfunc in dev._dict_events[io_event]:
|
||||
if regfunc.delay == 0:
|
||||
if regfunc.as_thread:
|
||||
self.__eventqth.put(
|
||||
self._eventqth.put(
|
||||
(regfunc, io_event._name, io_event.value),
|
||||
False
|
||||
)
|
||||
@@ -390,7 +390,7 @@ class ProcimgWriter(Thread):
|
||||
"""Laeuft als Thread, der Events als Thread startet."""
|
||||
while self.__eventwork:
|
||||
try:
|
||||
tup_fireth = self.__eventqth.get(timeout=1)
|
||||
tup_fireth = self._eventqth.get(timeout=1)
|
||||
th = EventCallback(
|
||||
tup_fireth[0].func, tup_fireth[1], tup_fireth[2]
|
||||
)
|
||||
@@ -415,7 +415,7 @@ class ProcimgWriter(Thread):
|
||||
self.__eventwork = value
|
||||
if not value:
|
||||
# Nur leeren beim deaktivieren
|
||||
self.__eventqth = queue.Queue()
|
||||
self._eventqth = queue.Queue()
|
||||
self._eventq = queue.Queue()
|
||||
self.__dict_delay = {}
|
||||
|
||||
@@ -533,7 +533,7 @@ class ProcimgWriter(Thread):
|
||||
if self.__dict_delay[tup_fire] <= 0:
|
||||
# Verzögertes Event übernehmen und löschen
|
||||
if tup_fire[0].as_thread:
|
||||
self.__eventqth.put(tup_fire, False)
|
||||
self._eventqth.put(tup_fire, False)
|
||||
else:
|
||||
self._eventq.put(tup_fire, False)
|
||||
del self.__dict_delay[tup_fire]
|
||||
|
||||
@@ -850,7 +850,7 @@ class RevPiModIO(object):
|
||||
or regfunc.edge == RISING and io.value \
|
||||
or regfunc.edge == FALLING and not io.value:
|
||||
if regfunc.as_thread:
|
||||
self._imgwriter.__eventqth.put(
|
||||
self._imgwriter._eventqth.put(
|
||||
(regfunc, io._name, io.value), False
|
||||
)
|
||||
else:
|
||||
|
||||
@@ -187,6 +187,9 @@ class NetFH(Thread):
|
||||
"configuration on revolution pi was changed")
|
||||
else:
|
||||
self.__replace_ios_h = byte_buff[16:]
|
||||
except ConfigChanged:
|
||||
so.close()
|
||||
raise
|
||||
except Exception:
|
||||
so.close()
|
||||
else:
|
||||
@@ -228,9 +231,7 @@ class NetFH(Thread):
|
||||
"""Entfernt die konfigurierten Dirtybytes vom RevPi Slave.
|
||||
@param position Startposition der Dirtybytes"""
|
||||
if self.__config_changed:
|
||||
raise ConfigChanged(
|
||||
"configuration on revolution pi was changed"
|
||||
)
|
||||
raise ConfigChanged("configuration on revolution pi was changed")
|
||||
if self.__sockend.is_set():
|
||||
raise ValueError("I/O operation on closed file")
|
||||
|
||||
@@ -301,9 +302,7 @@ class NetFH(Thread):
|
||||
def flush(self):
|
||||
"""Schreibpuffer senden."""
|
||||
if self.__config_changed:
|
||||
raise ConfigChanged(
|
||||
"configuration on revolution pi was changed"
|
||||
)
|
||||
raise ConfigChanged("configuration on revolution pi was changed")
|
||||
if self.__sockend.is_set():
|
||||
raise ValueError("flush of closed file")
|
||||
|
||||
@@ -337,6 +336,11 @@ class NetFH(Thread):
|
||||
@return True, wenn Verbindung geschlossen ist"""
|
||||
return self.__sockend.is_set()
|
||||
|
||||
def get_config_changed(self):
|
||||
"""Pruefen ob RevPi Konfiguration geaendert wurde.
|
||||
@return True, wenn RevPi Konfiguration geaendert ist"""
|
||||
return self.__config_changed
|
||||
|
||||
def get_name(self):
|
||||
"""Verbindugnsnamen zurueckgeben.
|
||||
@return <class 'str'> IP:PORT"""
|
||||
@@ -621,6 +625,7 @@ class NetFH(Thread):
|
||||
return len(bytebuff)
|
||||
|
||||
closed = property(get_closed)
|
||||
config_changed = property(get_config_changed)
|
||||
name = property(get_name)
|
||||
reconnecting = property(get_reconnecting)
|
||||
timeout = property(get_timeout, set_timeout)
|
||||
@@ -755,6 +760,15 @@ class RevPiNetIO(_RevPiModIO):
|
||||
except ConfigChanged:
|
||||
pass
|
||||
|
||||
def get_config_changed(self):
|
||||
"""Pruefen ob RevPi Konfiguration geaendert wurde.
|
||||
|
||||
In diesem Fall ist die Verbindung geschlossen und RevPiNetIO muss
|
||||
neu instanziert werden.
|
||||
|
||||
@return True, wenn RevPi Konfiguration geaendert ist"""
|
||||
return self._myfh.config_changed
|
||||
|
||||
def get_jconfigrsc(self):
|
||||
"""Laedt die piCotry Konfiguration und erstellt ein <class 'dict'>.
|
||||
@return <class 'dict'> der piCtory Konfiguration"""
|
||||
@@ -765,6 +779,10 @@ class RevPiNetIO(_RevPiModIO):
|
||||
|
||||
def get_reconnecting(self):
|
||||
"""Interner reconnect aktiv wegen Netzwerkfehlern.
|
||||
|
||||
Das Modul versucht intern die Verbindung neu herzustellen. Es ist
|
||||
kein weiteres Zutun noetig.
|
||||
|
||||
@return True, wenn reconnect aktiv"""
|
||||
return self._myfh.reconnecting
|
||||
|
||||
@@ -835,6 +853,7 @@ class RevPiNetIO(_RevPiModIO):
|
||||
dev._offset + dev._slc_out.start, dirtybytes
|
||||
)
|
||||
|
||||
config_changed = property(get_config_changed)
|
||||
reconnecting = property(get_reconnecting)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user