Commit eb417b0bfaf68c9548e8da87e042470b2fdec1fe

Authored by zhangqijia
1 parent 2064f484

reactor mongo

actions/accountaction.go
... ... @@ -10,7 +10,7 @@ import (
10 10 )
11 11  
12 12 func (s *AccountServer) RegisterHandler(ctx context.Context, in *pb.Register) (*pb.PubRsp, error) {
13   - ok, account := models.AccountExistByPhone(s.Database, in.Phone)
  13 + ok, account := models.AccountExistByPhone(s.DBName, in.Phone)
14 14 if !ok {
15 15 account.Phone = in.Phone
16 16 account.Password = utils.Md5V(in.Password)
... ... @@ -24,7 +24,6 @@ func (s *AccountServer) RegisterHandler(ctx context.Context, in *pb.Register) (*
24 24 return &pb.PubRsp{
25 25 Code: 0,
26 26 }, nil
27   -
28 27 }
29 28  
30 29 func (s *AccountServer) CreateTokenHandler(ctx context.Context, in *pb.AccountInfo) (*pb.CreateTokenRsp, error) {
... ...
actions/basic.go
... ... @@ -3,27 +3,20 @@ package actions
3 3 import (
4 4 "fmt"
5 5 "net"
6   - "pro2d/components/db"
7 6 "pro2d/conf"
8   - "pro2d/utils"
9 7 )
10 8  
11 9 type BasicServer struct {
12   - Database *db.Database
  10 + DBName string
13 11 }
14 12  
15   -func NewServer() *BasicServer {
  13 +func NewServer(db string) *BasicServer {
16 14 return &BasicServer{
17   - Database: new(db.Database),
  15 + DBName: db,
18 16 }
19 17 }
20 18  
21 19 func (b *BasicServer) Start(sConf *conf.SConf) (net.Listener, error) {
22   - if err := b.Database.Connect(sConf.MongoConf); err !=nil {
23   - utils.Sugar.Debugf("db error: %v", err)
24   - return nil, err
25   - }
26   -
27 20 listing := fmt.Sprintf(":%d", sConf.Port)
28 21 lis, err := net.Listen("tcp", listing)
29 22 if err != nil {
... ...
actions/roleaction.go
... ... @@ -43,7 +43,7 @@ func (s *GameServer) CreateRoleHandler(ctx context.Context, in *pb.Token) (*pb.R
43 43 if account == nil {
44 44 return nil, fmt.Errorf("1")
45 45 }
46   - ok, role := models.RoleExistByUid(s.Database, account.Uid)
  46 + ok, role := models.RoleExistByUid(account.Uid)
47 47 if !ok {
48 48 role.Role = &pb.Role{
49 49 Level: 0,
... ... @@ -67,13 +67,14 @@ func (s *GameServer) LoginHandler(ctx context.Context, in *pb.Token) (*pb.RoleRs
67 67 if account == nil {
68 68 return nil, fmt.Errorf("token is error")
69 69 }
70   - ok, role := models.RoleExistByUid(s.Database, account.Uid)
  70 + ok, role := models.RoleExistByUid(account.Uid)
71 71 if !ok {
72 72 return &pb.RoleRsp{
73 73 Rsp: &pb.PubRsp{
74 74 Code: -1,
75 75 Msg: "role not exist",
76 76 },
  77 +
77 78 }, nil
78 79 }
79 80 return &pb.RoleRsp{
... ... @@ -82,5 +83,6 @@ func (s *GameServer) LoginHandler(ctx context.Context, in *pb.Token) (*pb.RoleRs
82 83 Msg: "successful",
83 84 },
84 85 Role: role.Role,
  86 + Hero: models.GetHeros(role.Heros),
85 87 }, nil
86 88 }
... ...
actions/server.go
... ... @@ -16,7 +16,7 @@ type AccountServer struct{
16 16  
17 17 func NewAccountServer() *AccountServer {
18 18 return &AccountServer{
19   - BasicServer: NewServer(),
  19 + BasicServer: NewServer(conf.GlobalConf.AccountConf.DBName),
20 20 }
21 21 }
22 22  
... ... @@ -60,7 +60,7 @@ type GameServer struct{
60 60  
61 61 func NewGameServer() *GameServer {
62 62 return &GameServer{
63   - BasicServer: NewServer(),
  63 + BasicServer: NewServer(conf.GlobalConf.GameConf.DBName),
64 64 }
65 65 }
66 66 //ๆ‹ฆๆˆชๅ™จ
... ...
components/db/mongo.go
... ... @@ -8,49 +8,47 @@ import (
8 8 "go.mongodb.org/mongo-driver/mongo/options"
9 9 "go.mongodb.org/mongo-driver/mongo/readpref"
10 10 "go.mongodb.org/mongo-driver/x/bsonx"
11   - "pro2d/conf"
12 11 "strconv"
13 12 "time"
14 13 )
15   -type Database struct {
16   - Mongo *mongo.Database
17   -}
  14 +
  15 +var MongoDBClient *mongo.Client
18 16  
19 17 //ๅˆๅง‹ๅŒ–
20   -func (db *Database)Connect(conf *conf.MongoConf) error {
  18 +func Connect(user, password, host string,port int, MaxNum int, timeOut int) error {
21 19 var uri string
22   - if conf.User!= "" {
23   - uri = fmt.Sprintf("mongodb://%s:%s@%s:%d/%s?w=majority", conf.User, conf.Password, conf.Host, conf.Port, conf.DBName)
  20 + if user!= "" {
  21 + //uri = fmt.Sprintf("mongodb://%s:%s@%s:%d/%s?w=majority", conf.User, conf.Password, conf.Host, conf.Port, conf.DBName)
  22 + uri = fmt.Sprintf("mongodb://%s:%s@%s:%d/?w=majority", user, password, host, port)
24 23 }else {
25   - uri = fmt.Sprintf("mongodb://%s:%d/%s?w=majority", conf.Host, conf.Port, conf.DBName)
  24 + //uri = fmt.Sprintf("mongodb://%s:%d/%s?w=majority", conf.Host, conf.Port, conf.DBName)
  25 + uri = fmt.Sprintf("mongodb://%s:%d/?w=majority", host, port)
26 26 }
27 27 // ่ฎพ็ฝฎ่ฟžๆŽฅ่ถ…ๆ—ถๆ—ถ้—ด
28   - ctx, cancel := context.WithTimeout(context.Background(), time.Duration(conf.TimeOut))
  28 + ctx, cancel := context.WithTimeout(context.Background(), time.Duration(timeOut))
29 29 defer cancel()
30 30 // ้€š่ฟ‡ไผ ่ฟ›ๆฅ็š„uri่ฟžๆŽฅ็›ธๅ…ณ็š„้…็ฝฎ
31 31 o := options.Client().ApplyURI(uri)
32 32 // ่ฎพ็ฝฎๆœ€ๅคง่ฟžๆŽฅๆ•ฐ - ้ป˜่ฎคๆ˜ฏ100 ๏ผŒไธ่ฎพ็ฝฎๅฐฑๆ˜ฏๆœ€ๅคง max 64
33   - o.SetMaxPoolSize(uint64(conf.MaxNum))
  33 + o.SetMaxPoolSize(uint64(MaxNum))
34 34 // ๅ‘่ตท้“พๆŽฅ
35   - client, err := mongo.Connect(ctx, o)
  35 + var err error
  36 + MongoDBClient, err = mongo.Connect(ctx, o)
36 37 if err != nil {
37   - fmt.Println("ConnectToDB", err)
38 38 return err
39 39 }
40 40 // ๅˆคๆ–ญๆœๅŠกๆ˜ฏไธๆ˜ฏๅฏ็”จ
41   - if err = client.Ping(context.Background(), readpref.Primary()); err != nil {
42   - fmt.Println("ConnectToDB", err)
  41 + if err = MongoDBClient.Ping(context.Background(), readpref.Primary()); err != nil {
43 42 return err
44 43 }
45   -
46   - db.Mongo = client.Database(conf.DBName)
47 44 return nil
48 45 }
49 46  
50   -type MgoPool struct {
51   - mgo *mongo.Database
  47 +type MgoColl struct {
  48 + mgo *mongo.Collection
52 49  
53   - collection string
  50 + pri interface{}
  51 + schema interface{}
54 52 }
55 53  
56 54 func GetBsonD(key string, value interface{}) interface{} {
... ... @@ -60,58 +58,36 @@ func GetBsonM(key string, value interface{}) interface{} {
60 58 return bson.M{key: value}
61 59 }
62 60  
63   -func NewMongoPool(mgo *Database, collection string)*MgoPool {
64   - return &MgoPool{
65   - mgo: mgo.Mongo,
66   - collection: collection,
  61 +func NewMongoColl(database, collection string, pri, schema interface{}) *MgoColl {
  62 + return &MgoColl{
  63 + mgo: MongoDBClient.Database(database).Collection(collection),
  64 +
  65 + pri: pri,
  66 + schema: schema,
67 67 }
68 68 }
69 69  
70   -func (m *MgoPool)SetDatabase(databases string) {
  70 +func (m *MgoColl)SetDatabase(databases string) {
71 71 //m.db = databases
72 72 }
73   -func (m *MgoPool)SetCollect(coll string) {
74   - m.collection = coll
75   -}
76 73  
77   -
78   -//func (m *MgoPool)Insert(coll string, buffer interface{}) error {
79   -// _, err := m.mgo.Collection(coll).InsertOne(context.TODO(), buffer)
80   -// if err != nil {
81   -// fmt.Println(err)
82   -// }
83   -// return err
84   -//}
85   -
86   -//func (m *MgoPool)FindOne(coll string, filter interface{}) (interface{}, error){
87   -// findOptions := options.FindOne()
88   -// cur := m.MongoDBClient.Collection(coll).FindOne(context.TODO(), filter, findOptions)
89   -// var role interface{}
90   -// if err := cur.Decode(role); err != nil {
91   -// return nil, err
92   -// }
93   -// return role, nil
94   -//}
95 74 // ๆŸฅ่ฏขๅ•ไธช
96   -func (m *MgoPool) FindOneKV(key string, value interface{}) *mongo.SingleResult {
97   - collection := m.mgo.Collection(m.collection)
  75 +func (m *MgoColl) FindOneKV(key string, value interface{}) *mongo.SingleResult {
98 76 //collection.
99 77 filter := bson.D{ {key, value}}
100   - singleResult := collection.FindOne(context.TODO(), filter)
  78 + singleResult := m.mgo.FindOne(context.TODO(), filter)
101 79 return singleResult
102 80 }
103 81  
104   -func (m *MgoPool) FindOne(pri interface{}) *mongo.SingleResult {
105   - collection := m.mgo.Collection(m.collection)
  82 +func (m *MgoColl) FindOne(pri interface{}) *mongo.SingleResult {
106 83 //collection.
107   - singleResult := collection.FindOne(context.TODO(), pri)
  84 + singleResult := m.mgo.FindOne(context.TODO(), pri)
108 85 return singleResult
109 86 }
110 87  
111 88 //ๆ’ๅ…ฅๅ•ไธช
112   -func (m *MgoPool) InsertOne(value interface{}) *mongo.InsertOneResult {
113   - collection := m.mgo.Collection(m.collection)
114   - insertResult, err := collection.InsertOne(context.TODO(), value)
  89 +func (m *MgoColl) InsertOne(value interface{}) *mongo.InsertOneResult {
  90 + insertResult, err := m.mgo.InsertOne(context.TODO(), value)
115 91 if err != nil {
116 92 fmt.Println(err)
117 93 }
... ... @@ -119,28 +95,25 @@ func (m *MgoPool) InsertOne(value interface{}) *mongo.InsertOneResult {
119 95 }
120 96  
121 97 //ๆŸฅ่ฏข้›†ๅˆ้‡Œๆœ‰ๅคšๅฐ‘ๆ•ฐๆฎ
122   -func (m *MgoPool) CollectionCount() (string, int64) {
123   - collection := m.mgo.Collection(m.collection)
124   - name := collection.Name()
125   - size, _ := collection.EstimatedDocumentCount(context.TODO())
126   - return name, size
  98 +func (m *MgoColl) CollectionCount() (string, int64) {
  99 + size, _ := m.mgo.EstimatedDocumentCount(context.TODO())
  100 + return m.mgo.Name(), size
127 101 }
128 102  
129 103 //ๆŒ‰้€‰้กนๆŸฅ่ฏข้›†ๅˆ Skip ่ทณ่ฟ‡ Limit ่ฏปๅ–ๆ•ฐ้‡ sort 1 ๏ผŒ-1 . 1 ไธบๆœ€ๅˆๆ—ถ้—ด่ฏปๅ– ๏ผŒ -1 ไธบๆœ€ๆ–ฐๆ—ถ้—ด่ฏปๅ–
130   -func (m *MgoPool) CollectionDocuments(Skip, Limit int64, sort int) *mongo.Cursor {
131   - collection := m.mgo.Collection(m.collection)
  104 +func (m *MgoColl) CollectionDocuments(Skip, Limit int64, sort int) *mongo.Cursor {
132 105 SORT := bson.D{
133 106 {"_id", sort}} //filter := bson.D{ {key,value}}
134 107 filter := bson.D{
135 108 {}}
136 109 findOptions := options.Find().SetSort(SORT).SetLimit(Limit).SetSkip(Skip)
137 110 //findOptions.SetLimit(i)
138   - temp, _ := collection.Find(context.Background(), filter, findOptions)
  111 + temp, _ := m.mgo.Find(context.Background(), filter, findOptions)
139 112 return temp
140 113 }
141 114  
142 115 //่Žทๅ–้›†ๅˆๅˆ›ๅปบๆ—ถ้—ดๅ’Œ็ผ–ๅท
143   -func (m *MgoPool) ParsingId(result string) (time.Time, uint64) {
  116 +func (m *MgoColl) ParsingId(result string) (time.Time, uint64) {
144 117 temp1 := result[:8]
145 118 timestamp, _ := strconv.ParseInt(temp1, 16, 64)
146 119 dateTime := time.Unix(timestamp, 0) //่ฟ™ๆ˜ฏๆˆช่Žทๆƒ…ๆŠฅๆ—ถ้—ด ๆ—ถ้—ดๆ ผๅผ 2019-04-24 09:23:39 +0800 CST
... ... @@ -150,12 +123,11 @@ func (m *MgoPool) ParsingId(result string) (time.Time, uint64) {
150 123 }
151 124  
152 125 //ๅˆ ้™คๆ–‡็ซ ๅ’ŒๆŸฅ่ฏขๆ–‡็ซ 
153   -func (m *MgoPool) DeleteAndFind(key string, value interface{}) (int64, *mongo.SingleResult) {
154   - collection := m.mgo.Collection(m.collection)
  126 +func (m *MgoColl) DeleteAndFind(key string, value interface{}) (int64, *mongo.SingleResult) {
155 127 filter := bson.D{
156 128 {key, value}}
157   - singleResult := collection.FindOne(context.TODO(), filter)
158   - DeleteResult, err := collection.DeleteOne(context.TODO(), filter, nil)
  129 + singleResult := m.mgo.FindOne(context.TODO(), filter)
  130 + DeleteResult, err := m.mgo.DeleteOne(context.TODO(), filter, nil)
159 131 if err != nil {
160 132 fmt.Println("ๅˆ ้™คๆ—ถๅ‡บ็Žฐ้”™่ฏฏ๏ผŒไฝ ๅˆ ไธๆމ็š„~")
161 133 }
... ... @@ -163,10 +135,9 @@ func (m *MgoPool) DeleteAndFind(key string, value interface{}) (int64, *mongo.Si
163 135 }
164 136  
165 137 //ๅˆ ้™คๆ–‡็ซ 
166   -func (m *MgoPool) Delete(key string, value interface{}) int64 {
167   - collection := m.mgo.Collection(m.collection)
  138 +func (m *MgoColl) Delete(key string, value interface{}) int64 {
168 139 filter := bson.D{ {key, value}}
169   - count, err := collection.DeleteOne(context.TODO(), filter, nil)
  140 + count, err := m.mgo.DeleteOne(context.TODO(), filter, nil)
170 141 if err != nil {
171 142 fmt.Println(err)
172 143 }
... ... @@ -175,11 +146,10 @@ func (m *MgoPool) Delete(key string, value interface{}) int64 {
175 146 }
176 147  
177 148 //ๅˆ ้™คๅคšไธช
178   -func (m *MgoPool) DeleteMany(key string, value interface{}) int64 {
179   - collection := m.mgo.Collection(m.collection)
  149 +func (m *MgoColl) DeleteMany(key string, value interface{}) int64 {
180 150 filter := bson.D{ {key, value}}
181 151  
182   - count, err := collection.DeleteMany(context.TODO(), filter)
  152 + count, err := m.mgo.DeleteMany(context.TODO(), filter)
183 153 if err != nil {
184 154 fmt.Println(err)
185 155 }
... ... @@ -187,9 +157,8 @@ func (m *MgoPool) DeleteMany(key string, value interface{}) int64 {
187 157 }
188 158  
189 159 //็ดขๅผ•
190   -func (m *MgoPool) Index(key string){
191   - collection := m.mgo.Collection(m.collection)
192   - collection.Indexes().CreateOne(
  160 +func (m *MgoColl) Index(key string){
  161 + m.mgo.Indexes().CreateOne(
193 162 context.Background(),
194 163 mongo.IndexModel{
195 164 Keys : bsonx.Doc{{key, bsonx.Int32(1)}},
... ... @@ -199,12 +168,11 @@ func (m *MgoPool) Index(key string){
199 168 }
200 169  
201 170 //ๆ›ดๆ–ฐ&ไฟๅญ˜
202   -func (m *MgoPool) FindOneAndUpdate(filter interface{}, update interface{})*mongo.SingleResult {
  171 +func (m *MgoColl) FindOneAndUpdate(filter interface{}, update interface{})*mongo.SingleResult {
203 172 //filter := bson.M{"name": "x", "array.name": "b"}
204 173 //update := bson.M{"array.$[item].detail": "test"}
205 174  
206   - collection := m.mgo.Collection(m.collection)
207   - res := collection.FindOneAndUpdate(context.Background(),
  175 + res := m.mgo.FindOneAndUpdate(context.Background(),
208 176 filter,
209 177 bson.M{"$set": update})
210 178 if res.Err() != nil {
... ... @@ -213,12 +181,33 @@ func (m *MgoPool) FindOneAndUpdate(filter interface{}, update interface{})*mongo
213 181 return res
214 182 }
215 183  
216   -func (m *MgoPool) UpdateOne(filter interface{}, update interface{})*mongo.UpdateResult {
217   - collection := m.mgo.Collection(m.collection)
218   - res, err := collection.UpdateOne(context.TODO(), filter, update)
  184 +func (m *MgoColl) UpdateOne(filter interface{}, update interface{})*mongo.UpdateResult {
  185 + res, err := m.mgo.UpdateOne(context.TODO(), filter, update)
219 186 if err != nil {
220 187 return nil
221 188 }
222 189  
223 190 return res
  191 +}
  192 +
  193 +
  194 +func (m *MgoColl) Load() error{
  195 + r := m.FindOne(m.pri)
  196 + err := r.Decode(m.schema)
  197 + if err != nil {
  198 + return err
  199 + }
  200 + return nil
  201 +}
  202 +
  203 +func (m *MgoColl) Create() {
  204 + m.InsertOne(m.schema)
  205 +}
  206 +
  207 +func (m *MgoColl) Update(update interface{}) {
  208 + m.FindOneAndUpdate(m.pri, update)
  209 +}
  210 +
  211 +func (m *MgoColl)Save() {
  212 + m.FindOneAndUpdate(m.pri, m.schema)
224 213 }
225 214 \ No newline at end of file
... ...
components/db/redis.go
1 1 package db
2   -
3   -import (
4   - "fmt"
5   - "github.com/garyburd/redigo/redis"
6   - "pro2d/conf"
7   - "pro2d/utils"
8   - "time"
9   -)
10   -
11   -type RedisPool struct {
12   - RedisPool *redis.Pool
13   -}
14   -
15   -func (rp *RedisPool)Connect(conf *conf.ServerConf) error {
16   - rp.RedisPool = &redis.Pool{
17   - //ๆœ€ๅคงๆดป่ทƒ่ฟžๆŽฅๆ•ฐ๏ผŒ0ไปฃ่กจๆ— ้™
18   - MaxActive: 888,
19   - MaxIdle: 20,
20   - //้—ฒ็ฝฎ่ฟžๆŽฅ็š„่ถ…ๆ—ถๆ—ถ้—ด
21   - IdleTimeout: time.Second * 100,
22   - //ๅฎšไน‰ๆ‹จๅท่Žทๅพ—่ฟžๆŽฅ็š„ๅ‡ฝๆ•ฐ
23   - Dial: func() (redis.Conn, error) {
24   - option := []redis.DialOption{redis.DialDatabase(conf.RedisConf.DB)}
25   - if conf.RedisConf.Auth != "" {
26   - option = append(option, redis.DialPassword(conf.RedisConf.Auth))
27   - }
28   - return redis.Dial("tcp",conf.RedisConf.Address, option...)
29   - },
30   - }
31   - return nil
32   -}
33   -
34   -func (rp *RedisPool)Close() {
35   - rp.RedisPool.Close()
36   -}
37   -
38   -func (rp *RedisPool) Insert() error {
39   - conn := rp.RedisPool.Get()
40   - defer conn.Close()
41   - reply, err := conn.Do("HKEYS", fmt.Sprintf("account:%s", "123123"))
42   - if err != nil {
43   - return err
44   - }
45   -
46   - utils.Sugar.Debugf("%v", reply)
47   - reply, err = conn.Do("HMSET", fmt.Sprintf("account:%s", "1231231"), "phone", "1231231", "passwd", "2131231")
48   - if err != nil {
49   - utils.Sugar.Errorf("%v", err)
50   - return err
51   - }
52   - utils.Sugar.Debugf("%v", reply)
53   - return nil
54   -}
  2 +//
  3 +//import (
  4 +// "fmt"
  5 +// "github.com/garyburd/redigo/redis"
  6 +// "pro2d/conf"
  7 +// "pro2d/utils"
  8 +// "time"
  9 +//)
  10 +//
  11 +//type RedisPool struct {
  12 +// RedisPool *redis.Pool
  13 +//}
  14 +//
  15 +//func (rp *RedisPool)Connect(conf *conf.ServerConf) error {
  16 +// rp.RedisPool = &redis.Pool{
  17 +// //ๆœ€ๅคงๆดป่ทƒ่ฟžๆŽฅๆ•ฐ๏ผŒ0ไปฃ่กจๆ— ้™
  18 +// MaxActive: 888,
  19 +// MaxIdle: 20,
  20 +// //้—ฒ็ฝฎ่ฟžๆŽฅ็š„่ถ…ๆ—ถๆ—ถ้—ด
  21 +// IdleTimeout: time.Second * 100,
  22 +// //ๅฎšไน‰ๆ‹จๅท่Žทๅพ—่ฟžๆŽฅ็š„ๅ‡ฝๆ•ฐ
  23 +// Dial: func() (redis.Conn, error) {
  24 +// option := []redis.DialOption{redis.DialDatabase(conf.RedisConf.DB)}
  25 +// if conf.RedisConf.Auth != "" {
  26 +// option = append(option, redis.DialPassword(conf.RedisConf.Auth))
  27 +// }
  28 +// return redis.Dial("tcp",conf.RedisConf.Address, option...)
  29 +// },
  30 +// }
  31 +// return nil
  32 +//}
  33 +//
  34 +//func (rp *RedisPool)Close() {
  35 +// rp.RedisPool.Close()
  36 +//}
  37 +//
  38 +//func (rp *RedisPool) Insert() error {
  39 +// conn := rp.RedisPool.Get()
  40 +// defer conn.Close()
  41 +// reply, err := conn.Do("HKEYS", fmt.Sprintf("account:%s", "123123"))
  42 +// if err != nil {
  43 +// return err
  44 +// }
  45 +//
  46 +// utils.Sugar.Debugf("%v", reply)
  47 +// reply, err = conn.Do("HMSET", fmt.Sprintf("account:%s", "1231231"), "phone", "1231231", "passwd", "2131231")
  48 +// if err != nil {
  49 +// utils.Sugar.Errorf("%v", err)
  50 +// return err
  51 +// }
  52 +// utils.Sugar.Debugf("%v", reply)
  53 +// return nil
  54 +//}
... ...
conf/conf.go
... ... @@ -5,6 +5,7 @@ import (
5 5 lumberjack "gopkg.in/natefinch/lumberjack.v2"
6 6 "gopkg.in/yaml.v3"
7 7 "io/ioutil"
  8 + "pro2d/components/db"
8 9 "pro2d/utils"
9 10 )
10 11  
... ... @@ -27,7 +28,6 @@ type MongoConf struct {
27 28 Password string `yaml:"password"`
28 29 Host string `yaml:"host"`
29 30 Port int `yaml:"port"`
30   - DBName string `yaml:"dbname"`
31 31 TimeOut int `yaml:"timeout"`
32 32 MaxNum int `yaml:"maxnum"`
33 33 }
... ... @@ -36,7 +36,7 @@ type SConf struct {
36 36 Name string `yaml:"name"`
37 37 IP string `yaml:"ip"`
38 38 Port int `yaml:"port"`
39   - MongoConf *MongoConf `yaml:"mongo"`
  39 + DBName string `yaml:"dbname"`
40 40 }
41 41  
42 42 type ServerConf struct {
... ... @@ -44,6 +44,7 @@ type ServerConf struct {
44 44 Name string `yaml:"name"`
45 45 WorkerID int64 `yaml:"workerid"`
46 46 DatacenterID int64 `yaml:"datacenterid"`
  47 + MongoConf *MongoConf `yaml:"mongo"`
47 48 AccountConf *SConf `yaml:"server_account"`
48 49 GameConf *SConf `yaml:"server_game"`
49 50 RedisConf *RedisConf `yaml:"redis"`
... ... @@ -51,8 +52,10 @@ type ServerConf struct {
51 52 Etcd *Etcd `yaml:"etcd"`
52 53 }
53 54  
54   -var GlobalConf ServerConf
55   -var SnowFlack *utils.Snowflake
  55 +var(
  56 + GlobalConf ServerConf
  57 + SnowFlack *utils.Snowflake
  58 +)
56 59 func init() {
57 60 configFile, err := ioutil.ReadFile("conf/conf.yaml")
58 61 if err != nil {
... ... @@ -70,4 +73,10 @@ func init() {
70 73  
71 74 //ๅˆๅง‹ๅŒ–้›ช่Šฑ็ฎ—ๆณ•
72 75 SnowFlack = utils.NewSnowflake(GlobalConf.WorkerID, GlobalConf.DatacenterID)
  76 +
  77 + //ๅˆๅง‹ๅŒ–ๆ•ฐๆฎๅบ“
  78 + err = db.Connect(GlobalConf.MongoConf.User, GlobalConf.MongoConf.Password, GlobalConf.MongoConf.Host, GlobalConf.MongoConf.Port, GlobalConf.MongoConf.MaxNum, GlobalConf.MongoConf.TimeOut)
  79 + if err != nil {
  80 + utils.Sugar.Errorf("mongodb init error: %v", err)
  81 + }
73 82 }
74 83 \ No newline at end of file
... ...
conf/conf.yaml
... ... @@ -2,30 +2,26 @@ develop: true
2 2 name: "Pro2DServer"
3 3 workerid: 1
4 4 datacenterid: 1
  5 +
  6 +mongo: &default-mongo
  7 + host: "192.168.0.206"
  8 + port: 27017
  9 + user: ""
  10 + password: ""
  11 + timeout: 2
  12 + maxnum: 50
  13 +
5 14 server_account:
6 15 name: "account"
7 16 ip: "192.168.0.206"
8 17 port: 8848
9   - mongo:
10   - host: "192.168.0.206"
11   - port: 27017
12   - user: ""
13   - password: ""
14   - dbname: "account"
15   - timeout: 2
16   - maxnum: 50
  18 + dbname: "account"
  19 +
17 20 server_game:
18 21 name: "game"
19 22 ip: "192.168.0.206"
20 23 port: 8849
21   - mongo:
22   - host: "192.168.0.206"
23   - port: 27017
24   - user: ""
25   - password: ""
26   - dbname: "game"
27   - timeout: 2
28   - maxnum: 50
  24 + dbname: "game"
29 25  
30 26 logconf:
31 27 filename: "./pro2d.log" # โฝ‡ๅฟ—โฝ‚ไปถ่ทฏๅพ„
... ...
models/account.go
... ... @@ -6,27 +6,26 @@ import (
6 6 )
7 7  
8 8 type AccountModel struct {
9   - *ModelBaseMgo
  9 + *db.MgoColl
10 10 *pb.AccountInfo
11 11 }
12 12  
13   -func AccountExistByPhone(mgo *db.Database, phone string) (bool, *AccountModel){
14   - m := NewAccount(mgo, phone)
  13 +func AccountExistByPhone(database, phone string) (bool, *AccountModel){
  14 + m := NewAccount(database, phone)
15 15 if err := m.Load(); err != nil {
16 16 return false, m
17 17 }
18 18 return true, m
19 19 }
20 20  
21   -func NewAccount(mgo *db.Database, phone string) *AccountModel {
  21 +func NewAccount(database, phone string) *AccountModel {
22 22 ac := &pb.AccountInfo{
23 23 Phone: phone,
24 24 }
25 25 account := &AccountModel{
26   - ModelBaseMgo: NewModelBaseMgo(mgo, "account", db.GetBsonM("phone", phone), ac),
  26 + MgoColl: db.NewMongoColl(database, "account", db.GetBsonM("phone", phone), ac),
27 27 AccountInfo: ac,
28 28 }
29 29  
30   -
31 30 return account
32 31 }
33 32 \ No newline at end of file
... ...
models/basic.go deleted
... ... @@ -1,46 +0,0 @@
1   -package models
2   -
3   -import (
4   - "pro2d/components/db"
5   -)
6   -
7   -type ModelBaseMgo struct {
8   - MonGo *db.MgoPool
9   -
10   - pri interface{}
11   - schema interface{}
12   -}
13   -
14   -
15   -func NewModelBaseMgo(mgo *db.Database, collection string, pri interface{}, schema interface{}) *ModelBaseMgo{
16   - return &ModelBaseMgo{
17   - MonGo: db.NewMongoPool(mgo, collection),
18   - pri: pri,
19   - schema: schema,
20   - }
21   -}
22   -
23   -func (base *ModelBaseMgo) Load() error{
24   - r := base.MonGo.FindOne(base.pri)
25   - err := r.Decode(base.schema)
26   - if err != nil {
27   - return err
28   - }
29   - return nil
30   -}
31   -
32   -func (base *ModelBaseMgo) Create() {
33   - base.MonGo.InsertOne(base.schema)
34   -}
35   -
36   -func (base *ModelBaseMgo) Index(key string) {
37   - base.MonGo.Index(key)
38   -}
39   -
40   -func (base *ModelBaseMgo) Update(update interface{}) {
41   - base.MonGo.FindOneAndUpdate(base.pri, update)
42   -}
43   -
44   -func (base *ModelBaseMgo) Save() {
45   - base.MonGo.FindOneAndUpdate(base.pri, base.schema)
46   -}
47 0 \ No newline at end of file
models/hero.go 0 โ†’ 100644
... ... @@ -0,0 +1,30 @@
  1 +package models
  2 +
  3 +import (
  4 + "pro2d/components/db"
  5 + "pro2d/conf"
  6 + "pro2d/protos/pb"
  7 +)
  8 +
  9 +type HeroModel struct {
  10 + *db.MgoColl
  11 + Hero *pb.Hero
  12 +}
  13 +type HeroMap map[string]*HeroModel
  14 +
  15 +func GetHeros(hm HeroMap) map[string]*pb.Hero {
  16 + h := make(map[string]*pb.Hero)
  17 + for k, v := range hm {
  18 + h[k] = v.Hero
  19 + }
  20 + return h
  21 +}
  22 +
  23 +func NewHero(h *pb.Hero) *HeroModel {
  24 + m := &HeroModel{
  25 + MgoColl: db.NewMongoColl(conf.GlobalConf.GameConf.DBName, "hero", db.GetBsonM("id", h.Id), h),
  26 + Hero: h,
  27 + }
  28 + m.Load()
  29 + return m
  30 +}
... ...
models/role.go
1 1 package models
2 2  
3 3 import (
  4 + "fmt"
4 5 "pro2d/components/db"
  6 + "pro2d/conf"
5 7 "pro2d/protos/pb"
6 8 )
7 9  
8 10 type RoleModel struct {
9   - *ModelBaseMgo
10   - *pb.Role
  11 + *db.MgoColl
  12 + Role *pb.Role
  13 + Heros HeroMap
  14 + Teams *pb.Team
  15 + Equip *pb.Equipment
  16 + Prop *pb.Prop
11 17 }
12 18  
13   -//ๅˆ›ๅปบๆ•ฐๆฎ
14   -//ๆ•ฐๆฎๅŠ ่ฝฝ
15   -//ๆ•ฐๆฎไฟๅญ˜
16   -
17   -func RoleExistByUid(mgo *db.Database, uid int64) (bool, *RoleModel){
18   - m := NewRole(mgo, uid)
  19 +func RoleExistByUid(uid int64) (bool, *RoleModel){
  20 + m := NewRole(&pb.Role{Uid: uid})
19 21 if err := m.Load(); err != nil {
20 22 return false, m
21 23 }
22 24 return true, m
23 25 }
24 26  
25   -func NewRole(mgo *db.Database, uid int64) *RoleModel {
26   - r := &pb.Role{
27   - Uid: uid,
28   - }
  27 +func NewRole(r *pb.Role) *RoleModel {
29 28 m := &RoleModel{
30   - ModelBaseMgo: NewModelBaseMgo(mgo, "role", db.GetBsonM("uid", uid), r),
  29 + MgoColl: db.NewMongoColl(conf.GlobalConf.GameConf.DBName, "role", db.GetBsonM("uid", r.Uid), r),
31 30 Role: r,
  31 + Heros: make(HeroMap),
32 32 }
33 33 m.Load()
34 34 return m
... ... @@ -36,3 +36,12 @@ func NewRole(mgo *db.Database, uid int64) *RoleModel {
36 36  
37 37 func (m *RoleModel) LoadAll() {
38 38 }
  39 +
  40 +func (m *RoleModel) LoadHero() {
  41 +}
  42 +
  43 +func (m *RoleModel) AddHero(hero *pb.Hero) {
  44 + h := NewHero(hero)
  45 + h.Create()
  46 + m.Heros[fmt.Sprintf("%d%d", m.Role.Id, h.Hero.Id)] = h
  47 +}
39 48 \ No newline at end of file
... ...
models/role_test.go
1 1 package models
2 2  
3 3 import (
4   - "pro2d/components/db"
5   - "pro2d/conf"
6   - "pro2d/utils"
  4 + "pro2d/protos/pb"
7 5 "testing"
8   - "time"
9 6 )
10 7  
11 8 func TestNewRole(t *testing.T) {
12   - db := &db.Database{}
13   - if err := db.Connect(conf.GlobalConf.GameConf.MongoConf); err != nil {
14   - utils.Sugar.Errorf("%v", err)
15   - return
16   - }
17   -
  9 + //db.MongoDBClient.Database(conf.GlobalConf.AccountConf.DBName).Drop(context.Background())
  10 + //db.MongoDBClient.Database(conf.GlobalConf.GameConf.DBName).Drop(context.Background())
18 11  
19   - //db.Mongo.Drop(context.Background())
20 12 var uid int64 = 1
21 13 var role *RoleModel
22   - if ok, role := RoleExistByUid(db, uid); ok {
  14 + if ok, role := RoleExistByUid(uid); ok {
23 15 role.Role.Device = "111111"
24   - role.Role.LoginTime = time.Now().Unix()
  16 + role.AddHero(&pb.Hero{
  17 + Id: 1,
  18 + RoleId: role.Role.Id,
  19 + Type: 0,
  20 + Level: 0,
  21 + ReinCount: 0,
  22 + ReinPoint: 0,
  23 + Equipments: "",
  24 + })
25 25 role.Save()
26 26 }else {
27   - role = NewRole(db, uid)
28   - role.Role.Id = "1"
  27 + role = NewRole(&pb.Role{Uid: uid})
  28 + role.Role.Id = 1
29 29 role.Role.Device = "222222"
30 30 role.Role.Level = 0
31 31 role.Create()
... ...