You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wt-game/point/point.go

90 lines
2.6 KiB
Go

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package point
import (
"gitea.weitiangame.com/sdk/wt-game/utils/ahttp"
"github.com/go-resty/resty/v2"
"go.uber.org/zap"
"sync"
)
var (
instance *Point
once sync.Once
)
// Point 是用于事件上报的核心结构体
// Point is the core structure for event reporting
type Point struct {
clientID string
logger *zap.Logger
client *resty.Client // 线程安全的HTTP客户端 / Thread-safe HTTP client
debug bool
curl bool
mu sync.Mutex // 保护并发访问配置字段 / Mutex to protect concurrent access to configuration fields
}
// New 返回Point的单例实例
// New returns the singleton instance of Point
// 注意:首次调用后的参数变更将不会生效(单例模式特性)
// Note: Parameter changes after the first call will not take effect (singleton pattern characteristic)
func New(clientID string, logger *zap.Logger) *Point {
once.Do(func() {
// 初始化线程安全的HTTP客户端
// Initialize thread-safe HTTP client
baseClient := ahttp.New(nil).SetLog(logger).Client()
instance = &Point{
clientID: clientID,
logger: logger,
client: baseClient,
}
})
return instance
}
// Debug 启用调试模式(非线程安全,建议初始化阶段调用)
// Debug enables debug mode (not thread-safe, recommended to call during initialization)
func (p *Point) Debug() *Point {
p.mu.Lock()
defer p.mu.Unlock()
p.debug = true
return p
}
// Curl 启用CURL命令生成非线程安全建议初始化阶段调用
// Curl enables CURL command generation (not thread-safe, recommended to call during initialization)
func (p *Point) Curl() *Point {
p.mu.Lock()
defer p.mu.Unlock()
p.curl = true
return p
}
// Event 发送事件到指定端点
// Event sends an event to the specified endpoint
// 参数data会被复制以避免原始数据修改并发安全设计
// The data parameter is copied to avoid original data modification (concurrency-safe design)
func (p *Point) Event(data map[string]interface{}) (*resty.Response, error) {
data["client_id"] = p.clientID
// 获取当前配置的调试和CURL设置
// Get current debug and curl configuration
p.mu.Lock()
debugEnabled := p.debug
curlEnabled := p.curl
p.mu.Unlock()
// 创建新的请求实例并配置参数
// Create new request instance and configure parameters
request := p.client.R().
SetBody(data).
SetDebug(debugEnabled)
if curlEnabled {
request.EnableTrace() // 启用跟踪以生成CURL命令 / Enable trace to generate CURL command
}
// 发送请求并返回结果
// Send request and return results
return request.Post("https://e.tapdb.net/v2/event")
}