jupemail/broker.go

81 lines
1.3 KiB
Go

package main
import (
// b2 "golang.org/x/crypto/blake2b"
"sync"
"time"
)
var LocalPipe chan []byte
func init() {
LocalPipe = make(chan []byte, 20)
}
type Ticket struct {
Timestamp time.Time
// Checksum b2.Hash
}
type Status struct {
Complete bool
Status string
}
type Broker interface {
GetName() string
Deliver([]byte) Ticket
Available() bool
// GetStatus(Ticket) Status
}
type IRCBroker struct {
Name string
Backlog chan []byte
Overload chan bool
IsAvailable bool
Results map[Ticket]Status
ToChannel string
mu sync.RWMutex
}
func (bus *IRCBroker) PostalService() {
for {
select {
case msg := <-bus.Backlog:
println("msg in")
LocalPipe <- msg
default:
time.Sleep(time.Duration(25) * time.Millisecond)
}
}
}
func (bus *IRCBroker) Deliver(incoming []byte) Ticket {
bus.Backlog <- incoming
return Ticket{Timestamp: time.Now()}
}
func (bus *IRCBroker) Available() bool {
return bus.IsAvailable
}
func (bus *IRCBroker) GetName() string {
return bus.Name
}
func NewIRCBroker(room string) *IRCBroker {
bro := &IRCBroker{
Name: "IRCBroker",
Backlog: make(chan []byte, 20),
Overload: make(chan bool),
IsAvailable: false,
ToChannel: room,
mu: sync.RWMutex{},
}
go bro.PostalService()
go bro.StartBot(bro.Name)
return bro
}