forked from davyxu/cellnet
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprocbundle.go
68 lines (50 loc) · 1.33 KB
/
procbundle.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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package peer
import (
"errors"
"github.com/davyxu/cellnet"
)
// 手动投递消息, 兼容v2的设计
type MessagePoster interface {
// 投递一个消息到Hooker之前
ProcEvent(ev cellnet.Event)
}
type CoreProcBundle struct {
transmit cellnet.MessageTransmitter
hooker cellnet.EventHooker
callback cellnet.EventCallback
}
func (self *CoreProcBundle) GetBundle() *CoreProcBundle {
return self
}
func (self *CoreProcBundle) SetTransmitter(v cellnet.MessageTransmitter) {
self.transmit = v
}
func (self *CoreProcBundle) SetHooker(v cellnet.EventHooker) {
self.hooker = v
}
func (self *CoreProcBundle) SetCallback(v cellnet.EventCallback) {
self.callback = v
}
var notHandled = errors.New("Processor: Transimitter nil")
func (self *CoreProcBundle) ReadMessage(ses cellnet.Session) (msg interface{}, err error) {
if self.transmit != nil {
return self.transmit.OnRecvMessage(ses)
}
return nil, notHandled
}
func (self *CoreProcBundle) SendMessage(ev cellnet.Event) {
if self.hooker != nil {
ev = self.hooker.OnOutboundEvent(ev)
}
if self.transmit != nil && ev != nil {
self.transmit.OnSendMessage(ev.Session(), ev.Message())
}
}
func (self *CoreProcBundle) ProcEvent(ev cellnet.Event) {
if self.hooker != nil {
ev = self.hooker.OnInboundEvent(ev)
}
if self.callback != nil && ev != nil {
self.callback(ev)
}
}