38 lines
1.3 KiB
Go
38 lines
1.3 KiB
Go
package proxy
|
|
|
|
import "sync"
|
|
|
|
// bus := proxy.NewEventBus()
|
|
// bus.Subscribe(proxy.EventLogin, func(e proxy.Event) { fmt.Println(e.Miner.User()) })
|
|
// bus.Subscribe(proxy.EventAccept, stats.OnAccept)
|
|
type EventBus struct {
|
|
listeners map[EventType][]EventHandler
|
|
mu sync.RWMutex
|
|
}
|
|
|
|
// EventType identifies the proxy lifecycle event.
|
|
type EventType int
|
|
|
|
const (
|
|
EventLogin EventType = iota // miner completed login
|
|
EventAccept // pool accepted a submitted share
|
|
EventReject // pool rejected a share (or share expired)
|
|
EventClose // miner TCP connection closed
|
|
)
|
|
|
|
// EventHandler is the callback signature for all event types.
|
|
type EventHandler func(Event)
|
|
|
|
// Event carries the data for any proxy lifecycle event.
|
|
// Fields not relevant to the event type are zero/nil.
|
|
//
|
|
// bus.Dispatch(proxy.Event{Type: proxy.EventLogin, Miner: m})
|
|
type Event struct {
|
|
Type EventType
|
|
Miner *Miner // always set
|
|
Job *Job // set for Accept and Reject events
|
|
Diff uint64 // effective difficulty of the share (Accept and Reject)
|
|
Error string // rejection reason (Reject only)
|
|
Latency uint16 // pool response time in ms (Accept and Reject)
|
|
Expired bool // true if the share was accepted but against the previous job
|
|
}
|