| //Copyright 2017 Huawei Technologies Co., Ltd |
| // |
| //Licensed 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 messaging |
| |
| import "sync" |
| |
| var ( |
| subscriptions = map[string][]chan []byte{} |
| subscriptionsMutex sync.Mutex |
| ) |
| |
| func Subscribe(channel string) chan []byte { |
| sub := make(chan []byte) |
| subscriptionsMutex.Lock() |
| subscriptions[channel] = append(subscriptions[channel], sub) |
| subscriptionsMutex.Unlock() |
| return sub |
| } |
| |
| func Unsubscribe(channel string, sub chan []byte) { |
| subscriptionsMutex.Lock() |
| newSubs := []chan []byte{} |
| subs := subscriptions[channel] |
| for _, s := range subs { |
| if s != sub { |
| newSubs = append(newSubs, s) |
| } |
| } |
| subscriptions[channel] = newSubs |
| subscriptionsMutex.Unlock() |
| } |