nanite/event.go

88 lines
1.4 KiB
Go

package main
type IncomingEvent interface {
HandleIncoming(*App)
}
type OutgoingEvent interface {
HandleOutgoing(*App) error
}
type Message string
func (m Message) HandleIncoming(app *App) {
app.AppendMessage(string(m))
}
func (m Message) HandleOutgoing(app *App) error {
num, err := app.Send(string(m))
if err != nil {
return err
}
app.incoming <- Last(num)
return nil
}
type Poll int
func (p Poll) HandleOutgoing(app *App) error {
num, err := app.Poll(int(p))
if err != nil {
return err
}
num, err = app.Last(num)
if err != nil {
return err
}
if num != 0 {
app.outgoing <- Stat("")
}
return nil
}
type ManualPoll int
func (p ManualPoll) HandleOutgoing(app *App) error {
num, err := app.Poll(int(p))
if err != nil {
return err
}
app.incoming <- ManualPoll(num)
num, err = app.Last(num)
if err != nil {
return err
}
if num != 0 {
app.outgoing <- Stat("")
}
return nil
}
func (p ManualPoll) HandleIncoming(app *App) {
if int(p) == 0 {
app.AppendSystemMessage("poll: no new messages")
} else {
app.AppendSystemMessage("poll: retrieving %d messages", p)
}
}
type Last int
func (m Last) HandleIncoming(app *App) {
app.last = int(m)
}
type Stat string
func (data Stat) HandleIncoming(app *App) {
app.stats = string(data)
app.dirty = true
}
func (_ Stat) HandleOutgoing(app *App) error {
res, err := app.Stat()
if err != nil {
return err
}
app.incoming <- Stat(res)
return nil
}