server/pubsub/event_handler.go (30 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package pubsub import ( "strings" "github.com/go-chassis/openlog" "github.com/hashicorp/serf/cmd/serf/command/agent" "github.com/hashicorp/serf/serf" ) var handlers = make(map[string]agent.EventHandler) func RegisterHandler(typ string, h agent.EventHandler) { handlers[typ] = h openlog.Info("register handler for:" + typ) } // ClusterEventHandler handler serf custom event, it is singleton type ClusterEventHandler struct { } // HandleEvent send event to subscribers func (h *ClusterEventHandler) HandleEvent(e serf.Event) { openlog.Debug("receive event:" + e.EventType().String()) switch e.EventType().String() { case "user": h.DispatchEvent(e) } } func (h *ClusterEventHandler) DispatchEvent(e serf.Event) { typ := strings.Replace(e.String(), "user-event: ", "", 1) eh, ok := handlers[typ] if !ok { openlog.Warn("can not handle:" + typ) return } eh.HandleEvent(e) }