X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=r3-netstatus%2Fmain.go;fp=r3-netstatus%2Fmain.go;h=ec65f06cdaeaf2f5dd895196995cf8ec08bfa325;hb=31c937ec220968f64857c375008cc5376dcac701;hp=cd0f601750f83fa497dd58eb69eedd090471af0c;hpb=f360a8eb6c27cc69b015b547a418d35d4db54741;p=svn42.git diff --git a/r3-netstatus/main.go b/r3-netstatus/main.go index cd0f601..ec65f06 100644 --- a/r3-netstatus/main.go +++ b/r3-netstatus/main.go @@ -52,6 +52,15 @@ func composeMessage(present, locked, shut bool, who string, ts int64) string { func EventToXMPP(ps *pubsub.PubSub, xmpp_presence_events_chan_ chan <- interface{}) { events := ps.Sub("presence","door","buttons") + + defer func() { + if x := recover(); x != nil { + fmt.Printf("handleIncomingXMPPStanzas: run time panic: %v", x) + ps.Unsub(events, "presence","door","buttons") + close(xmpp_presence_events_chan_) + } + }() + var present, locked, shut bool = false, true, true var who string button_msg := "The button has been pressed ! Propably someone is bored and in need of company ! ;-)" @@ -79,14 +88,9 @@ func EventToXMPP(ps *pubsub.PubSub, xmpp_presence_events_chan_ chan <- interface } func main() { - var err error + var xmpperr error var bot *r3xmppbot.XmppBot - bot, xmpp_presence_events_chan_, err = r3xmppbot.NewStartedBot(xmpp_login_.jid, xmpp_login_.pass, xmpp_bot_authstring_, xmpp_state_save_dir_, true) - if err != nil { - fmt.Println(err) - return - } - defer bot.StopBot() + bot, xmpp_presence_events_chan_, xmpperr = r3xmppbot.NewStartedBot(xmpp_login_.jid, xmpp_login_.pass, xmpp_bot_authstring_, xmpp_state_save_dir_, true) newlinequeue := make(chan string, 1) ps := pubsub.New(1) @@ -95,16 +99,23 @@ func main() { defer ps.Shutdown() //~ defer brn.Shutdown() - ticker := time.NewTicker(time.Duration(7) * time.Minute) go EventToWeb(ps) - go EventToXMPP(ps, xmpp_presence_events_chan_) - go ReadFromUSocket(presence_socket_path_, newlinequeue) - for { - select { - case e := <-newlinequeue: - ParseSocketInputLine(e, ps) //, brn) - case <-ticker.C: - ps.Pub(TimeTick{time.Now().Unix()}, "publishjson") - } - } + if xmpperr == nil { + defer bot.StopBot() + go EventToXMPP(ps, xmpp_presence_events_chan_) + } else { + fmt.Println(xmpperr) + fmt.Println("XMPP Bot disabled") + } + go ReadFromUSocket(presence_socket_path_, newlinequeue) + ticker := time.NewTicker(time.Duration(7) * time.Minute) + + for { + select { + case e := <-newlinequeue: + ParseSocketInputLine(e, ps) //, brn) + case <-ticker.C: + ps.Pub(TimeTick{time.Now().Unix()}, "publishjson") + } + } }