123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package middleware
- import (
- "sync"
- "github.com/google/uuid"
- )
- // ProgressManager 用于管理所有请求的进度
- type ProgressManager struct {
- progressMap map[string]chan string
- mu sync.RWMutex
- }
- func NewProgressManager() *ProgressManager {
- return &ProgressManager{
- progressMap: make(map[string]chan string),
- }
- }
- func (pm *ProgressManager) CreateProgress() string {
- pm.mu.Lock()
- defer pm.mu.Unlock()
- // 生成一个唯一的请求 ID
- id := uuid.New().String()
- // 创建一个新的 progress channel
- pm.progressMap[id] = make(chan string)
- return id
- }
- func (pm *ProgressManager) GetProgressChan(id string) (chan string, bool) {
- pm.mu.RLock()
- defer pm.mu.RUnlock()
- progressChan, ok := pm.progressMap[id]
- return progressChan, ok
- }
- func (pm *ProgressManager) CloseProgress(id string) {
- pm.mu.Lock()
- defer pm.mu.Unlock()
- if progressChan, ok := pm.progressMap[id]; ok {
- close(progressChan)
- delete(pm.progressMap, id)
- }
- }
|