如何在 Hammerspoon 初始化中实现周期性任务?
How to implement periodic task in Hammerspoon initialization?
我认为当我的网络连接断开或恢复时收到通知会很棒,所以我把它放在我的 Hammerspoon 中 init.lua:
ping = nil
previousStatus = nil
function pingCallback(server, eventType, ...)
hs.alert.show(eventType)
if eventType == "receivedPacket"
then
newStatus = "success"
else
if eventType == "didFail" or eventType == "sendPacketFailed"
then
newStatus = "failure"
end
end
if not (newStatus == previousStatus)
then
hs.alert.show(string.format("Network status changed to %s", newStatus))
previousStatus = newStatus
end
end
while(true)
do
ping = hs.network.ping.ping("google.com", 5, 1.0, 2.0, "any", pingCallback)
os.execute("sleep 15")
end
问题是睡眠。它让 Hammerspoon 自己睡觉,使其挂起。我真正需要的是一个线程或计时器,或者启动一个不同的 OS 进程。我该怎么办?
Hammerspoon 有 a timer。您可以将 while
循环替换为:
function pingGoogle()
hs.network.ping.ping("google.com", 5, 1.0, 2.0, "any", pingCallback)
end
googlePinger = hs.timer.new(15, pingGoogle)
googlePinger:start()
其他一些需要考虑的事情:
- Start/stop 基于 Network Reachability 的 ping 计时器。如果到 ping 目标的路由不存在,则无需使用 ping 进行轮询。
- HTTP GET 到大供应商用于他们自己的网络连接检查的端点。
- Google:
http://clients3.google.com/generate_204
- 应该有一个 204 响应代码(我看到使用它的检查器也检查响应内容长度为 0。)
- Microsoft:
http://www.msftncsi.com/ncsi.txt
- 应该有一个 200 响应并且响应正文应该显示为 Microsoft NCSI
。
我认为当我的网络连接断开或恢复时收到通知会很棒,所以我把它放在我的 Hammerspoon 中 init.lua:
ping = nil
previousStatus = nil
function pingCallback(server, eventType, ...)
hs.alert.show(eventType)
if eventType == "receivedPacket"
then
newStatus = "success"
else
if eventType == "didFail" or eventType == "sendPacketFailed"
then
newStatus = "failure"
end
end
if not (newStatus == previousStatus)
then
hs.alert.show(string.format("Network status changed to %s", newStatus))
previousStatus = newStatus
end
end
while(true)
do
ping = hs.network.ping.ping("google.com", 5, 1.0, 2.0, "any", pingCallback)
os.execute("sleep 15")
end
问题是睡眠。它让 Hammerspoon 自己睡觉,使其挂起。我真正需要的是一个线程或计时器,或者启动一个不同的 OS 进程。我该怎么办?
Hammerspoon 有 a timer。您可以将 while
循环替换为:
function pingGoogle()
hs.network.ping.ping("google.com", 5, 1.0, 2.0, "any", pingCallback)
end
googlePinger = hs.timer.new(15, pingGoogle)
googlePinger:start()
其他一些需要考虑的事情:
- Start/stop 基于 Network Reachability 的 ping 计时器。如果到 ping 目标的路由不存在,则无需使用 ping 进行轮询。
- HTTP GET 到大供应商用于他们自己的网络连接检查的端点。
- Google:
http://clients3.google.com/generate_204
- 应该有一个 204 响应代码(我看到使用它的检查器也检查响应内容长度为 0。) - Microsoft:
http://www.msftncsi.com/ncsi.txt
- 应该有一个 200 响应并且响应正文应该显示为Microsoft NCSI
。
- Google: