add player package with key client-side player functionality, update protocol codecs, and refactor metadata definitions and slot usage
This commit is contained in:
70
pkg/client/event.go
Normal file
70
pkg/client/event.go
Normal file
@ -0,0 +1,70 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"sync"
|
||||
)
|
||||
|
||||
// EventHandler 是一個泛型事件總線
|
||||
type EventHandler struct {
|
||||
mu sync.RWMutex
|
||||
handlers map[string][]func(event any) error
|
||||
}
|
||||
|
||||
func (e *EventHandler) PublishEvent(event string, data any) error {
|
||||
e.mu.RLock()
|
||||
defer e.mu.RUnlock()
|
||||
if hs, ok := e.handlers[event]; ok {
|
||||
for _, h := range hs {
|
||||
if err := h(data); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (e *EventHandler) SubscribeEvent(event string, handler func(data any) error) {
|
||||
e.mu.Lock()
|
||||
defer e.mu.Unlock()
|
||||
e.handlers[event] = append(e.handlers[event], handler)
|
||||
}
|
||||
|
||||
func NewEventHandler() *EventHandler {
|
||||
return &EventHandler{
|
||||
handlers: make(map[string][]func(any) error),
|
||||
}
|
||||
}
|
||||
|
||||
//func SubscribeEvent[T bot.Event[T]](eb *EventHandler, t T, f func(event T) error) {
|
||||
// eb.mu.Lock()
|
||||
// defer eb.mu.Unlock()
|
||||
//
|
||||
// eb.handlers[t.ID()] = append(eb.handlers[t.ID()], func(d any) error {
|
||||
// t2 := d.(T)
|
||||
// return f(t2)
|
||||
// })
|
||||
//}
|
||||
//
|
||||
//func PublishEvent[T bot.Event[T]](eb *EventHandler, t T) error {
|
||||
// eb.mu.RLock()
|
||||
// defer eb.mu.RUnlock()
|
||||
// if hs, ok := eb.handlers[t.ID()]; ok {
|
||||
// for _, h := range hs {
|
||||
// if err := h(t); err != nil {
|
||||
// return err
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// return nil
|
||||
//}
|
||||
//
|
||||
//func GoPublishEvent[T bot.Event[T]](eb *EventHandler, t T) {
|
||||
// eb.mu.RLock()
|
||||
// defer eb.mu.RUnlock()
|
||||
// if hs, ok := eb.handlers[t.ID()]; ok {
|
||||
// for _, h := range hs {
|
||||
// go h(t)
|
||||
// }
|
||||
// }
|
||||
//}
|
Reference in New Issue
Block a user