8. RTT管理器实现

// RTT管理器
type RTTManager struct {
	rttData      map[string][]int64
	ewmaData     map[string]int64
	sampleWindow int
	alpha        float64
	mu           sync.RWMutex
}

func NewRTTManager() *RTTManager {
	return &RTTManager{
		rttData:      make(map[string][]int64),
		ewmaData:     make(map[string]int64),
		sampleWindow: 20,
		alpha:        0.125,
	}
}

func (r *RTTManager) UpdateRTT(deviceID string, rtt int64) {
	r.mu.Lock()
	defer r.mu.Unlock()
	
	if _, exists := r.rttData[deviceID]; !exists {
		r.rttData[deviceID] = make([]int64, 0, r.sampleWindow)
		r.ewmaData[deviceID] = rtt
	}
	
	r.rttData[deviceID] = append(r.rttData[deviceID], rtt)
	if len(r.rttData[deviceID]) > r.sampleWindow {
		r.rttData[deviceID] = r.rttData[deviceID][1:]
	}
	
	// 计算EWMA
	currentEWMA := r.ewmaData[deviceID]
	newEWMA := int64(float64(currentEWMA)*(1-r.alpha) + float64(rtt)*r.alpha)
	r.ewmaData[deviceID] = newEWMA
}

func (r *RTTManager) GetEWMARTT(deviceID string) int64 {
	r.mu.RLock()
	defer r.mu.RUnlock()
	
	if ewma, exists := r.ewmaData[deviceID]; exists {
		return ewma
	}
	return 0
}