如何在 Hammerspoon 初始化中实现周期性任务?

Posted

技术标签:

【中文标题】如何在 Hammerspoon 初始化中实现周期性任务?【英文标题】:How to implement periodic task in Hammerspoon initialization? 【发布时间】:2020-09-12 21:56:18 【问题描述】:

我认为当我的网络连接中断或恢复时收到通知会很棒,所以我把它放在我的 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 自己睡觉,让它挂起。我真正需要的是一个线程或计时器,或者可能启动一个不同的操作系统进程。我该怎么办?

【问题讨论】:

【参考方案1】:

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()

需要考虑的其他事项:

根据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 初始化中实现周期性任务?的主要内容,如果未能解决你的问题,请参考以下文章

如何在express中实现resolveType函数/初始化graphQL服务器

如何在 Angular 6 中实现 Keycloak?

如何在 Spark UDAF 中实现 fastutils 映射?

如何在 C 中实现链表?

如何在 ktor 中实现 dns-sd

SwiftUI:如何在 macOS 应用程序中实现编辑菜单