58 lines
1.1 KiB
Go
58 lines
1.1 KiB
Go
|
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]
|
||
|
}
|