// Returned values will be invalidated by the next Subscribers call func (this *memTopics) Subscribers(topic []byte, qos byte, subs *[]interface{}, qoss *[]byte) error { if !message.ValidQos(qos) { return fmt.Errorf("Invalid QoS %d", qos) } this.smu.RLock() defer this.smu.RUnlock() *subs = (*subs)[0:0] *qoss = (*qoss)[0:0] return this.sroot.smatch(topic, qos, subs, qoss) }
func (this *memTopics) Subscribe(topic []byte, qos byte, sub interface{}) (byte, error) { if !message.ValidQos(qos) { return message.QosFailure, fmt.Errorf("Invalid QoS %d", qos) } if sub == nil { return message.QosFailure, fmt.Errorf("Subscriber cannot be nil") } this.smu.Lock() defer this.smu.Unlock() if qos > MaxQosAllowed { qos = MaxQosAllowed } if err := this.sroot.sinsert(topic, qos, sub); err != nil { return message.QosFailure, err } return qos, nil }