81 lines
1.3 KiB
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
|
|
}
|
|
|