projects
/
svn42.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
attempt to handle more errors
[svn42.git]
/
go
/
r3-netstatus
/
main.go
diff --git
a/go/r3-netstatus/main.go
b/go/r3-netstatus/main.go
index
c897e29
..
c565df2
100644
(file)
--- a/
go/r3-netstatus/main.go
+++ b/
go/r3-netstatus/main.go
@@
-66,7
+66,7
@@
func composeDoorLockMessage(locked bool, frontshut r3events.DoorAjarUpdate, door
}
}
}
}
-func EventToXMPP(events <- chan interface{}, xmpp_presence_events_chan chan <- interface{}) {
+func EventToXMPP(bot *r3xmppbot.XmppBot, events <- chan interface{}, xmpp_presence_events_chan chan <- interface{}) {
defer func() {
if x := recover(); x != nil {
defer func() {
if x := recover(); x != nil {
@@
-120,6
+120,8
@@
func EventToXMPP(events <- chan interface{}, xmpp_presence_events_chan chan <- i
xmpp_presence_events_chan <- present_status
last_buttonpress = 0
}
xmpp_presence_events_chan <- present_status
last_buttonpress = 0
}
+ // Try to XMPP Ping the server and if that fails, quit XMPPBot
+ if bot.PingServer(3500) == false { return }
case r3events.DoorProblemEvent:
xmpp_presence_events_chan <- r3xmppbot.XMPPMsgEvent{Msg: fmt.Sprintf("Door Problem: %s. SeverityLevel: %d (%s)",event.Problem, event.Severity, time.Unix(event.Ts,0).String()), DistributeLevel: r3xmppbot.R3OnlineOnlyInfo, RememberAsStatus: false}
}
case r3events.DoorProblemEvent:
xmpp_presence_events_chan <- r3xmppbot.XMPPMsgEvent{Msg: fmt.Sprintf("Door Problem: %s. SeverityLevel: %d (%s)",event.Problem, event.Severity, time.Unix(event.Ts,0).String()), DistributeLevel: r3xmppbot.R3OnlineOnlyInfo, RememberAsStatus: false}
}
@@
-130,17
+132,21
@@
func RunXMPPBot(ps *pubsub.PubSub, zmqctx *zmq.Context) {
var xmpperr error
var bot *r3xmppbot.XmppBot
var xmpp_presence_events_chan chan interface{}
var xmpperr error
var bot *r3xmppbot.XmppBot
var xmpp_presence_events_chan chan interface{}
- psevents := ps.Sub("presence","door","buttons","updateinterval")
for {
bot, xmpp_presence_events_chan, xmpperr = r3xmppbot.NewStartedBot(xmpp_login_.jid, xmpp_login_.pass, xmpp_bot_authstring_, xmpp_state_save_dir_, true)
if xmpperr == nil {
for {
bot, xmpp_presence_events_chan, xmpperr = r3xmppbot.NewStartedBot(xmpp_login_.jid, xmpp_login_.pass, xmpp_bot_authstring_, xmpp_state_save_dir_, true)
if xmpperr == nil {
+ Syslog_.Printf("Successfully (re)started XMPP Bot")
+ // subscribe before QueryLatestEventsAndInjectThem and EventToXMPP
+ psevents := ps.Sub("presence","door","buttons","updateinterval")
QueryLatestEventsAndInjectThem(ps, zmqctx)
QueryLatestEventsAndInjectThem(ps, zmqctx)
- EventToXMPP(psevents, xmpp_presence_events_chan)
+ EventToXMPP(bot, psevents, xmpp_presence_events_chan)
+ // unsubscribe right away, since we don't known when reconnect will succeed and we don't want to block PubSub
+ ps.Unsub(psevents, "presence","door","buttons","updateinterval")
bot.StopBot()
} else {
Syslog_.Printf("Error starting XMPP Bot: %s", xmpperr.Error())
}
bot.StopBot()
} else {
Syslog_.Printf("Error starting XMPP Bot: %s", xmpperr.Error())
}
- time.Sleep(5 * time.Second)
+ time.Sleep(10 * time.Second)
}
}
}
}
@@
-188,7
+194,7
@@
func main() {
go RunXMPPBot(ps, zmqctx)
// --- receive and distribute events ---
go RunXMPPBot(ps, zmqctx)
// --- receive and distribute events ---
- ticker := time.NewTicker(time.Duration(7) * time.Minute)
+ ticker := time.NewTicker(time.Duration(6) * time.Minute)
for {
select {
case e := <-zmqsub.In():
for {
select {
case e := <-zmqsub.In():