-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.go
56 lines (47 loc) · 1.29 KB
/
server.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
package xcron
import (
"context"
"fmt"
"github.com/zhiyunliu/glue/config"
"github.com/zhiyunliu/glue/engine"
)
type Server interface {
GetProto() string
GetAddr() string
Serve(ctx context.Context) (err error)
Stop(ctx context.Context) error
AddJob(jobs ...*Job) (keys []string, err error)
RemoveJob(key ...string)
}
// ServerResover 定义配置文件转换方法
type ServerResover interface {
Name() string
Resolve(name string,
router *engine.RouterGroup,
cfg config.Config,
opts ...engine.Option) (Server, error)
}
var serverResolvers = make(map[string]ServerResover)
// Register 注册配置文件适配器
func RegisterServer(resolver ServerResover) {
proto := resolver.Name()
if _, ok := serverResolvers[proto]; ok {
panic(fmt.Errorf("xcron: 不能重复注册:%s", proto))
}
serverResolvers[proto] = resolver
}
// Deregister 清理配置适配器
func DeregisterServer(name string) {
delete(serverResolvers, name)
}
// NewServer 根据适配器名称及参数返回配置处理器
func NewServer(proto string,
router *engine.RouterGroup,
cfg config.Config,
opts ...engine.Option) (Server, error) {
resolver, ok := serverResolvers[proto]
if !ok {
return nil, fmt.Errorf("xcron: 未知的协议类型:%s", proto)
}
return resolver.Resolve(proto, router, cfg, opts...)
}