77f5eec7
zhangqijia
plugin 插件热更 接口
|
1
2
3
4
|
package components
import (
"plugin"
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
5
|
"pro2d/common/logger"
|
77f5eec7
zhangqijia
plugin 插件热更 接口
|
6
7
8
|
"sync"
)
|
77f5eec7
zhangqijia
plugin 插件热更 接口
|
9
10
11
12
13
|
type PluginOption func(*Plugin)
type Plugin struct {
pluginPath string
|
69d286a7
zhangqijia
fix: 插件用来做部分热更
|
14
|
Actions sync.Map
|
77f5eec7
zhangqijia
plugin 插件热更 接口
|
15
16
|
}
|
69d286a7
zhangqijia
fix: 插件用来做部分热更
|
17
18
19
20
|
func NewPlugin(path string, options ...PluginOption) IPlugin {
if path == "" {
return nil
}
|
77f5eec7
zhangqijia
plugin 插件热更 接口
|
21
22
|
p := &Plugin{
pluginPath: path,
|
69d286a7
zhangqijia
fix: 插件用来做部分热更
|
23
|
Actions: sync.Map{},
|
77f5eec7
zhangqijia
plugin 插件热更 接口
|
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
}
for _, option := range options {
option(p)
}
return p
}
func (p *Plugin) LoadPlugin() error {
plu, err := plugin.Open(p.pluginPath)
if err != nil {
return err
}
logger.Debug("func LoadPlugin open success...")
f, err := plu.Lookup("GetActionMap")
if err != nil {
return err
}
logger.Debug("func LoadPlugin Lookup success...")
|
69d286a7
zhangqijia
fix: 插件用来做部分热更
|
45
|
if x, ok := f.(func() map[interface{}]interface{}); ok {
|
77f5eec7
zhangqijia
plugin 插件热更 接口
|
46
|
logger.Debug("func LoadPlugin GetActionMap success...")
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
47
|
p.SetActions(x())
|
77f5eec7
zhangqijia
plugin 插件热更 接口
|
48
49
50
51
52
53
|
}
return nil
}
func (p *Plugin) GetAction(cmd uint32) interface{} {
|
69d286a7
zhangqijia
fix: 插件用来做部分热更
|
54
|
f, ok := p.Actions.Load(cmd)
|
77f5eec7
zhangqijia
plugin 插件热更 接口
|
55
56
57
58
59
|
if !ok {
return nil
}
return f
}
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
60
61
|
func (p *Plugin) SetActions(am map[interface{}]interface{}) {
|
29b6d86f
zhangqijia
update plugin doc
|
62
63
64
65
|
p.Actions.Range(func(key, value interface{}) bool {
p.Actions.Delete(key.(uint32))
return true
})
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
66
|
for k, v := range am {
|
69d286a7
zhangqijia
fix: 插件用来做部分热更
|
67
|
cmd := k.(uint32)
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
68
69
70
|
p.Actions.Store(cmd, v)
}
}
|