package syseventhub import ( "time" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/business/jxutils/eventhub" "git.rosy.net.cn/jx-callback/globals/api" ) const ( EventCategory = "sys" EventTypeWXToken = "wxtoken" ) type Hub struct { eventHub *eventhub.EventHub } type Criteria struct { } type WXTokenInfo struct { IsNew bool `json:"isNew"` Token string `json:"token"` } var ( SysEventHub *Hub ) func init() { SysEventHub = New() } func New() (hub *Hub) { hub = &Hub{ eventHub: eventhub.New(), } hub.eventHub.RegisterProducer(EventCategory, hub) return hub } func (h *Hub) IsCriteriaMatch(eventInfo *eventhub.EventInfo, criteria interface{}) bool { return true } func (h *Hub) OnNewWXToken(token string) { h.eventHub.PostNewEvent(EventCategory, &eventhub.EventInfo{ Type: EventTypeWXToken, Data: token, }) } func (h *Hub) GetWXToken(oldToken string, waitTime time.Duration) (tokenInfo *WXTokenInfo) { token := api.WeixinAPI.CBGetToken() if token != oldToken { tokenInfo = &WXTokenInfo{ IsNew: false, Token: token, } } else { eventInfo, err := h.eventHub.GetEvent(EventCategory, []string{EventTypeWXToken}, nil, waitTime) if err == nil && eventInfo != nil { tokenInfo = &WXTokenInfo{ IsNew: true, Token: eventInfo.Data.(string), } } } globals.SugarLogger.Debugf("GetWXToken tokenInfo:%s", utils.Format4Output(tokenInfo, true)) return tokenInfo }