code: func (c *Controller) Handler(smsg []byte, p *p2p.Peer, asymmetric bool, keyid string) error {
  	c.mu.Lock()
  	defer c.mu.Unlock()
  	log.Debug("notify controller handler", "keyid", keyid)
  
  	// see if the message is valid
  	msg, err := NewMsgFromPayload(smsg)
  	if err != nil {
  		return err
  	}
  
  	switch msg.Code {
  	case MsgCodeStart:
  		return c.handleStartMsg(msg, keyid)
  	case MsgCodeNotifyWithKey:
  		return c.handleNotifyWithKeyMsg(msg)
  	case MsgCodeNotify:
  		return c.subscriptions[msg.namestring].handler(msg.namestring, msg.Payload)
  	case MsgCodeStop:
  		return c.handleStopMsg(msg)
  	}
  
  	return fmt.Errorf("Invalid message code: %d", msg.Code)
  }
docs: // Handler is the pss topic handler to be used to process notification service messages
  // It should be registered in the pss of both to any notification service provides and clients using the service