-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathmessage_handler.go
54 lines (42 loc) · 1.6 KB
/
message_handler.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
45
46
47
48
49
50
51
52
53
54
package server
import (
"github.com/muka/peerjs-go/models"
)
//IMessageHandler interface for MessageHandler
type IMessageHandler interface {
Handle(client IClient, message models.IMessage) bool
}
//NewMessageHandler creates a new MessageHandler
func NewMessageHandler(realm IRealm, handlersRegistry IHandlersRegistry, opts Options) *MessageHandler {
if handlersRegistry == nil {
handlersRegistry = NewHandlersRegistry()
}
m := &MessageHandler{
realm: realm,
handlersRegistry: handlersRegistry,
}
transmissionHandler := NewTransmissionHandler(realm, opts)
heartbeatHandler := NewHeartbeatHandler(opts)
handleHeartbeat := func(client IClient, message models.IMessage) bool {
return heartbeatHandler(client, message)
}
handleTransmission := func(client IClient, message models.IMessage) bool {
return transmissionHandler(client, message)
}
m.handlersRegistry.RegisterHandler(MessageTypeHeartbeat, handleHeartbeat)
m.handlersRegistry.RegisterHandler(MessageTypeOffer, handleTransmission)
m.handlersRegistry.RegisterHandler(MessageTypeAnswer, handleTransmission)
m.handlersRegistry.RegisterHandler(MessageTypeCandidate, handleTransmission)
m.handlersRegistry.RegisterHandler(MessageTypeLeave, handleTransmission)
m.handlersRegistry.RegisterHandler(MessageTypeExpire, handleTransmission)
return m
}
//MessageHandler wrap the message handler
type MessageHandler struct {
realm IRealm
handlersRegistry IHandlersRegistry
}
//Handle handles a message
func (m *MessageHandler) Handle(client IClient, message models.IMessage) bool {
return m.handlersRegistry.Handle(client, message)
}