Send queued presences, handle presence sending errors
This commit is contained in:
parent
fc5f8d7a65
commit
e4c9267347
|
@ -3,6 +3,7 @@ package xmpp
|
||||||
import (
|
import (
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
"time"
|
||||||
|
|
||||||
"dev.narayana.im/narayana/telegabber/config"
|
"dev.narayana.im/narayana/telegabber/config"
|
||||||
"dev.narayana.im/narayana/telegabber/persistence"
|
"dev.narayana.im/narayana/telegabber/persistence"
|
||||||
|
@ -56,16 +57,36 @@ func NewComponent(conf config.XMPPConfig, tc config.TelegramConfig) (*xmpp.Strea
|
||||||
|
|
||||||
cm := xmpp.NewStreamManager(component, nil)
|
cm := xmpp.NewStreamManager(component, nil)
|
||||||
|
|
||||||
go maintenance(component)
|
go heartbeat(component)
|
||||||
|
|
||||||
return cm, nil
|
return cm, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func maintenance(component *xmpp.Component) {
|
func logPresence(err error, presence *stanza.Presence) {
|
||||||
|
log.WithFields(log.Fields{
|
||||||
|
"presence": *presence,
|
||||||
|
}).Error(errors.Wrap(err, "Couldn't send presence"))
|
||||||
|
}
|
||||||
|
|
||||||
|
func heartbeat(component *xmpp.Component) {
|
||||||
|
var err error
|
||||||
probeType := SPType("probe")
|
probeType := SPType("probe")
|
||||||
|
|
||||||
for jid := range sessions {
|
for jid := range sessions {
|
||||||
sendPresence(component, jid, probeType)
|
sendPresence(component, jid, probeType)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for {
|
||||||
|
for key, presence := range queue {
|
||||||
|
err = component.Send(presence)
|
||||||
|
if err != nil {
|
||||||
|
logPresence(err, presence)
|
||||||
|
} else {
|
||||||
|
delete(queue, key)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
time.Sleep(60e9)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadSessions(dbPath string) error {
|
func loadSessions(dbPath string) error {
|
||||||
|
@ -186,7 +207,10 @@ func sendPresence(component *xmpp.Component, to string, args ...args.V) {
|
||||||
|
|
||||||
immed := SPImmed.Get(args)
|
immed := SPImmed.Get(args)
|
||||||
if immed {
|
if immed {
|
||||||
component.Send(presence)
|
err := component.Send(presence)
|
||||||
|
if err != nil {
|
||||||
|
logPresence(err, &presence)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
queue[presence.From+presence.To] = &presence
|
queue[presence.From+presence.To] = &presence
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue