code: func (c *Connection) sendNotifications(msgID uint16, data []byte) {
  	c.subscriptionsLock.RLock()
  	defer c.subscriptionsLock.RUnlock()
  
  	matched := false
  
  	// send to notification to each subscriber
  	for _, sub := range c.subscriptions[msgID] {
  		log.WithFields(logger.Fields{
  			"msg_name": sub.event.GetMessageName(),
  			"msg_id":   msgID,
  			"msg_size": len(data),
  		}).Debug("Sending a notification to the subscription channel.")
  
  		event := sub.msgFactory()
  		if err := c.codec.DecodeMsg(data, event); err != nil {
  			log.WithFields(logger.Fields{
  				"msg_name": sub.event.GetMessageName(),
  				"msg_id":   msgID,
  				"msg_size": len(data),
  			}).Errorf("Unable to decode the notification message: %v", err)
  			continue
  		}
  
  		// send the message into the go channel of the subscription
  		select {
  		case sub.notifChan <- event:
  			// message sent successfully
  		default:
  			// unable to write into the channel without blocking
  			log.WithFields(logger.Fields{
  				"msg_name": sub.event.GetMessageName(),
  				"msg_id":   msgID,
  				"msg_size": len(data),
  			}).Warn("Unable to deliver the notification, reciever end not ready.")
  		}
  
  		matched = true
  	}
  
  	if !matched {
  		log.WithFields(logger.Fields{
  			"msg_id":   msgID,
  			"msg_size": len(data),
  		}).Info("No subscription found for the notification message.")
  	}
  }
docs: // sendNotifications send a notification message to all subscribers subscribed for that message.