0

我尝试为 Hexchat IRC 客户端编写一个简单的 Python 插件。但是,它似乎不是线程安全的,并导致 Hexchat 崩溃。

__module_name__ = "Demo"
__module_version__ = "1.0"
__module_description__ = "Demo plug-in"

import hexchat
from threading import Thread
from time import sleep

def sleep10seconds():
    # In the real script, I open here an HTTP URL on the web server that is
    # running on the IRC server host to un-ban the IP address.    
    hexchat.prnt("before sleep")
    sleep(10)
    hexchat.prnt("sleep end")
    # Here I reconnect to the IRC server. If the un-ban was
    # successful, everything should be fine now. If it failed,
    # a new "Disconnect" print event happens, and the whole process
    # (disconnected_cb -> sleep10seconds) happens again.
    hexchat.command("server " + hexchat.get_info("host"))
    return

# This function is called when a "disconnected" print event was found
def disconnected_cb(word, word_eol, userdata):
    # The sleep() needs to run in a separate thread. Otherwise, the UI
    # freezes for the time of the sleep()
    myThread = Thread(target=sleep10seconds)
    myThread.start()
    return hexchat.EAT_NONE

hexchat.command("discon")
hexchat.command("server " + hexchat.get_info("host"))
hexchat.hook_print("Disconnected", disconnected_cb)

我读了一些关于线程安全的文章,但我不是开发人员。我无法弄清楚我需要改变什么。你能帮我么?谢谢。

编辑:关于我尝试完成的一些附加信息:插件将是我在这里安装的旧且非常奇怪的安装的临时解决方法。在分公司,我们有一台制造机器。很久以前,有人想监控这台机器。该公司使用 IRC 进行内部通信,他决定设置一台装有 Red Hat Linux 8(是 RHL,不是 RHEL)的机器进行监控。他编写了一个软件,可以从制造机器中检索错误并将它们发布到运行在同一主机上的 IRC 服务器的通道中。

分公司通过VPN连接到我们的办公室,但是分公司的互联网连接速度很慢,而且最近不太稳定。这导致与远程 IRC 服务器的连接有时会在短时间内多次丢失,并且在重新连接后,IRC 服务器会暂时禁止客户端 IP 地址。因此,这些客户端无法监控状态。开发人员还创建了一个 CGI 脚本来取消禁止打开 CGI 脚本 URL 的客户端的 IP。

整个 IRC 主机和在该主机上运行的其他软件大多是一个没有人愿意触摸的黑匣子。出于这个原因,Hexchat 插件似乎是一个很好的客户端解决方法,直到制造机器和整个设置将在明年年底之前被替换(希望)。

当 IRC 服务器封禁和断开 IP 地址时,插件应通过 HTTP 打开 CGI 脚本地址以解除封禁。CGI 脚本只会在您打开 URL 时立即返回“done”,但此时解禁过程尚未完成。此外,它经常失败(~50%)。这就是为什么插件应该等待 10 秒以确保后台进程完成,然后重新连接到服务器。如果禁令仍然有效,例如因为后台进程在服务器上失败,客户端将再次断开连接,再次发生“断开连接”事件,插件的整个过程将重新开始。

抱歉解释太长了,但是我在这里找到的这个旧设置太奇怪了,需要更多的文字来解释我为什么要编写这样一个 Hexchat 插件。然而,插件将简化一些人的生活,直到有一天我们拥有一台带有专业监控解决方案的新制造机器。:-)

4

0 回答 0