package syseventhub import ( "time" "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 { } 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) GetEvent(eventTypeList []string, criteria interface{}) (event *eventhub.EventInfo, err error) { for _, eventType := range eventTypeList { switch eventType { case EventTypeWXToken: return h.getWXToken(criteria) } } return event, err } func (h *Hub) getWXToken(criteria interface{}) (event *eventhub.EventInfo, err error) { criteriaToken := "" if criteria != nil { criteriaToken = criteria.(string) } token := api.WeixinAPI.CBGetToken() if token != criteriaToken { return &eventhub.EventInfo{ Type: EventTypeWXToken, Data: token, }, nil } return nil, nil } 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) (token string) { eventInfo, err := h.eventHub.GetEvent(EventCategory, []string{EventTypeWXToken}, oldToken, waitTime) if err == nil && eventInfo != nil { token = eventInfo.Data.(string) } return token }