98b0736d
zhangqijia
添加定时器, 检查心跳
|
1
2
3
4
5
6
7
8
|
package db
import (
"reflect"
"strings"
)
type Schema struct {
|
33ea26ab
zhangqijia
使用schema封装mongo
|
9
10
11
12
|
mgo *MgoColl
reflectValue *reflect.Value
reflectType reflect.Type
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
13
|
cacheFields map[string]interface{}
|
33ea26ab
zhangqijia
使用schema封装mongo
|
14
|
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
15
16
17
18
|
pri interface{}
schema interface{}
}
|
33ea26ab
zhangqijia
使用schema封装mongo
|
19
20
|
func NewSchema(key string, schema interface{}) *Schema {
s := reflect.ValueOf(schema)
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
21
|
if s.Kind() == reflect.Ptr {
|
33ea26ab
zhangqijia
使用schema封装mongo
|
22
|
s = reflect.ValueOf(schema).Elem()
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
23
|
}
|
33ea26ab
zhangqijia
使用schema封装mongo
|
24
25
26
|
sch := &Schema{
reflectValue: &s,
reflectType: s.Type(),
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
27
|
cacheFields: make(map[string]interface{}),
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
28
29
|
schema: schema,
}
|
33ea26ab
zhangqijia
使用schema封装mongo
|
30
31
32
|
sch.mgo = NewMongoColl(sch)
sch.pri = GetBsonD(sch.getPriTag(), key)
return sch
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
33
34
|
}
|
33ea26ab
zhangqijia
使用schema封装mongo
|
35
36
|
func (s *Schema) GetSchemaType() reflect.Type {
return s.reflectType
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
37
38
|
}
|
33ea26ab
zhangqijia
使用schema封装mongo
|
39
|
func (s *Schema) GetCollName() string {
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
40
41
42
|
return strings.ToLower(s.GetSchemaType().Name())
}
|
33ea26ab
zhangqijia
使用schema封装mongo
|
43
|
func (s *Schema) getPriTag() string {
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
44
|
var pri string
|
33ea26ab
zhangqijia
使用schema封装mongo
|
45
46
47
|
for i := 0; i < s.reflectType.NumField(); i++ {
if s.reflectType.Field(i).Tag.Get("pri") == "1" {
pri = strings.ToLower(s.reflectType.Field(i).Name)
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
48
49
50
51
52
|
break
}
}
return pri
}
|
33ea26ab
zhangqijia
使用schema封装mongo
|
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
func (s *Schema) GetPri() interface{} {
return s.pri
}
func (s *Schema) GetSchema() interface{} {
return s.schema
}
func (s *Schema) Load() error {
return s.mgo.Load()
}
func (s *Schema) Create() error {
_, err := s.mgo.Create()
return err
}
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
71
72
73
74
75
76
77
|
func (s *Schema) Update() {
if s.cacheFields != nil {
s.mgo.UpdateProperties(s.cacheFields)
s.cacheFields = make(map[string]interface{})
}
}
|
7f269318
zhangqijia
add pb.go; 添加关闭连接...
|
78
|
func (s *Schema) SetProperty(key string, val interface{}) {
|
33ea26ab
zhangqijia
使用schema封装mongo
|
79
|
s.reflectValue.FieldByName(key).Set(reflect.ValueOf(val))
|
7f269318
zhangqijia
add pb.go; 添加关闭连接...
|
80
|
s.cacheFields[strings.ToLower(key)] = val
|
33ea26ab
zhangqijia
使用schema封装mongo
|
81
82
|
}
|
7f269318
zhangqijia
add pb.go; 添加关闭连接...
|
83
|
func (s *Schema) SetProperties(properties map[string]interface{}) {
|
33ea26ab
zhangqijia
使用schema封装mongo
|
84
85
|
for key, val := range properties {
s.reflectValue.FieldByName(key).Set(reflect.ValueOf(val))
|
7f269318
zhangqijia
add pb.go; 添加关闭连接...
|
86
|
s.cacheFields[strings.ToLower(key)] = val
|
33ea26ab
zhangqijia
使用schema封装mongo
|
87
|
}
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
88
|
}
|