From a8bed347a717d21a218ed7fa55627979a8365f1c Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 6 Nov 2024 13:58:45 +0800 Subject: [PATCH] 1 --- msgqueue.go | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 msgqueue.go diff --git a/msgqueue.go b/msgqueue.go new file mode 100644 index 0000000..505c005 --- /dev/null +++ b/msgqueue.go @@ -0,0 +1,62 @@ +package f5 + +import ( + "q5" + "sync" +) + +type MsgHandler struct { + deleted bool + entry q5.ListHead + cb func(q5.Args) +} + +type msgQueue struct { + msgHandlers [256] struct { + lock sync.Mutex + head q5.ListHead + addingLock sync.Mutex + addingHead q5.ListHead + } +} + +func (this *msgQueue) init() { + for i := 0; i < len(this.msgHandlers); i++ { + node := &this.msgHandlers[i] + node.lock.Lock() + node.head.Init(nil) + node.lock.Unlock() + + node.addingLock.Lock() + node.addingHead.Init(nil) + node.addingLock.Unlock() + } +} + +func (this *msgQueue) unInit() { + +} + +func (this *msgQueue) RegisterCb(msgId int, cb func(q5.Args)) *MsgHandler { + if msgId >= len(this.msgHandlers) { + panic("msgQueue.msgId error") + } + p := new(MsgHandler) + p.cb = cb + p.entry.Init(p) + node := &this.msgHandlers[msgId] + node.addingLock.Lock() + defer node.addingLock.Unlock() + node.addingHead.AddTail(&p.entry) + return p +} + +func (this *msgQueue) UnRegisterCb(handler *MsgHandler) { + if handler != nil { + handler.deleted = true + } +} + +func (this *msgQueue) FireEvent(msgId int, args q5.Args) { + +}