ProgressManager.go 959 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package middleware
  2. import (
  3. "sync"
  4. "github.com/google/uuid"
  5. )
  6. // ProgressManager 用于管理所有请求的进度
  7. type ProgressManager struct {
  8. progressMap map[string]chan string
  9. mu sync.RWMutex
  10. }
  11. func NewProgressManager() *ProgressManager {
  12. return &ProgressManager{
  13. progressMap: make(map[string]chan string),
  14. }
  15. }
  16. func (pm *ProgressManager) CreateProgress() string {
  17. pm.mu.Lock()
  18. defer pm.mu.Unlock()
  19. // 生成一个唯一的请求 ID
  20. id := uuid.New().String()
  21. // 创建一个新的 progress channel
  22. pm.progressMap[id] = make(chan string)
  23. return id
  24. }
  25. func (pm *ProgressManager) GetProgressChan(id string) (chan string, bool) {
  26. pm.mu.RLock()
  27. defer pm.mu.RUnlock()
  28. progressChan, ok := pm.progressMap[id]
  29. return progressChan, ok
  30. }
  31. func (pm *ProgressManager) CloseProgress(id string) {
  32. pm.mu.Lock()
  33. defer pm.mu.Unlock()
  34. if progressChan, ok := pm.progressMap[id]; ok {
  35. close(progressChan)
  36. delete(pm.progressMap, id)
  37. }
  38. }