@@ -1,6 +1,7 @@
package task
import (
"context"
"fmt"
"gitee.ltd/lxh/logger/log"
jsoniter "github.com/json-iterator/go"
@@ -9,6 +10,7 @@ import (
"time"
"wireguard-ui/component"
"wireguard-ui/global/client"
"wireguard-ui/global/constant"
"wireguard-ui/model"
"wireguard-ui/service"
"wireguard-ui/utils"
@@ -69,29 +71,46 @@ func (c networkClient) ClientOfflineNotify() {
online := time . Since ( peer . LastHandshakeTime ) . Minutes ( ) < 3
log . Debugf ( "客户端[%v]在线状态: %v, 离线时间: %v" , clientName , online , time . Since ( peer . LastHandshakeTime ) . Minutes ( ) )
var ipAllocation string
for _ , iaip := range peer . AllowedIPs {
ipAllocation += iaip . String ( ) + ","
}
// 去除一下最右边的逗号
if len ( ipAllocation ) > 0 {
ipAllocation = strings . TrimRight ( ipAllocation , "," )
}
// 如果存在,判断离线时间
if ! online {
var ipAllocation string
for _ , iaip := range peer . AllowedIPs {
ipAllocation += iaip . String ( ) + ","
}
// 去除一下最右边的逗号
if len ( ipAllocation ) > 0 {
ipAllocation = strings . TrimRight ( ipAllocation , "," )
}
// 已经离线,发送通知
msg := fmt . Sprintf ( `
[离线通知] \n
客户端名称 : %v \n
客户端IP : %v \n
最后在线时间 : %v
` , clientName , ipAllocation , peer . LastHandshakeTime . Format ( "2006-01-02 15:04:05" ) )
msg := fmt . Sprintf ( ` [离线通知]
客户端名称 : %v
客户端IP : %v
最后在线时间 : %v ` , clientName , ipAllocation , peer . LastHandshakeTime . Format ( "2006-01-02 15:04:05" ) )
err := utils . WechatNotify ( code ) . SendTextMessage ( msg )
if err != nil {
log . Errorf ( "微信消息[%v]通知失败: %v" , msg , err . Error ( ) )
continue
}
// 离线了,设置离线标识
client . Redis . Set ( context . Background ( ) , fmt . Sprintf ( "%s%s" , constant . ClientOffline , utils . Hash ( ) . MD5 ( ipAllocation ) ) , true , 0 )
} else {
// 判断是否存在缓存
if client . Redis . Exists ( context . Background ( ) , fmt . Sprintf ( "%s%s" , constant . ClientOffline , utils . Hash ( ) . MD5 ( ipAllocation ) ) ) . Val ( ) > 0 {
// 存在,删除离线标识
client . Redis . Del ( context . Background ( ) , fmt . Sprintf ( "%s%s" , constant . ClientOffline , utils . Hash ( ) . MD5 ( ipAllocation ) ) )
// 微信通知该客户端已经上线
msg := fmt . Sprintf ( ` [上线通知]
客户端名称 : %v
客户端IP : %v
最后在线时间 : %v ` , clientName , ipAllocation , peer . LastHandshakeTime . Format ( "2006-01-02 15:04:05" ) )
err := utils . WechatNotify ( code ) . SendTextMessage ( msg )
if err != nil {
log . Errorf ( "微信消息[%v]通知失败: %v" , msg , err . Error ( ) )
continue
}
}
}
}