package transfer import ( "sync" ) var ( incomingTransfers = NewManager() outgoingTransfers = NewManager() ) // Incoming returns a transfer manager for incoming transfers. func Incoming() *Manager { return incomingTransfers } // Outgoing returns a transfer manager for outgoing transfers. func Outgoing() *Manager { return outgoingTransfers } // Manager manages transfers. type Manager struct { mu sync.RWMutex transfers map[string]*Transfer } // NewManager returns a new transfer manager. func NewManager() *Manager { return &Manager{ transfers: make(map[string]*Transfer), } } // Add adds a transfer to the manager. func (m *Manager) Add(transfer *Transfer) { m.mu.Lock() defer m.mu.Unlock() m.transfers[transfer.Server.ID()] = transfer } // Remove removes a transfer from the manager. func (m *Manager) Remove(transfer *Transfer) { m.mu.Lock() defer m.mu.Unlock() delete(m.transfers, transfer.Server.ID()) } // Get gets a transfer from the manager using a server ID. func (m *Manager) Get(id string) *Transfer { m.mu.RLock() defer m.mu.RUnlock() return m.transfers[id] }