xmpp_login_ struct {jid string; pass string}
xmpp_bot_authstring_ string
xmpp_state_save_dir_ string
+ button_press_timeout_ int64 = 3600
)
//-------
}
func EventToXMPP(ps *pubsub.PubSub, xmpp_presence_events_chan_ chan <- interface{}) {
- events := ps.Sub("presence","door","buttons")
+ events := ps.Sub("presence","door","buttons","updateinterval")
defer func() {
if x := recover(); x != nil {
fmt.Printf("handleIncomingXMPPStanzas: run time panic: %v", x)
- ps.Unsub(events, "presence","door","buttons")
+ ps.Unsub(events, "presence","door","buttons","updateinterval")
close(xmpp_presence_events_chan_)
}
}()
var present, locked, shut bool = false, true, true
+ var last_buttonpress int64 = 0
var who string
button_msg := "The button has been pressed ! Propably someone is bored and in need of company ! ;-)"
-
+ present_status := r3xmppbot.XMPPStatusEvent{r3xmppbot.ShowOnline,"Somebody is present"}
+ notpresent_status := r3xmppbot.XMPPStatusEvent{r3xmppbot.ShowNotAvailabe,"Nobody is here"}
+ button_status := r3xmppbot.XMPPStatusEvent{r3xmppbot.ShowFreeForChat, "The button has been pressed :-)"}
+
+ xmpp_presence_events_chan_ <- r3xmppbot.XMPPStatusEvent{r3xmppbot.ShowNotAvailabe, "Nobody is here"}
+
for eventinterface := range(events) {
switch event := eventinterface.(type) {
case PresenceUpdate:
present = event.Present
xmpp_presence_events_chan_ <- r3xmppbot.XMPPMsgEvent{Msg: composeMessage(present, locked, shut, who, event.Ts), DistributeLevel: r3xmppbot.R3OnlineOnlyInfo, RememberAsStatus: true}
+ if present {
+ xmpp_presence_events_chan_ <- present_status
+ } else {
+ xmpp_presence_events_chan_ <- notpresent_status
+ }
case DoorCommandEvent:
if len(event.Who) > 0 && len(event.Using) > 0 {
who = fmt.Sprintf("%s (%s)",event.Who, event.Using)
xmpp_presence_events_chan_ <- r3xmppbot.XMPPMsgEvent{Msg: composeMessage(present, locked, shut, who, event.Ts), DistributeLevel: r3xmppbot.R3DebugInfo, RememberAsStatus: true}
case ButtonPressUpdate:
xmpp_presence_events_chan_ <- r3xmppbot.XMPPMsgEvent{Msg: button_msg, DistributeLevel: r3xmppbot.R3OnlineOnlyInfo}
+ xmpp_presence_events_chan_ <- button_status
+ last_buttonpress = event.Ts
+ case TimeTick:
+ if present && last_buttonpress > 0 && time.Now().Unix() - last_buttonpress > button_press_timeout_ {
+ xmpp_presence_events_chan_ <- present_status
+ last_buttonpress = 0
+ }
}
}
}
case e := <-newlinequeue:
ParseSocketInputLine(e, ps) //, brn)
case <-ticker.C:
- ps.Pub(TimeTick{time.Now().Unix()}, "publishjson")
+ ps.Pub(TimeTick{time.Now().Unix()}, "updateinterval")
}
}
}