forked from ProjectWIND/ProjectWIND
144 lines
3.5 KiB
Go
144 lines
3.5 KiB
Go
package core
|
||
|
||
import (
|
||
"ProjectWIND/LOG"
|
||
"ProjectWIND/wba"
|
||
"encoding/json"
|
||
"strconv"
|
||
"strings"
|
||
)
|
||
|
||
type toolsAPI struct{}
|
||
|
||
//二、LOG模块
|
||
|
||
/*
|
||
关于LOG模块的说明
|
||
|
||
1.日志模块级别分为TRACE、DEBUG、INFO、NOTICE、WARN、ERROR五个级别,默认级别为INFO。
|
||
|
||
2.日志模块提供LogWith方法,可以自定义日志级别。
|
||
|
||
3.日志模块提供Log方法,默认日志级别为INFO。
|
||
*/
|
||
|
||
// LogWith 打印日志(带级别)
|
||
//
|
||
// 参数:
|
||
// - level: 日志级别,支持"TRACE"、"DEBUG"、"INFO"、"NOTICE"、 "WARN"、"ERROR"
|
||
// - content: 日志内容
|
||
// - args: 可选参数,用于格式化日志内容
|
||
//
|
||
// 返回值:
|
||
// - 无
|
||
func (t *toolsAPI) LogWith(level string, content string, args ...interface{}) {
|
||
level = strings.ToLower(level)
|
||
switch level {
|
||
case "trace":
|
||
LOG.Trace(content, args...)
|
||
return
|
||
case "debug":
|
||
LOG.Debug(content, args...)
|
||
return
|
||
case "notice":
|
||
LOG.Notice(content, args...)
|
||
return
|
||
case "warn":
|
||
LOG.Warn(content, args...)
|
||
return
|
||
case "error":
|
||
LOG.Error(content, args...)
|
||
return
|
||
default:
|
||
LOG.Info(content, args...)
|
||
return
|
||
}
|
||
}
|
||
|
||
// Log 打印日志
|
||
//
|
||
// 参数:
|
||
// - content: 日志内容
|
||
// - args: 可选参数,用于格式化日志内容
|
||
func (t *toolsAPI) Log(content string, args ...interface{}) {
|
||
LOG.Info(content, args...)
|
||
}
|
||
|
||
// MsgUnmarshal 解析消息
|
||
//
|
||
// 参数:
|
||
// - messageJSON: 从数据库中获取的JSON序列化后的消息字符串
|
||
//
|
||
// 返回值:
|
||
// - wba.MessageEventInfo: 解析后的消息事件信息,解析失败时返回空结构体
|
||
func (t *toolsAPI) MsgUnmarshal(messageJSON string) (msg wba.MessageEventInfo) {
|
||
err := json.Unmarshal([]byte(messageJSON), &msg)
|
||
if err != nil {
|
||
return wba.MessageEventInfo{}
|
||
}
|
||
return msg
|
||
}
|
||
|
||
func (t *toolsAPI) SessionLabelAnalysis(sessionLabel wba.SessionLabel) wba.SessionInfo {
|
||
platform := strings.Split(sessionLabel, ":")[0]
|
||
sessionTypeAndId := strings.Split(sessionLabel, ":")[1]
|
||
sessionType := strings.Split(sessionTypeAndId, "-")[0]
|
||
sessionId := strings.Split(sessionTypeAndId, "-")[1]
|
||
Id, err := strconv.ParseInt(sessionId, 10, 64)
|
||
if err != nil {
|
||
return wba.SessionInfo{}
|
||
}
|
||
return wba.SessionInfo{
|
||
Platform: platform,
|
||
SessionType: sessionType,
|
||
SessionId: Id,
|
||
}
|
||
}
|
||
|
||
func (t *toolsAPI) VersionCompare(version1, version2 wba.VersionLabel) int {
|
||
version1Info := VersionLabelAnalysis(version1)
|
||
version2Info := VersionLabelAnalysis(version2)
|
||
if version1Info.BigVersion < version2Info.BigVersion {
|
||
return -1
|
||
} else if version1Info.BigVersion > version2Info.BigVersion {
|
||
return 1
|
||
} else {
|
||
if version1Info.SmallVersion < version2Info.SmallVersion {
|
||
return -1
|
||
} else if version1Info.SmallVersion > version2Info.SmallVersion {
|
||
return 1
|
||
} else {
|
||
if version1Info.FixVersion < version2Info.FixVersion {
|
||
return -1
|
||
} else if version1Info.FixVersion > version2Info.FixVersion {
|
||
return 1
|
||
} else {
|
||
return 0
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
func VersionLabelAnalysis(versionLabel wba.VersionLabel) wba.VersionInfo {
|
||
version := strings.Split(versionLabel, ".")
|
||
bigVersion, err := strconv.ParseUint(version[0], 10, 8)
|
||
if err != nil {
|
||
return wba.VersionInfo{}
|
||
}
|
||
smallVersion, err := strconv.ParseUint(version[1], 10, 8)
|
||
if err != nil {
|
||
return wba.VersionInfo{}
|
||
}
|
||
fixVersion, err := strconv.ParseUint(version[2], 10, 8)
|
||
if err != nil {
|
||
return wba.VersionInfo{}
|
||
}
|
||
return wba.VersionInfo{
|
||
BigVersion: uint8(bigVersion),
|
||
SmallVersion: uint8(smallVersion),
|
||
FixVersion: uint8(fixVersion),
|
||
}
|
||
}
|
||
|
||
var ToolsApi toolsAPI
|