-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathhandlers_registry.go
44 lines (37 loc) · 1.04 KB
/
handlers_registry.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package server
import (
"github.com/muka/peerjs-go/models"
)
//Handler wrap a callback
type Handler func(client IClient, message models.IMessage) bool
// IHandlersRegistry interface for HandlersRegistry
type IHandlersRegistry interface {
RegisterHandler(messageType string, handler Handler)
Handle(client IClient, message models.IMessage) bool
}
//NewHandlersRegistry creates a new HandlersRegistry
func NewHandlersRegistry() IHandlersRegistry {
h := &HandlersRegistry{
handlers: make(map[string]Handler),
}
return h
}
// HandlersRegistry handlers registry
type HandlersRegistry struct {
handlers map[string]Handler
}
// RegisterHandler register an handler
func (r *HandlersRegistry) RegisterHandler(messageType string, handler Handler) {
if _, ok := r.handlers[messageType]; ok {
return
}
r.handlers[messageType] = handler
}
//Handle handles a message
func (r *HandlersRegistry) Handle(client IClient, message models.IMessage) bool {
handler, ok := r.handlers[message.GetType()]
if !ok {
return false
}
return handler(client, message)
}