Commit eb417b0bfaf68c9548e8da87e042470b2fdec1fe

Authored by zhangqijia
1 parent 2064f484

reactor mongo

actions/accountaction.go
@@ -10,7 +10,7 @@ import ( @@ -10,7 +10,7 @@ import (
10 ) 10 )
11 11
12 func (s *AccountServer) RegisterHandler(ctx context.Context, in *pb.Register) (*pb.PubRsp, error) { 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 if !ok { 14 if !ok {
15 account.Phone = in.Phone 15 account.Phone = in.Phone
16 account.Password = utils.Md5V(in.Password) 16 account.Password = utils.Md5V(in.Password)
@@ -24,7 +24,6 @@ func (s *AccountServer) RegisterHandler(ctx context.Context, in *pb.Register) (* @@ -24,7 +24,6 @@ func (s *AccountServer) RegisterHandler(ctx context.Context, in *pb.Register) (*
24 return &pb.PubRsp{ 24 return &pb.PubRsp{
25 Code: 0, 25 Code: 0,
26 }, nil 26 }, nil
27 -  
28 } 27 }
29 28
30 func (s *AccountServer) CreateTokenHandler(ctx context.Context, in *pb.AccountInfo) (*pb.CreateTokenRsp, error) { 29 func (s *AccountServer) CreateTokenHandler(ctx context.Context, in *pb.AccountInfo) (*pb.CreateTokenRsp, error) {
@@ -3,27 +3,20 @@ package actions @@ -3,27 +3,20 @@ package actions
3 import ( 3 import (
4 "fmt" 4 "fmt"
5 "net" 5 "net"
6 - "pro2d/components/db"  
7 "pro2d/conf" 6 "pro2d/conf"
8 - "pro2d/utils"  
9 ) 7 )
10 8
11 type BasicServer struct { 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 return &BasicServer{ 14 return &BasicServer{
17 - Database: new(db.Database), 15 + DBName: db,
18 } 16 }
19 } 17 }
20 18
21 func (b *BasicServer) Start(sConf *conf.SConf) (net.Listener, error) { 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 listing := fmt.Sprintf(":%d", sConf.Port) 20 listing := fmt.Sprintf(":%d", sConf.Port)
28 lis, err := net.Listen("tcp", listing) 21 lis, err := net.Listen("tcp", listing)
29 if err != nil { 22 if err != nil {
actions/roleaction.go
@@ -43,7 +43,7 @@ func (s *GameServer) CreateRoleHandler(ctx context.Context, in *pb.Token) (*pb.R @@ -43,7 +43,7 @@ func (s *GameServer) CreateRoleHandler(ctx context.Context, in *pb.Token) (*pb.R
43 if account == nil { 43 if account == nil {
44 return nil, fmt.Errorf("1") 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 if !ok { 47 if !ok {
48 role.Role = &pb.Role{ 48 role.Role = &pb.Role{
49 Level: 0, 49 Level: 0,
@@ -67,13 +67,14 @@ func (s *GameServer) LoginHandler(ctx context.Context, in *pb.Token) (*pb.RoleRs @@ -67,13 +67,14 @@ func (s *GameServer) LoginHandler(ctx context.Context, in *pb.Token) (*pb.RoleRs
67 if account == nil { 67 if account == nil {
68 return nil, fmt.Errorf("token is error") 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 if !ok { 71 if !ok {
72 return &pb.RoleRsp{ 72 return &pb.RoleRsp{
73 Rsp: &pb.PubRsp{ 73 Rsp: &pb.PubRsp{
74 Code: -1, 74 Code: -1,
75 Msg: "role not exist", 75 Msg: "role not exist",
76 }, 76 },
  77 +
77 }, nil 78 }, nil
78 } 79 }
79 return &pb.RoleRsp{ 80 return &pb.RoleRsp{
@@ -82,5 +83,6 @@ func (s *GameServer) LoginHandler(ctx context.Context, in *pb.Token) (*pb.RoleRs @@ -82,5 +83,6 @@ func (s *GameServer) LoginHandler(ctx context.Context, in *pb.Token) (*pb.RoleRs
82 Msg: "successful", 83 Msg: "successful",
83 }, 84 },
84 Role: role.Role, 85 Role: role.Role,
  86 + Hero: models.GetHeros(role.Heros),
85 }, nil 87 }, nil
86 } 88 }
@@ -16,7 +16,7 @@ type AccountServer struct{ @@ -16,7 +16,7 @@ type AccountServer struct{
16 16
17 func NewAccountServer() *AccountServer { 17 func NewAccountServer() *AccountServer {
18 return &AccountServer{ 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,7 +60,7 @@ type GameServer struct{
60 60
61 func NewGameServer() *GameServer { 61 func NewGameServer() *GameServer {
62 return &GameServer{ 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,49 +8,47 @@ import (
8 "go.mongodb.org/mongo-driver/mongo/options" 8 "go.mongodb.org/mongo-driver/mongo/options"
9 "go.mongodb.org/mongo-driver/mongo/readpref" 9 "go.mongodb.org/mongo-driver/mongo/readpref"
10 "go.mongodb.org/mongo-driver/x/bsonx" 10 "go.mongodb.org/mongo-driver/x/bsonx"
11 - "pro2d/conf"  
12 "strconv" 11 "strconv"
13 "time" 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 var uri string 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 }else { 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 defer cancel() 29 defer cancel()
30 // 通过传进来的uri连接相关的配置 30 // 通过传进来的uri连接相关的配置
31 o := options.Client().ApplyURI(uri) 31 o := options.Client().ApplyURI(uri)
32 // 设置最大连接数 - 默认是100 ,不设置就是最大 max 64 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 if err != nil { 37 if err != nil {
37 - fmt.Println("ConnectToDB", err)  
38 return err 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 return err 42 return err
44 } 43 }
45 -  
46 - db.Mongo = client.Database(conf.DBName)  
47 return nil 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 func GetBsonD(key string, value interface{}) interface{} { 54 func GetBsonD(key string, value interface{}) interface{} {
@@ -60,58 +58,36 @@ func GetBsonM(key string, value interface{}) interface{} { @@ -60,58 +58,36 @@ func GetBsonM(key string, value interface{}) interface{} {
60 return bson.M{key: value} 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 //m.db = databases 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 //collection. 76 //collection.
99 filter := bson.D{ {key, value}} 77 filter := bson.D{ {key, value}}
100 - singleResult := collection.FindOne(context.TODO(), filter) 78 + singleResult := m.mgo.FindOne(context.TODO(), filter)
101 return singleResult 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 //collection. 83 //collection.
107 - singleResult := collection.FindOne(context.TODO(), pri) 84 + singleResult := m.mgo.FindOne(context.TODO(), pri)
108 return singleResult 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 if err != nil { 91 if err != nil {
116 fmt.Println(err) 92 fmt.Println(err)
117 } 93 }
@@ -119,28 +95,25 @@ func (m *MgoPool) InsertOne(value interface{}) *mongo.InsertOneResult { @@ -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 //按选项查询集合 Skip 跳过 Limit 读取数量 sort 1 ,-1 . 1 为最初时间读取 , -1 为最新时间读取 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 SORT := bson.D{ 105 SORT := bson.D{
133 {"_id", sort}} //filter := bson.D{ {key,value}} 106 {"_id", sort}} //filter := bson.D{ {key,value}}
134 filter := bson.D{ 107 filter := bson.D{
135 {}} 108 {}}
136 findOptions := options.Find().SetSort(SORT).SetLimit(Limit).SetSkip(Skip) 109 findOptions := options.Find().SetSort(SORT).SetLimit(Limit).SetSkip(Skip)
137 //findOptions.SetLimit(i) 110 //findOptions.SetLimit(i)
138 - temp, _ := collection.Find(context.Background(), filter, findOptions) 111 + temp, _ := m.mgo.Find(context.Background(), filter, findOptions)
139 return temp 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 temp1 := result[:8] 117 temp1 := result[:8]
145 timestamp, _ := strconv.ParseInt(temp1, 16, 64) 118 timestamp, _ := strconv.ParseInt(temp1, 16, 64)
146 dateTime := time.Unix(timestamp, 0) //这是截获情报时间 时间格式 2019-04-24 09:23:39 +0800 CST 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,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 filter := bson.D{ 127 filter := bson.D{
156 {key, value}} 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 if err != nil { 131 if err != nil {
160 fmt.Println("删除时出现错误,你删不掉的~") 132 fmt.Println("删除时出现错误,你删不掉的~")
161 } 133 }
@@ -163,10 +135,9 @@ func (m *MgoPool) DeleteAndFind(key string, value interface{}) (int64, *mongo.Si @@ -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 filter := bson.D{ {key, value}} 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 if err != nil { 141 if err != nil {
171 fmt.Println(err) 142 fmt.Println(err)
172 } 143 }
@@ -175,11 +146,10 @@ func (m *MgoPool) Delete(key string, value interface{}) int64 { @@ -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 filter := bson.D{ {key, value}} 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 if err != nil { 153 if err != nil {
184 fmt.Println(err) 154 fmt.Println(err)
185 } 155 }
@@ -187,9 +157,8 @@ func (m *MgoPool) DeleteMany(key string, value interface{}) int64 { @@ -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 context.Background(), 162 context.Background(),
194 mongo.IndexModel{ 163 mongo.IndexModel{
195 Keys : bsonx.Doc{{key, bsonx.Int32(1)}}, 164 Keys : bsonx.Doc{{key, bsonx.Int32(1)}},
@@ -199,12 +168,11 @@ func (m *MgoPool) Index(key string){ @@ -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 //filter := bson.M{"name": "x", "array.name": "b"} 172 //filter := bson.M{"name": "x", "array.name": "b"}
204 //update := bson.M{"array.$[item].detail": "test"} 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 filter, 176 filter,
209 bson.M{"$set": update}) 177 bson.M{"$set": update})
210 if res.Err() != nil { 178 if res.Err() != nil {
@@ -213,12 +181,33 @@ func (m *MgoPool) FindOneAndUpdate(filter interface{}, update interface{})*mongo @@ -213,12 +181,33 @@ func (m *MgoPool) FindOneAndUpdate(filter interface{}, update interface{})*mongo
213 return res 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 if err != nil { 186 if err != nil {
220 return nil 187 return nil
221 } 188 }
222 189
223 return res 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 \ No newline at end of file 214 \ No newline at end of file
components/db/redis.go
1 package db 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 +//}
@@ -5,6 +5,7 @@ import ( @@ -5,6 +5,7 @@ import (
5 lumberjack "gopkg.in/natefinch/lumberjack.v2" 5 lumberjack "gopkg.in/natefinch/lumberjack.v2"
6 "gopkg.in/yaml.v3" 6 "gopkg.in/yaml.v3"
7 "io/ioutil" 7 "io/ioutil"
  8 + "pro2d/components/db"
8 "pro2d/utils" 9 "pro2d/utils"
9 ) 10 )
10 11
@@ -27,7 +28,6 @@ type MongoConf struct { @@ -27,7 +28,6 @@ type MongoConf struct {
27 Password string `yaml:"password"` 28 Password string `yaml:"password"`
28 Host string `yaml:"host"` 29 Host string `yaml:"host"`
29 Port int `yaml:"port"` 30 Port int `yaml:"port"`
30 - DBName string `yaml:"dbname"`  
31 TimeOut int `yaml:"timeout"` 31 TimeOut int `yaml:"timeout"`
32 MaxNum int `yaml:"maxnum"` 32 MaxNum int `yaml:"maxnum"`
33 } 33 }
@@ -36,7 +36,7 @@ type SConf struct { @@ -36,7 +36,7 @@ type SConf struct {
36 Name string `yaml:"name"` 36 Name string `yaml:"name"`
37 IP string `yaml:"ip"` 37 IP string `yaml:"ip"`
38 Port int `yaml:"port"` 38 Port int `yaml:"port"`
39 - MongoConf *MongoConf `yaml:"mongo"` 39 + DBName string `yaml:"dbname"`
40 } 40 }
41 41
42 type ServerConf struct { 42 type ServerConf struct {
@@ -44,6 +44,7 @@ type ServerConf struct { @@ -44,6 +44,7 @@ type ServerConf struct {
44 Name string `yaml:"name"` 44 Name string `yaml:"name"`
45 WorkerID int64 `yaml:"workerid"` 45 WorkerID int64 `yaml:"workerid"`
46 DatacenterID int64 `yaml:"datacenterid"` 46 DatacenterID int64 `yaml:"datacenterid"`
  47 + MongoConf *MongoConf `yaml:"mongo"`
47 AccountConf *SConf `yaml:"server_account"` 48 AccountConf *SConf `yaml:"server_account"`
48 GameConf *SConf `yaml:"server_game"` 49 GameConf *SConf `yaml:"server_game"`
49 RedisConf *RedisConf `yaml:"redis"` 50 RedisConf *RedisConf `yaml:"redis"`
@@ -51,8 +52,10 @@ type ServerConf struct { @@ -51,8 +52,10 @@ type ServerConf struct {
51 Etcd *Etcd `yaml:"etcd"` 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 func init() { 59 func init() {
57 configFile, err := ioutil.ReadFile("conf/conf.yaml") 60 configFile, err := ioutil.ReadFile("conf/conf.yaml")
58 if err != nil { 61 if err != nil {
@@ -70,4 +73,10 @@ func init() { @@ -70,4 +73,10 @@ func init() {
70 73
71 //初始化雪花算法 74 //初始化雪花算法
72 SnowFlack = utils.NewSnowflake(GlobalConf.WorkerID, GlobalConf.DatacenterID) 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 \ No newline at end of file 83 \ No newline at end of file
@@ -2,30 +2,26 @@ develop: true @@ -2,30 +2,26 @@ develop: true
2 name: "Pro2DServer" 2 name: "Pro2DServer"
3 workerid: 1 3 workerid: 1
4 datacenterid: 1 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 server_account: 14 server_account:
6 name: "account" 15 name: "account"
7 ip: "192.168.0.206" 16 ip: "192.168.0.206"
8 port: 8848 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 server_game: 20 server_game:
18 name: "game" 21 name: "game"
19 ip: "192.168.0.206" 22 ip: "192.168.0.206"
20 port: 8849 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 logconf: 26 logconf:
31 filename: "./pro2d.log" # ⽇志⽂件路径 27 filename: "./pro2d.log" # ⽇志⽂件路径
@@ -6,27 +6,26 @@ import ( @@ -6,27 +6,26 @@ import (
6 ) 6 )
7 7
8 type AccountModel struct { 8 type AccountModel struct {
9 - *ModelBaseMgo 9 + *db.MgoColl
10 *pb.AccountInfo 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 if err := m.Load(); err != nil { 15 if err := m.Load(); err != nil {
16 return false, m 16 return false, m
17 } 17 }
18 return true, m 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 ac := &pb.AccountInfo{ 22 ac := &pb.AccountInfo{
23 Phone: phone, 23 Phone: phone,
24 } 24 }
25 account := &AccountModel{ 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 AccountInfo: ac, 27 AccountInfo: ac,
28 } 28 }
29 29
30 -  
31 return account 30 return account
32 } 31 }
33 \ No newline at end of file 32 \ No newline at end of file
models/basic.go deleted
@@ -1,46 +0,0 @@ @@ -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 \ No newline at end of file 0 \ No newline at end of file
models/hero.go 0 → 100644
@@ -0,0 +1,30 @@ @@ -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 +}
1 package models 1 package models
2 2
3 import ( 3 import (
  4 + "fmt"
4 "pro2d/components/db" 5 "pro2d/components/db"
  6 + "pro2d/conf"
5 "pro2d/protos/pb" 7 "pro2d/protos/pb"
6 ) 8 )
7 9
8 type RoleModel struct { 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 if err := m.Load(); err != nil { 21 if err := m.Load(); err != nil {
20 return false, m 22 return false, m
21 } 23 }
22 return true, m 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 m := &RoleModel{ 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 Role: r, 30 Role: r,
  31 + Heros: make(HeroMap),
32 } 32 }
33 m.Load() 33 m.Load()
34 return m 34 return m
@@ -36,3 +36,12 @@ func NewRole(mgo *db.Database, uid int64) *RoleModel { @@ -36,3 +36,12 @@ func NewRole(mgo *db.Database, uid int64) *RoleModel {
36 36
37 func (m *RoleModel) LoadAll() { 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 \ No newline at end of file 48 \ No newline at end of file
models/role_test.go
1 package models 1 package models
2 2
3 import ( 3 import (
4 - "pro2d/components/db"  
5 - "pro2d/conf"  
6 - "pro2d/utils" 4 + "pro2d/protos/pb"
7 "testing" 5 "testing"
8 - "time"  
9 ) 6 )
10 7
11 func TestNewRole(t *testing.T) { 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 var uid int64 = 1 12 var uid int64 = 1
21 var role *RoleModel 13 var role *RoleModel
22 - if ok, role := RoleExistByUid(db, uid); ok { 14 + if ok, role := RoleExistByUid(uid); ok {
23 role.Role.Device = "111111" 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 role.Save() 25 role.Save()
26 }else { 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 role.Role.Device = "222222" 29 role.Role.Device = "222222"
30 role.Role.Level = 0 30 role.Role.Level = 0
31 role.Create() 31 role.Create()