1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/datochan-socketgo

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
dispatcher.go 1.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
datochan Отправлено 30.01.2022 10:15 bfe326f
package socketgo
import (
"fmt"
"sync"
)
// PacketHandler 事件处理句柄,用于解析相应的封包
type PacketHandler func(ISession, interface{})
type IDispatcher interface {
AddHandler(id uint32, handler PacketHandler)
DelHandler(id uint32)
GetHandler(id uint32) PacketHandler
HandleProc(ISession, interface{})
}
type Dispatcher struct {
rwlock sync.RWMutex // 写互斥避免并发状态下相互干扰
handlerMap map[uint32]PacketHandler // 事件过程回调句柄, key是事件ID
}
// NewDispatcher 事件分发器
func NewDispatcher() *Dispatcher {
return &Dispatcher{
handlerMap: make(map[uint32]PacketHandler),
}
}
// AddHandler 添加新的事件处理器
func (p *Dispatcher) AddHandler(id uint32, handler PacketHandler) {
p.rwlock.Lock()
defer p.rwlock.Unlock()
p.handlerMap[id] = handler
}
// DelHandler 卸载新的事件处理器
func (p *Dispatcher) DelHandler(id uint32) {
p.rwlock.Lock()
defer p.rwlock.Unlock()
delete(p.handlerMap, id)
}
func (p *Dispatcher) GetHandler(id uint32) PacketHandler {
p.rwlock.Lock()
defer p.rwlock.Unlock()
handler, ok := p.handlerMap[id]
if ok {
return handler
}
return nil
}
// HandleProc 事件处理过程
func (p *Dispatcher) HandleProc(session ISession, packet interface{}) {
p.rwlock.RLock()
defer p.rwlock.RUnlock()
// 子类中实现事件分发功能
fmt.Println("未实现时间处理过程, 请再子类中实现")
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/datochan-socketgo.git
git@api.gitlife.ru:oschina-mirror/datochan-socketgo.git
oschina-mirror
datochan-socketgo
datochan-socketgo
dev