/
session_options.go
94 lines (82 loc) · 3.14 KB
/
session_options.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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package gate
import (
"git.golaxy.org/core/util/option"
"git.golaxy.org/framework/net/gtp"
"git.golaxy.org/framework/net/gtp/transport"
"git.golaxy.org/framework/util/binaryutil"
)
type _SessionOptions struct {
StateChangedHandler SessionStateChangedHandler // 会话状态变化的处理器
SendDataChan chan binaryutil.RecycleBytes // 发送数据的channel
RecvDataChan chan binaryutil.RecycleBytes // 接收数据的channel
RecvDataChanRecyclable bool // 接收数据的channel中是否使用可回收字节对象
SendEventChan chan transport.Event[gtp.MsgReader] // 发送自定义事件的channel
RecvEventChan chan transport.Event[gtp.Msg] // 接收自定义事件的channel
RecvDataHandler SessionRecvDataHandler // 接收数据的处理器(优先级低于监控器)
RecvEventHandler SessionRecvEventHandler // 接收自定义事件的处理器(优先级低于监控器)
}
var sessionWith _SessionOption
type _SessionOption struct{}
func (_SessionOption) Default() option.Setting[_SessionOptions] {
return func(options *_SessionOptions) {
sessionWith.StateChangedHandler(nil)(options)
sessionWith.SendDataChanSize(0)(options)
sessionWith.RecvDataChanSize(0, false)(options)
sessionWith.SendEventChanSize(0)(options)
sessionWith.RecvEventChanSize(0)(options)
sessionWith.RecvDataHandler(nil)(options)
sessionWith.RecvEventHandler(nil)(options)
}
}
func (_SessionOption) StateChangedHandler(handler SessionStateChangedHandler) option.Setting[_SessionOptions] {
return func(options *_SessionOptions) {
options.StateChangedHandler = handler
}
}
func (_SessionOption) SendDataChanSize(size int) option.Setting[_SessionOptions] {
return func(options *_SessionOptions) {
if size > 0 {
options.SendDataChan = make(chan binaryutil.RecycleBytes, size)
} else {
options.SendDataChan = nil
}
}
}
func (_SessionOption) RecvDataChanSize(size int, recyclable bool) option.Setting[_SessionOptions] {
return func(options *_SessionOptions) {
if size > 0 {
options.RecvDataChan = make(chan binaryutil.RecycleBytes, size)
} else {
options.RecvDataChan = nil
}
options.RecvDataChanRecyclable = recyclable
}
}
func (_SessionOption) SendEventChanSize(size int) option.Setting[_SessionOptions] {
return func(options *_SessionOptions) {
if size > 0 {
options.SendEventChan = make(chan transport.Event[gtp.MsgReader], size)
} else {
options.SendEventChan = nil
}
}
}
func (_SessionOption) RecvEventChanSize(size int) option.Setting[_SessionOptions] {
return func(options *_SessionOptions) {
if size > 0 {
options.RecvEventChan = make(chan transport.Event[gtp.Msg], size)
} else {
options.RecvEventChan = nil
}
}
}
func (_SessionOption) RecvDataHandler(handler SessionRecvDataHandler) option.Setting[_SessionOptions] {
return func(options *_SessionOptions) {
options.RecvDataHandler = handler
}
}
func (_SessionOption) RecvEventHandler(handler SessionRecvEventHandler) option.Setting[_SessionOptions] {
return func(options *_SessionOptions) {
options.RecvEventHandler = handler
}
}