overpush/core/core.go

59 lines
1.1 KiB
Go

package core
import (
"fmt"
"sync"
"time"
pb "git.wntrmute.dev/kyle/overpush/proto"
"github.com/gregdel/pushover"
)
// MessageBuffer is how many messages to back up. This represents a
// balance between expected usage and anticipated spikes. It is
// entirely empirical as I don't have data to drive this decision.
const MessageBuffer = 16
type Account struct {
p *pushover.Pushover
nextTransmit time.Time
q chan pb.Message
lock *sync.Mutex
}
func NewAccount(token string) *Account {
return &Account{
p: pushover.New(token),
q: make(chan pb.Message, MessageBuffer),
lock: &sync.Mutex{},
}
}
func (a *Account) UpdateLimit(limit *pushover.Limit) {
a.lock.Lock()
if limit.Remaining > 0 {
return
}
a.nextTransmit = limit.NextReset.Add(time.Second)
}
func (a *Account) Receive() {
for {
for {
if a.nextTransmit.After(time.Now()) {
sleep := time.Until(a.nextTransmit)
time.Sleep(sleep)
} else {
break
}
}
m, closed := <-a.q
if closed {
panic("channel closed")
}
fmt.Println(m.String())
}
}