MCPcopy Index your code
hub / github.com/FloatTech/ZeroBot-Plugin / singleServerScan

Function singleServerScan

plugin/minecraftobserver/minecraftobserver.go:234–301  ·  view source on GitHub ↗

singleServerScan 单个服务器状态扫描

(oldSubStatus *serverStatus)

Source from the content-addressed store, hash-verified

232
233// singleServerScan 单个服务器状态扫描
234func singleServerScan(oldSubStatus *serverStatus) (changed bool, notifyMsg message.Message, err error) {
235 notifyMsg = make(message.Message, 0)
236 newSubStatus := &serverStatus{}
237 // 获取服务器状态 & 检查是否需要更新
238 rawServerStatus, err := getMinecraftServerStatus(oldSubStatus.ServerAddr)
239 if err != nil {
240 // logrus.Warnln(logPrefix+"getMinecraftServerStatus error: ", err)
241 err = nil
242 // 计数器没有超限,增加计数器并跳过
243 if cnt, ts := addPingServerUnreachableCounter(oldSubStatus.ServerAddr, time.Now()); cnt < pingServerUnreachableCounterThreshold &&
244 time.Since(ts) < pingServerUnreachableCounterTimeThreshold {
245 // logrus.Warnln(logPrefix+"server ", oldSubStatus.ServerAddr, " unreachable, counter: ", cnt, " ts:", ts)
246 return
247 }
248 // 不可达计数器已经超限,则更新服务器状态
249 // 深拷贝,设置PingDelay为不可达
250 newSubStatus = oldSubStatus.deepCopy()
251 newSubStatus.PingDelay = pingDelayUnreachable
252 } else {
253 newSubStatus = rawServerStatus.genServerSubscribeSchema(oldSubStatus.ServerAddr, oldSubStatus.ID)
254 }
255 if newSubStatus == nil {
256 // logrus.Errorln(logPrefix + "newSubStatus is nil")
257 return
258 }
259 // 检查是否有订阅信息变化
260 if oldSubStatus.isServerStatusSpecChanged(newSubStatus) {
261 // logrus.Warnf(logPrefix+"server subscribe spec changed: (%+v) -> (%+v)", oldSubStatus, newSubStatus)
262 changed = true
263 // 更新数据库
264 err = dbInstance.updateServerStatus(newSubStatus)
265 if err != nil {
266 // logrus.Errorln(logPrefix+"updateServerSubscribeStatus error: ", err)
267 return
268 }
269 // 纯文本信息
270 notifyMsg = append(notifyMsg, message.Text(formatSubStatusChangeText(oldSubStatus, newSubStatus)))
271 // 如果有图标变更
272 if oldSubStatus.FaviconMD5 != newSubStatus.FaviconMD5 {
273 // 有图标变更
274 notifyMsg = append(notifyMsg, message.Text("\n-----[图标变更]-----\n"))
275 // 旧图标
276 notifyMsg = append(notifyMsg, message.Text("[旧]\n"))
277 if oldSubStatus.FaviconRaw != "" {
278 notifyMsg = append(notifyMsg, message.Image(oldSubStatus.FaviconRaw.toBase64String()))
279 } else {
280 notifyMsg = append(notifyMsg, message.Text("(空)\n"))
281 }
282 // 新图标
283 notifyMsg = append(notifyMsg, message.Text("[新]\n"))
284 if newSubStatus.FaviconRaw != "" {
285 notifyMsg = append(notifyMsg, message.Image(newSubStatus.FaviconRaw.toBase64String()))
286 } else {
287 notifyMsg = append(notifyMsg, message.Text("(空)\n"))
288 }
289 }
290 notifyMsg = append(notifyMsg, message.Text("\n-------最新状态-------\n"))
291 // 服务状态

Callers 2

initFunction · 0.85
Test_singleServerScanFunction · 0.85

Calls 10

getMinecraftServerStatusFunction · 0.85
deepCopyMethod · 0.80
updateServerStatusMethod · 0.80
toBase64StringMethod · 0.80

Tested by 1

Test_singleServerScanFunction · 0.68