prox5/conductor.go

65 lines
1.8 KiB
Go
Raw Normal View History

2021-09-12 02:59:05 +00:00
package pxndscvm
import "errors"
// SwampStatus represents the current state of our Swamp.
type SwampStatus uint32
const (
// Running means the proxy pool is currently taking in proxys and validating them, and is available to dispense proxies.
Running SwampStatus = iota
// Paused means the proxy pool has been with Swamp.Pause() and may be resumed with Swamp.Resume()
Paused
// New means the proxy pool has never been started.
New
)
2021-09-21 12:24:30 +00:00
// Start starts our proxy pool operations. Trying to start a running Swamp will return an error.
func (s *Swamp) Start() error {
s.mu.RLock()
if s.Status != New {
s.mu.RUnlock()
return errors.New("this swamp is not new, use resume if it is paused")
}
s.mu.RUnlock()
2021-09-20 01:23:18 +00:00
// mapBuilder builds deduplicated map with valid ips and ports
go s.mapBuilder()
// tossUp feeds jobs to pond continuously
go s.jobSpawner()
2021-09-20 07:49:40 +00:00
s.mu.Lock()
s.Status = Running
s.mu.Unlock()
2021-09-20 01:23:18 +00:00
return nil
}
2021-09-15 05:09:43 +00:00
2021-09-13 19:18:18 +00:00
/*
Pause will cease the creation of any new proxy validation operations.
* You will be able to start the proxy pool again with Swamp.Resume(), it will have the same Statistics, options, and ratelimits.
* During pause you are still able to dispense proxies.
* Options may be changed and proxy lists may be loaded when paused.
* Pausing an already paused Swamp is a nonop.
*/
2021-09-20 12:29:28 +00:00
func (s *Swamp) Pause() error {
if s.IsRunning() {
2021-09-20 12:29:28 +00:00
return errors.New("already paused")
}
s.mu.RLock()
for n := s.runningdaemons; n > 0; n-- {
s.quit <- true
}
s.mu.RUnlock()
s.Status = Paused
2021-09-20 12:29:28 +00:00
return nil
}
// Resume will resume pause proxy pool operations, attempting to resume a running Swamp is a non-op.
func (s *Swamp) Resume() error {
if !s.IsRunning() && s.Status != New {
2021-09-20 12:29:28 +00:00
return errors.New("not paused")
}
2021-09-20 01:23:18 +00:00
go s.mapBuilder()
go s.jobSpawner()
return nil
}