53 lines
713 B
Go
53 lines
713 B
Go
package card_device
|
|
|
|
import (
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
type StatusLine struct {
|
|
v int
|
|
t *time.Timer
|
|
d time.Duration
|
|
o func(int)
|
|
}
|
|
|
|
func (s *StatusLine) String() string {
|
|
return strconv.Itoa(s.v)
|
|
}
|
|
|
|
func (s *StatusLine) Set(v int) {
|
|
s.v = v
|
|
}
|
|
|
|
func (s *StatusLine) Get() int {
|
|
return s.v
|
|
}
|
|
|
|
func (s *StatusLine) AfterSet(v int) {
|
|
if s.t != nil {
|
|
s.t.Stop()
|
|
}
|
|
s.t = time.AfterFunc(s.d, func() {
|
|
s.v = v
|
|
if s.o != nil {
|
|
s.o(v)
|
|
}
|
|
})
|
|
}
|
|
|
|
func (s *StatusLine) SubEvent(handler func(int)) {
|
|
s.o = handler
|
|
}
|
|
|
|
func DefaultStatusLine(v int) *StatusLine {
|
|
return NewStatusLine(v, 500*time.Millisecond)
|
|
}
|
|
|
|
func NewStatusLine(v int, d time.Duration) *StatusLine {
|
|
return &StatusLine{
|
|
v: v,
|
|
d: d,
|
|
}
|
|
}
|