| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- package service
- import (
- "github.com/sirupsen/logrus"
- "sportfitness/base/assembly/base/model"
- "sync"
- )
- var msgBusDataMap = map[int]chan model.Msg{}
- var msgBusDataMapMu = sync.Mutex{}
- type MsgBus struct {
- }
- func (m MsgBus) AddListener(userId int) (channelOut <-chan model.Msg) {
- msgBusDataMapMu.Lock()
- defer msgBusDataMapMu.Unlock()
- channel := make(chan model.Msg, 10)
- msgBusDataMap[userId] = channel
- channelOut = channel
- return
- }
- func (m MsgBus) RemoveListener(userId int) {
- msgBusDataMapMu.Lock()
- defer msgBusDataMapMu.Unlock()
- if c, ok := msgBusDataMap[userId]; ok {
- close(c)
- }
- delete(msgBusDataMap, userId)
- }
- func (MsgBus) SendMsg(msg model.Msg) {
- msgBusDataMapMu.Lock()
- defer msgBusDataMapMu.Unlock()
- if channel, ok := msgBusDataMap[msg.UserIdRcv]; ok {
- select {
- case channel <- msg:
- break
- default:
- logrus.Errorf("向用户ID[%d]发送信息失败,chan满", msg.UserIdRcv)
- }
- }
- }
|