Commit 33ea26abaec01e8c0c191152e886fc11a0bd5c5a
1 parent
6f0d72bd
使用schema封装mongo
Showing
17 changed files
with
118 additions
and
226 deletions
Show diff stats
Makefile
@@ -9,14 +9,14 @@ gen: | @@ -9,14 +9,14 @@ gen: | ||
9 | test: | 9 | test: |
10 | go run test/client.go | 10 | go run test/client.go |
11 | http: | 11 | http: |
12 | - go run cmd/http.go | 12 | + go run -race cmd/http.go |
13 | 13 | ||
14 | game: | 14 | game: |
15 | - go run cmd/game.go | 15 | + go run -race cmd/game.go |
16 | build: | 16 | build: |
17 | - go build -o bin/account cmd/http.go | ||
18 | - go build -o bin/game cmd/game.go | ||
19 | - go build -o bin/test test/client.go | 17 | + go build -race -o bin/account cmd/http.go |
18 | + go build -race -o bin/game cmd/game.go | ||
19 | + go build -race -o bin/test test/client.go | ||
20 | regame:plugin | 20 | regame:plugin |
21 | lsof -i:8849 | grep "game" | grep -v grep | awk '{print $$2}' | xargs -I {} kill -USR1 {} | 21 | lsof -i:8849 | grep "game" | grep -v grep | awk '{print $$2}' | xargs -I {} kill -USR1 {} |
22 | 22 |
src/actions/AccountAction.go
@@ -26,7 +26,7 @@ func (h *AccountAction) Register(c *gin.Context) (int, interface{}){ | @@ -26,7 +26,7 @@ func (h *AccountAction) Register(c *gin.Context) (int, interface{}){ | ||
26 | 26 | ||
27 | account.Uid = conf.SnowFlack.NextValStr() | 27 | account.Uid = conf.SnowFlack.NextValStr() |
28 | account.Password = utils.Md5V(register.Password) | 28 | account.Password = utils.Md5V(register.Password) |
29 | - if _, err := account.Create(); err != nil{ | 29 | + if err := account.Create(); err != nil{ |
30 | return -3, "account register err: " + err.Error() | 30 | return -3, "account register err: " + err.Error() |
31 | } | 31 | } |
32 | account.Password = register.Password | 32 | account.Password = register.Password |
src/common/common.go
src/components/db/mongo.go
@@ -76,8 +76,7 @@ func SetUnique(collection string, key string) (string, error) { | @@ -76,8 +76,7 @@ func SetUnique(collection string, key string) (string, error) { | ||
76 | type MgoColl struct { | 76 | type MgoColl struct { |
77 | collection *mongo.Collection | 77 | collection *mongo.Collection |
78 | 78 | ||
79 | - pri interface{} | ||
80 | - schema interface{} | 79 | + schema *Schema |
81 | } | 80 | } |
82 | 81 | ||
83 | func GetBsonD(key string, value interface{}) interface{} { | 82 | func GetBsonD(key string, value interface{}) interface{} { |
@@ -87,10 +86,9 @@ func GetBsonM(key string, value interface{}) interface{} { | @@ -87,10 +86,9 @@ func GetBsonM(key string, value interface{}) interface{} { | ||
87 | return bson.M{key: value} | 86 | return bson.M{key: value} |
88 | } | 87 | } |
89 | 88 | ||
90 | -func NewMongoColl(key string, schema interface{}) *MgoColl { | 89 | +func NewMongoColl(schema *Schema) *MgoColl { |
91 | return &MgoColl{ | 90 | return &MgoColl{ |
92 | - collection: MongoDatabase.Collection(utils.GetCollName(schema)), | ||
93 | - pri: GetBsonM(utils.GetPriKey(schema), key), | 91 | + collection: MongoDatabase.Collection(schema.GetCollName()), |
94 | schema: schema, | 92 | schema: schema, |
95 | } | 93 | } |
96 | } | 94 | } |
@@ -196,7 +194,7 @@ func (m *MgoColl) FindOneAndUpdate(filter interface{}, update interface{})*mongo | @@ -196,7 +194,7 @@ func (m *MgoColl) FindOneAndUpdate(filter interface{}, update interface{})*mongo | ||
196 | } | 194 | } |
197 | 195 | ||
198 | func (m *MgoColl) UpdateOne(filter interface{}, update interface{})*mongo.UpdateResult { | 196 | func (m *MgoColl) UpdateOne(filter interface{}, update interface{})*mongo.UpdateResult { |
199 | - res, err := m.collection.UpdateOne(context.TODO(), filter, update) | 197 | + res, err := m.collection.UpdateOne(context.TODO(), filter, bson.D{{"$set", update}}) |
200 | if err != nil { | 198 | if err != nil { |
201 | return nil | 199 | return nil |
202 | } | 200 | } |
@@ -204,10 +202,9 @@ func (m *MgoColl) UpdateOne(filter interface{}, update interface{})*mongo.Update | @@ -204,10 +202,9 @@ func (m *MgoColl) UpdateOne(filter interface{}, update interface{})*mongo.Update | ||
204 | return res | 202 | return res |
205 | } | 203 | } |
206 | 204 | ||
207 | - | ||
208 | func (m *MgoColl) Load() error{ | 205 | func (m *MgoColl) Load() error{ |
209 | - r := m.collection.FindOne(context.TODO(), m.pri) | ||
210 | - err := r.Decode(m.schema) | 206 | + r := m.collection.FindOne(context.TODO(), m.schema.GetPri()) |
207 | + err := r.Decode(m.schema.GetSchema()) | ||
211 | if err != nil { | 208 | if err != nil { |
212 | return err | 209 | return err |
213 | } | 210 | } |
@@ -215,17 +212,13 @@ func (m *MgoColl) Load() error{ | @@ -215,17 +212,13 @@ func (m *MgoColl) Load() error{ | ||
215 | } | 212 | } |
216 | 213 | ||
217 | func (m *MgoColl) Create() (*mongo.InsertOneResult, error){ | 214 | func (m *MgoColl) Create() (*mongo.InsertOneResult, error){ |
218 | - return m.collection.InsertOne(context.TODO(), m.schema) | ||
219 | -} | ||
220 | - | ||
221 | -func (m *MgoColl) Update(update interface{}) { | ||
222 | - m.FindOneAndUpdate(m.pri, update) | 215 | + return m.collection.InsertOne(context.TODO(), m.schema.GetSchema()) |
223 | } | 216 | } |
224 | 217 | ||
225 | func (m *MgoColl) UpdateProperty(key string, val interface{}) { | 218 | func (m *MgoColl) UpdateProperty(key string, val interface{}) { |
226 | - m.FindOneAndUpdate(m.pri, bson.M{strings.ToLower(key): val}) | 219 | + m.UpdateOne(m.schema.GetPri(), bson.M{strings.ToLower(key): val}) |
227 | } | 220 | } |
228 | 221 | ||
229 | -func (m *MgoColl)Save() { | ||
230 | - m.FindOneAndUpdate(m.pri, m.schema) | ||
231 | -} | ||
232 | \ No newline at end of file | 222 | \ No newline at end of file |
223 | +func (m *MgoColl) UpdateProperties(properties map[string]interface{}) { | ||
224 | + m.UpdateOne(m.schema.GetPri(), properties) | ||
225 | +} |
src/components/db/schema.go
@@ -6,38 +6,74 @@ import ( | @@ -6,38 +6,74 @@ import ( | ||
6 | ) | 6 | ) |
7 | 7 | ||
8 | type Schema struct { | 8 | type Schema struct { |
9 | - reflect.Type | 9 | + mgo *MgoColl |
10 | + reflectValue *reflect.Value | ||
11 | + reflectType reflect.Type | ||
12 | + | ||
13 | + | ||
10 | pri interface{} | 14 | pri interface{} |
11 | schema interface{} | 15 | schema interface{} |
12 | } | 16 | } |
13 | 17 | ||
14 | -func NewSchema(pri, schema interface{}) *Schema { | ||
15 | - s := reflect.TypeOf(schema) | 18 | +func NewSchema(key string, schema interface{}) *Schema { |
19 | + s := reflect.ValueOf(schema) | ||
16 | if s.Kind() == reflect.Ptr { | 20 | if s.Kind() == reflect.Ptr { |
17 | - s = reflect.TypeOf(s).Elem() | 21 | + s = reflect.ValueOf(schema).Elem() |
18 | } | 22 | } |
19 | - return &Schema{ | ||
20 | - Type: s, | ||
21 | - pri: pri, | 23 | + sch := &Schema{ |
24 | + reflectValue: &s, | ||
25 | + reflectType: s.Type(), | ||
22 | schema: schema, | 26 | schema: schema, |
23 | } | 27 | } |
28 | + sch.mgo = NewMongoColl(sch) | ||
29 | + sch.pri = GetBsonD(sch.getPriTag(), key) | ||
30 | + return sch | ||
24 | } | 31 | } |
25 | 32 | ||
26 | -func (s *Schema)GetSchemaType() reflect.Type { | ||
27 | - return s.Type | 33 | +func (s *Schema) GetSchemaType() reflect.Type { |
34 | + return s.reflectType | ||
28 | } | 35 | } |
29 | 36 | ||
30 | -func (s *Schema)GetCollName() string { | 37 | +func (s *Schema) GetCollName() string { |
31 | return strings.ToLower(s.GetSchemaType().Name()) | 38 | return strings.ToLower(s.GetSchemaType().Name()) |
32 | } | 39 | } |
33 | 40 | ||
34 | -func (s *Schema)GetPriKey() string { | 41 | +func (s *Schema) getPriTag() string { |
35 | var pri string | 42 | var pri string |
36 | - for i := 0; i < s.NumField(); i++ { | ||
37 | - if s.Field(i).Tag.Get("pri") == "1" { | ||
38 | - pri = strings.ToLower(s.Field(i).Name) | 43 | + for i := 0; i < s.reflectType.NumField(); i++ { |
44 | + if s.reflectType.Field(i).Tag.Get("pri") == "1" { | ||
45 | + pri = strings.ToLower(s.reflectType.Field(i).Name) | ||
39 | break | 46 | break |
40 | } | 47 | } |
41 | } | 48 | } |
42 | return pri | 49 | return pri |
43 | } | 50 | } |
51 | + | ||
52 | +func (s *Schema) GetPri() interface{} { | ||
53 | + return s.pri | ||
54 | +} | ||
55 | + | ||
56 | +func (s *Schema) GetSchema() interface{} { | ||
57 | + return s.schema | ||
58 | +} | ||
59 | + | ||
60 | +func (s *Schema) Load() error { | ||
61 | + return s.mgo.Load() | ||
62 | +} | ||
63 | + | ||
64 | +func (s *Schema) Create() error { | ||
65 | + _, err := s.mgo.Create() | ||
66 | + return err | ||
67 | +} | ||
68 | + | ||
69 | +func (s *Schema) UpdateProperty(key string, val interface{}) { | ||
70 | + s.reflectValue.FieldByName(key).Set(reflect.ValueOf(val)) | ||
71 | + s.mgo.UpdateProperty(key, val) | ||
72 | +} | ||
73 | + | ||
74 | +func (s *Schema) UpdateProperties(properties map[string]interface{}) { | ||
75 | + for key, val := range properties { | ||
76 | + s.reflectValue.FieldByName(key).Set(reflect.ValueOf(val)) | ||
77 | + } | ||
78 | + s.mgo.UpdateProperties(properties) | ||
79 | +} |
src/components/jwt/jwt.go deleted
@@ -1,96 +0,0 @@ | @@ -1,96 +0,0 @@ | ||
1 | -package jwt | ||
2 | - | ||
3 | -import ( | ||
4 | - "context" | ||
5 | - "fmt" | ||
6 | - "pro2d/src/common" | ||
7 | - "pro2d/src/components/logger" | ||
8 | - "time" | ||
9 | - | ||
10 | - jwt "github.com/dgrijalva/jwt-go" | ||
11 | - "google.golang.org/grpc/metadata" | ||
12 | -) | ||
13 | - | ||
14 | -func CreateToken(uid string) (tokenString string) { | ||
15 | - token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ | ||
16 | - "iss": "pro2d-app-server", | ||
17 | - "aud": "pro2d-app-server", | ||
18 | - "nbf": time.Now().Unix(), | ||
19 | - "exp": time.Now().Add(time.Hour).Unix(), | ||
20 | - "sub": "pro2d", | ||
21 | - "uid": uid, | ||
22 | - }) | ||
23 | - tokenString, err := token.SignedString([]byte(common.Pro2DTokenSignedString)) | ||
24 | - if err != nil { | ||
25 | - panic(err) | ||
26 | - } | ||
27 | - return tokenString | ||
28 | -} | ||
29 | - | ||
30 | -func ParseToken(tokenStr string) string { | ||
31 | - var clientClaims Claims | ||
32 | - token, err := jwt.ParseWithClaims(tokenStr, &clientClaims, func(token *jwt.Token) (interface{}, error) { | ||
33 | - if token.Header["alg"] != "HS256" { | ||
34 | - //panic("ErrInvalidAlgorithm") | ||
35 | - logger.Error("ErrInvalidAlgorithm") | ||
36 | - return nil, nil | ||
37 | - } | ||
38 | - return []byte(common.Pro2DTokenSignedString), nil | ||
39 | - }) | ||
40 | - if err != nil { | ||
41 | - logger.Error("jwt parse error") | ||
42 | - return "" | ||
43 | - } | ||
44 | - | ||
45 | - if !token.Valid { | ||
46 | - logger.Error("ErrInvalidToken") | ||
47 | - return "" | ||
48 | - } | ||
49 | - return clientClaims.Uid | ||
50 | -} | ||
51 | - | ||
52 | - | ||
53 | -// Claims defines the struct containing the token claims. | ||
54 | -type Claims struct { | ||
55 | - jwt.StandardClaims | ||
56 | - Uid string | ||
57 | -} | ||
58 | - | ||
59 | -// 从 context 的 metadata 中,取出 token | ||
60 | -func getTokenFromContext(ctx context.Context) (string, error) { | ||
61 | - md, ok := metadata.FromIncomingContext(ctx) | ||
62 | - if !ok { | ||
63 | - return "", fmt.Errorf("ErrNoMetadataInContext") | ||
64 | - } | ||
65 | - // md 的类型是 type MD map[string][]string | ||
66 | - token, ok := md["authorization"] | ||
67 | - if !ok || len(token) == 0 { | ||
68 | - return "", fmt.Errorf("ErrNoAuthorizationInMetadata") | ||
69 | - } | ||
70 | - // 因此,token 是一个字符串数组,我们只用了 token[0] | ||
71 | - return token[0], nil | ||
72 | -} | ||
73 | - | ||
74 | -func CheckAuth(ctx context.Context) string { | ||
75 | - tokenStr, err := getTokenFromContext(ctx) | ||
76 | - if err != nil { | ||
77 | - logger.Error("get token from context error") | ||
78 | - return "" | ||
79 | - } | ||
80 | - return ParseToken(tokenStr) | ||
81 | -} | ||
82 | - | ||
83 | -// AuthToken 自定义认证 客户端使用 | ||
84 | -type AuthToken struct { | ||
85 | - Token string | ||
86 | -} | ||
87 | - | ||
88 | -func (c AuthToken) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { | ||
89 | - return map[string]string{ | ||
90 | - "authorization": c.Token, | ||
91 | - }, nil | ||
92 | -} | ||
93 | - | ||
94 | -func (c AuthToken) RequireTransportSecurity() bool { | ||
95 | - return false | ||
96 | -} | ||
97 | \ No newline at end of file | 0 | \ No newline at end of file |
src/components/jwt/jwt_test.go deleted
@@ -1,18 +0,0 @@ | @@ -1,18 +0,0 @@ | ||
1 | -package jwt | ||
2 | - | ||
3 | -import ( | ||
4 | - "fmt" | ||
5 | - "pro2d/protos/pb" | ||
6 | - "testing" | ||
7 | -) | ||
8 | - | ||
9 | -func TestCreateToken(t *testing.T) { | ||
10 | - account := &pb.Account{ | ||
11 | - Phone: "17683852936", | ||
12 | - Password: "123456", | ||
13 | - Uid: "12312", | ||
14 | - } | ||
15 | - token := CreateToken(account.Uid) | ||
16 | - ac := ParseToken(token) | ||
17 | - fmt.Println("token: ", token, "\nac: ", ac) | ||
18 | -} |
src/components/net/conn.go
@@ -28,7 +28,6 @@ type Connection struct { | @@ -28,7 +28,6 @@ type Connection struct { | ||
28 | writer *bufio.Writer | 28 | writer *bufio.Writer |
29 | 29 | ||
30 | WBuffer chan []byte | 30 | WBuffer chan []byte |
31 | - RBuffer chan *MsgPkg | ||
32 | 31 | ||
33 | Quit chan *Connection | 32 | Quit chan *Connection |
34 | 33 | ||
@@ -52,7 +51,6 @@ func NewConn(id int, conn net.Conn, s *Server) *Connection { | @@ -52,7 +51,6 @@ func NewConn(id int, conn net.Conn, s *Server) *Connection { | ||
52 | scanner: bufio.NewScanner(conn), | 51 | scanner: bufio.NewScanner(conn), |
53 | writer: bufio.NewWriter(conn), | 52 | writer: bufio.NewWriter(conn), |
54 | WBuffer: make(chan []byte), | 53 | WBuffer: make(chan []byte), |
55 | - RBuffer: make(chan *MsgPkg), | ||
56 | Quit: make(chan *Connection), | 54 | Quit: make(chan *Connection), |
57 | lastHeartCheckTime: utils.Timex(), | 55 | lastHeartCheckTime: utils.Timex(), |
58 | heartTimeoutCount: 0, | 56 | heartTimeoutCount: 0, |
@@ -99,18 +97,16 @@ func (c *Connection) read() { | @@ -99,18 +97,16 @@ func (c *Connection) read() { | ||
99 | 97 | ||
100 | if err := c.scanner.Err(); err != nil { | 98 | if err := c.scanner.Err(); err != nil { |
101 | fmt.Printf("scanner.err: %s\n", err.Error()) | 99 | fmt.Printf("scanner.err: %s\n", err.Error()) |
102 | - c.Quiting() | ||
103 | return | 100 | return |
104 | } | 101 | } |
105 | } | 102 | } |
106 | 103 | ||
107 | - | ||
108 | func (c *Connection) checkHeartBeat(now int64) { | 104 | func (c *Connection) checkHeartBeat(now int64) { |
109 | lastHeartCheckTime := atomic.LoadInt64(&c.lastHeartCheckTime) | 105 | lastHeartCheckTime := atomic.LoadInt64(&c.lastHeartCheckTime) |
110 | logger.Debug("checkHeartBeat ID: %d, last: %d, now: %d", c.Id, lastHeartCheckTime, now) | 106 | logger.Debug("checkHeartBeat ID: %d, last: %d, now: %d", c.Id, lastHeartCheckTime, now) |
111 | - if math.Abs(float64(lastHeartCheckTime - now)) > common.HEART_TIMER_INTERVAL { | 107 | + if math.Abs(float64(lastHeartCheckTime - now)) > common.HeartTimerInterval { |
112 | c.heartTimeoutCount++ | 108 | c.heartTimeoutCount++ |
113 | - if c.heartTimeoutCount >= common.HEART_TIMEOUT_COUNT_MAX { | 109 | + if c.heartTimeoutCount >= common.HeartTimeoutCountMax { |
114 | c.Quiting() | 110 | c.Quiting() |
115 | return | 111 | return |
116 | } | 112 | } |
@@ -125,31 +121,18 @@ func (c *Connection) update() { | @@ -125,31 +121,18 @@ func (c *Connection) update() { | ||
125 | now := utils.Timex() | 121 | now := utils.Timex() |
126 | if now >= nextCheckTime { | 122 | if now >= nextCheckTime { |
127 | c.checkHeartBeat(now) | 123 | c.checkHeartBeat(now) |
128 | - nextCheckTime = now + common.HEART_TIMER_INTERVAL | 124 | + nextCheckTime = now + common.HeartTimerInterval |
129 | atomic.StoreInt64(&c.nextCheckTime, nextCheckTime) | 125 | atomic.StoreInt64(&c.nextCheckTime, nextCheckTime) |
130 | } | 126 | } |
131 | } | 127 | } |
132 | -// | ||
133 | -//func (c *Connection) SetLastHeartCheckTime() { | ||
134 | -// now := utils.Timex() | ||
135 | -// lastHeartCheckTime := atomic.LoadInt64(&c.lastHeartCheckTime) | ||
136 | -// if now - lastHeartCheckTime < common.HEART_TIMER_INTERVAL { | ||
137 | -// logger.Debug("heart too quick") | ||
138 | -// } | ||
139 | -// atomic.StoreInt64(&c.lastHeartCheckTime, now) | ||
140 | -//} | 128 | + |
141 | 129 | ||
142 | func (c *Connection) Start() { | 130 | func (c *Connection) Start() { |
143 | go c.write() | 131 | go c.write() |
144 | go c.read() | 132 | go c.read() |
145 | - //for { | ||
146 | - // c.SendMsgByCode(100, 1, nil) | ||
147 | - // time.Sleep(2*time.Second) | ||
148 | - //} | ||
149 | } | 133 | } |
150 | 134 | ||
151 | func (c *Connection) Stop() { | 135 | func (c *Connection) Stop() { |
152 | - close(c.RBuffer) | ||
153 | c.Conn.Close() | 136 | c.Conn.Close() |
154 | } | 137 | } |
155 | 138 |
src/components/timewheel/timerwheel.go
@@ -99,7 +99,7 @@ func NewTimeWheel() *TimeWheel { | @@ -99,7 +99,7 @@ func NewTimeWheel() *TimeWheel { | ||
99 | 99 | ||
100 | func (tw *TimeWheel) add(t *timer) bool { | 100 | func (tw *TimeWheel) add(t *timer) bool { |
101 | time := t.expiration | 101 | time := t.expiration |
102 | - currentTime := tw.time | 102 | + currentTime := atomic.LoadUint32(&tw.time) |
103 | if time <= currentTime { | 103 | if time <= currentTime { |
104 | return false | 104 | return false |
105 | } | 105 | } |
@@ -136,8 +136,7 @@ func (tw *TimeWheel) moveList(level, idx int) { | @@ -136,8 +136,7 @@ func (tw *TimeWheel) moveList(level, idx int) { | ||
136 | 136 | ||
137 | func (tw *TimeWheel) shift() { | 137 | func (tw *TimeWheel) shift() { |
138 | mask := TimeNear | 138 | mask := TimeNear |
139 | - tw.time++ | ||
140 | - ct := tw.time | 139 | + ct := atomic.AddUint32(&tw.time, 1) |
141 | if ct == 0 { | 140 | if ct == 0 { |
142 | tw.moveList(3, 0) | 141 | tw.moveList(3, 0) |
143 | }else { | 142 | }else { |
src/models/account.go
@@ -6,7 +6,7 @@ import ( | @@ -6,7 +6,7 @@ import ( | ||
6 | ) | 6 | ) |
7 | 7 | ||
8 | type AccountModel struct { | 8 | type AccountModel struct { |
9 | - *db.MgoColl | 9 | + *db.Schema |
10 | *pb.Account | 10 | *pb.Account |
11 | } | 11 | } |
12 | 12 | ||
@@ -23,7 +23,7 @@ func NewAccount(phone string) *AccountModel { | @@ -23,7 +23,7 @@ func NewAccount(phone string) *AccountModel { | ||
23 | Phone: phone, | 23 | Phone: phone, |
24 | } | 24 | } |
25 | account := &AccountModel{ | 25 | account := &AccountModel{ |
26 | - MgoColl: db.NewMongoColl(phone, ac), | 26 | + Schema: db.NewSchema(phone, ac), |
27 | Account: ac, | 27 | Account: ac, |
28 | } | 28 | } |
29 | 29 |
src/models/equip.go
@@ -3,20 +3,19 @@ package models | @@ -3,20 +3,19 @@ package models | ||
3 | import ( | 3 | import ( |
4 | "pro2d/protos/pb" | 4 | "pro2d/protos/pb" |
5 | "pro2d/src/components/db" | 5 | "pro2d/src/components/db" |
6 | - "strconv" | ||
7 | ) | 6 | ) |
8 | 7 | ||
9 | type EquipModels struct { | 8 | type EquipModels struct { |
10 | - *db.MgoColl | 9 | + *db.Schema |
11 | Equip *pb.Equipment | 10 | Equip *pb.Equipment |
12 | } | 11 | } |
13 | 12 | ||
14 | -func NewEquip(id int64) *EquipModels { | 13 | +func NewEquip(id string) *EquipModels { |
15 | data := &pb.Equipment{ | 14 | data := &pb.Equipment{ |
16 | Id: id, | 15 | Id: id, |
17 | } | 16 | } |
18 | m := &EquipModels{ | 17 | m := &EquipModels{ |
19 | - MgoColl: db.NewMongoColl(strconv.Itoa(int(id)), data), | 18 | + Schema: db.NewSchema(id, data), |
20 | Equip: data, | 19 | Equip: data, |
21 | } | 20 | } |
22 | 21 |
src/models/hero.go
@@ -3,11 +3,10 @@ package models | @@ -3,11 +3,10 @@ package models | ||
3 | import ( | 3 | import ( |
4 | "pro2d/protos/pb" | 4 | "pro2d/protos/pb" |
5 | "pro2d/src/components/db" | 5 | "pro2d/src/components/db" |
6 | - "strconv" | ||
7 | ) | 6 | ) |
8 | 7 | ||
9 | type HeroModel struct { | 8 | type HeroModel struct { |
10 | - *db.MgoColl | 9 | + *db.Schema |
11 | Hero *pb.Hero | 10 | Hero *pb.Hero |
12 | } | 11 | } |
13 | type HeroMap map[string]*HeroModel | 12 | type HeroMap map[string]*HeroModel |
@@ -20,12 +19,12 @@ func GetHeros(hm HeroMap) map[string]*pb.Hero { | @@ -20,12 +19,12 @@ func GetHeros(hm HeroMap) map[string]*pb.Hero { | ||
20 | return h | 19 | return h |
21 | } | 20 | } |
22 | 21 | ||
23 | -func NewHero(id int64) *HeroModel { | 22 | +func NewHero(id string) *HeroModel { |
24 | h := &pb.Hero{ | 23 | h := &pb.Hero{ |
25 | Id: id, | 24 | Id: id, |
26 | } | 25 | } |
27 | m := &HeroModel{ | 26 | m := &HeroModel{ |
28 | - MgoColl: db.NewMongoColl(strconv.Itoa(int(id)), h), | 27 | + Schema: db.NewSchema(id, h), |
29 | Hero: h, | 28 | Hero: h, |
30 | } | 29 | } |
31 | return m | 30 | return m |
src/models/prop.go
@@ -3,20 +3,19 @@ package models | @@ -3,20 +3,19 @@ package models | ||
3 | import ( | 3 | import ( |
4 | "pro2d/protos/pb" | 4 | "pro2d/protos/pb" |
5 | "pro2d/src/components/db" | 5 | "pro2d/src/components/db" |
6 | - "strconv" | ||
7 | ) | 6 | ) |
8 | 7 | ||
9 | type PropModels struct { | 8 | type PropModels struct { |
10 | - *db.MgoColl | 9 | + *db.Schema |
11 | Prop *pb.Prop | 10 | Prop *pb.Prop |
12 | } | 11 | } |
13 | 12 | ||
14 | -func NewProp(id int64) *PropModels { | 13 | +func NewProp(id string) *PropModels { |
15 | data := &pb.Prop{ | 14 | data := &pb.Prop{ |
16 | Id: id, | 15 | Id: id, |
17 | } | 16 | } |
18 | m := &PropModels{ | 17 | m := &PropModels{ |
19 | - MgoColl: db.NewMongoColl(strconv.Itoa(int(id)), data), | 18 | + Schema: db.NewSchema(id, data), |
20 | Prop: data, | 19 | Prop: data, |
21 | } | 20 | } |
22 | 21 |
src/models/role.go
@@ -5,11 +5,10 @@ import ( | @@ -5,11 +5,10 @@ import ( | ||
5 | "pro2d/protos/pb" | 5 | "pro2d/protos/pb" |
6 | "pro2d/src/components/db" | 6 | "pro2d/src/components/db" |
7 | "pro2d/src/components/logger" | 7 | "pro2d/src/components/logger" |
8 | - "strconv" | ||
9 | ) | 8 | ) |
10 | 9 | ||
11 | type RoleModel struct { | 10 | type RoleModel struct { |
12 | - *db.MgoColl | 11 | + *db.Schema |
13 | Role *pb.Role | 12 | Role *pb.Role |
14 | Heros HeroMap | 13 | Heros HeroMap |
15 | Teams *TeamModel | 14 | Teams *TeamModel |
@@ -27,7 +26,7 @@ func RoleExistByUid(uid string) *RoleModel { | @@ -27,7 +26,7 @@ func RoleExistByUid(uid string) *RoleModel { | ||
27 | 26 | ||
28 | 27 | ||
29 | r := &RoleModel{ | 28 | r := &RoleModel{ |
30 | - MgoColl: db.NewMongoColl(strconv.Itoa(int(data.Id)), data), | 29 | + Schema: db.NewSchema(data.Id, data), |
31 | Role: data, | 30 | Role: data, |
32 | Heros: make(HeroMap), | 31 | Heros: make(HeroMap), |
33 | Teams: new(TeamModel), | 32 | Teams: new(TeamModel), |
@@ -38,10 +37,10 @@ func RoleExistByUid(uid string) *RoleModel { | @@ -38,10 +37,10 @@ func RoleExistByUid(uid string) *RoleModel { | ||
38 | return r | 37 | return r |
39 | } | 38 | } |
40 | 39 | ||
41 | -func NewRole(id int64) *RoleModel { | 40 | +func NewRole(id string) *RoleModel { |
42 | data := &pb.Role{Id: id} | 41 | data := &pb.Role{Id: id} |
43 | m := &RoleModel{ | 42 | m := &RoleModel{ |
44 | - MgoColl: db.NewMongoColl(strconv.Itoa(int(id)), data), | 43 | + Schema: db.NewSchema(id, data), |
45 | Role: data, | 44 | Role: data, |
46 | Heros: make(HeroMap), | 45 | Heros: make(HeroMap), |
47 | Teams: new(TeamModel), | 46 | Teams: new(TeamModel), |
@@ -52,9 +51,9 @@ func NewRole(id int64) *RoleModel { | @@ -52,9 +51,9 @@ func NewRole(id int64) *RoleModel { | ||
52 | } | 51 | } |
53 | 52 | ||
54 | func (m *RoleModel) LoadHero() { | 53 | func (m *RoleModel) LoadHero() { |
55 | - m.Heros["test"] = NewHero(0) | 54 | + m.Heros["test"] = NewHero("") |
56 | m.Heros["test"].Hero = &pb.Hero{ | 55 | m.Heros["test"].Hero = &pb.Hero{ |
57 | - Id: 1, | 56 | + Id: "1", |
58 | RoleId: m.Role.Id, | 57 | RoleId: m.Role.Id, |
59 | Type: 1, | 58 | Type: 1, |
60 | Level: 1, | 59 | Level: 1, |
@@ -65,17 +64,17 @@ func (m *RoleModel) LoadHero() { | @@ -65,17 +64,17 @@ func (m *RoleModel) LoadHero() { | ||
65 | } | 64 | } |
66 | 65 | ||
67 | func (m *RoleModel) LoadTeams() { | 66 | func (m *RoleModel) LoadTeams() { |
68 | - m.Teams = NewTeam(0) | 67 | + m.Teams = NewTeam("0") |
69 | m.Teams.Team = &pb.Team{ | 68 | m.Teams.Team = &pb.Team{ |
70 | - Id: 1, | 69 | + Id: "1", |
71 | HeroIds: "1", | 70 | HeroIds: "1", |
72 | } | 71 | } |
73 | } | 72 | } |
74 | 73 | ||
75 | func (m *RoleModel) LoadEquips() { | 74 | func (m *RoleModel) LoadEquips() { |
76 | - m.Equip = NewEquip(0) | 75 | + m.Equip = NewEquip("0") |
77 | m.Equip.Equip = &pb.Equipment{ | 76 | m.Equip.Equip = &pb.Equipment{ |
78 | - Id: 0, | 77 | + Id: "0", |
79 | RoleId: m.Role.Id, | 78 | RoleId: m.Role.Id, |
80 | Type: 0, | 79 | Type: 0, |
81 | Equip: false, | 80 | Equip: false, |
@@ -93,7 +92,7 @@ func (m *RoleModel) AddHero(hero *pb.Hero) { | @@ -93,7 +92,7 @@ func (m *RoleModel) AddHero(hero *pb.Hero) { | ||
93 | h := NewHero(hero.Id) | 92 | h := NewHero(hero.Id) |
94 | h.Hero = hero | 93 | h.Hero = hero |
95 | h.Create() | 94 | h.Create() |
96 | - m.Heros[fmt.Sprintf("%d%d", m.Role.Id, h.Hero.Id)] = h | 95 | + m.Heros[fmt.Sprintf("%s%s", m.Role.Id, h.Hero.Id)] = h |
97 | } | 96 | } |
98 | 97 | ||
99 | func (m *RoleModel) GetAllHero() map[string]*pb.Hero { | 98 | func (m *RoleModel) GetAllHero() map[string]*pb.Hero { |
src/models/role_test.go
@@ -2,7 +2,7 @@ package models | @@ -2,7 +2,7 @@ package models | ||
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | "fmt" | 4 | "fmt" |
5 | - "pro2d/conf" | 5 | + _ "pro2d/conf" |
6 | "pro2d/protos/pb" | 6 | "pro2d/protos/pb" |
7 | "pro2d/src/components/db" | 7 | "pro2d/src/components/db" |
8 | "pro2d/src/components/logger" | 8 | "pro2d/src/components/logger" |
@@ -13,29 +13,29 @@ import ( | @@ -13,29 +13,29 @@ import ( | ||
13 | func TestNewRole(t *testing.T) { | 13 | func TestNewRole(t *testing.T) { |
14 | db.MongoDatabase = db.MongoClient.Database("game") | 14 | db.MongoDatabase = db.MongoClient.Database("game") |
15 | 15 | ||
16 | - var uid = conf.SnowFlack.NextValStr() | 16 | + var uid = "141815055745814528" |
17 | role := RoleExistByUid(uid) | 17 | role := RoleExistByUid(uid) |
18 | if role != nil { | 18 | if role != nil { |
19 | //uid存在 , 更新角色 | 19 | //uid存在 , 更新角色 |
20 | - role.Role.Device = "222222" | ||
21 | - role.AddHero(&pb.Hero{ | ||
22 | - Id: 1, | ||
23 | - RoleId: role.Role.Id, | ||
24 | - Type: 0, | ||
25 | - Level: 0, | ||
26 | - ReinCount: 0, | ||
27 | - ReinPoint: 0, | ||
28 | - Equipments: "", | ||
29 | - }) | ||
30 | - role.Save() | 20 | + //role.AddHero(&pb.Hero{ |
21 | + // Id: 1, | ||
22 | + // RoleId: role.Role.Id, | ||
23 | + // Type: 0, | ||
24 | + // Level: 0, | ||
25 | + // ReinCount: 0, | ||
26 | + // ReinPoint: 0, | ||
27 | + // Equipments: "", | ||
28 | + //}) | ||
29 | + role.UpdateProperty("Device", "999999999") | ||
30 | + //role.Save() | ||
31 | }else { | 31 | }else { |
32 | //uid不存在,创建角色 | 32 | //uid不存在,创建角色 |
33 | - role = NewRole(1) | 33 | + role = NewRole("1") |
34 | role.Role.Uid = uid | 34 | role.Role.Uid = uid |
35 | role.Role.Device = "111111" | 35 | role.Role.Device = "111111" |
36 | role.Role.Level = 0 | 36 | role.Role.Level = 0 |
37 | - i, err := role.Create() | ||
38 | - fmt.Println(i, err) | 37 | + err := role.Create() |
38 | + fmt.Println(err) | ||
39 | } | 39 | } |
40 | print(role) | 40 | print(role) |
41 | } | 41 | } |
src/models/team.go
@@ -3,20 +3,19 @@ package models | @@ -3,20 +3,19 @@ package models | ||
3 | import ( | 3 | import ( |
4 | "pro2d/protos/pb" | 4 | "pro2d/protos/pb" |
5 | "pro2d/src/components/db" | 5 | "pro2d/src/components/db" |
6 | - "strconv" | ||
7 | ) | 6 | ) |
8 | 7 | ||
9 | type TeamModel struct { | 8 | type TeamModel struct { |
10 | - *db.MgoColl | 9 | + *db.Schema |
11 | Team *pb.Team | 10 | Team *pb.Team |
12 | } | 11 | } |
13 | 12 | ||
14 | -func NewTeam(id int64) *TeamModel { | 13 | +func NewTeam(id string) *TeamModel { |
15 | data := &pb.Team{ | 14 | data := &pb.Team{ |
16 | Id: id, | 15 | Id: id, |
17 | } | 16 | } |
18 | m := &TeamModel{ | 17 | m := &TeamModel{ |
19 | - MgoColl: db.NewMongoColl(strconv.Itoa(int(id)), data), | 18 | + Schema: db.NewSchema(id, data), |
20 | Team: data, | 19 | Team: data, |
21 | } | 20 | } |
22 | 21 |
src/plugin/RolePlugin.go
@@ -25,9 +25,9 @@ func CreateRpc(msg *net.MsgPkg) (int32, proto.Message) { | @@ -25,9 +25,9 @@ func CreateRpc(msg *net.MsgPkg) (int32, proto.Message) { | ||
25 | return 2, nil | 25 | return 2, nil |
26 | } | 26 | } |
27 | 27 | ||
28 | - roleId := conf.SnowFlack.NextVal() | 28 | + roleId := conf.SnowFlack.NextValStr() |
29 | role = models.NewRole(roleId) | 29 | role = models.NewRole(roleId) |
30 | - if _, err := role.Create(); err != nil { | 30 | + if err := role.Create(); err != nil { |
31 | logger.Error("CreateRpc role create err: %v", err) | 31 | logger.Error("CreateRpc role create err: %v", err) |
32 | return 3, nil | 32 | return 3, nil |
33 | } | 33 | } |