Blame view

cmd/gameserver/action/RoleAction.go 3.33 KB
69d286a7   zhangqijia   fix: 插件用来做部分热更
1
  package action
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
2
3
  
  import (
29a163be   zhangqijia   fix: CreateReq ui...
4
  	"fmt"
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
5
  	"github.com/golang/protobuf/proto"
765431a4   zhangqijia   增加schema接口, 抽象 mo...
6
  	"pro2d/common"
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
7
  	"pro2d/common/components"
29a163be   zhangqijia   fix: CreateReq ui...
8
  	"pro2d/common/db/redisproxy"
765431a4   zhangqijia   增加schema接口, 抽象 mo...
9
  	"pro2d/common/logger"
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
10
  	"pro2d/models"
7f269318   zhangqijia   add pb.go; 添加关闭连接...
11
  	"pro2d/pb"
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
12
13
  )
  
eadc9aff   zhangqijia   feat: 增加上阵下阵协议,增加...
14
  func HeartRpc(agent components.IAgent, msg components.IMessage) (int32, interface{}) {
0cc58315   zhangqijia   添加定时器, 检查心跳
15
  	//msg.Conn.SetLastHeartCheckTime()
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
16
17
18
  	return 0, nil
  }
  
29a163be   zhangqijia   fix: CreateReq ui...
19
20
  func getRandomName() string {
  	name := ""
eadc9aff   zhangqijia   feat: 增加上阵下阵协议,增加...
21
  	for {
29a163be   zhangqijia   fix: CreateReq ui...
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
  		name = common.RandomName(common.DefaultName)
  		if name == "" {
  			continue
  		}
  
  		relay, err := redisproxy.SETNX(fmt.Sprintf(common.NickNames, name), "1")
  		if err != nil {
  			continue
  		}
  		if relay.(int64) == 1 {
  			break
  		}
  	}
  	return name
  }
  
eadc9aff   zhangqijia   feat: 增加上阵下阵协议,增加...
38
  func CreateRpc(agent components.IAgent, msg components.IMessage) (int32, interface{}) {
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
39
  	req := pb.CreateReq{}
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
40
  	if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
cad2b7f3   zhangqijia   reactor: 重构目录, 重构...
41
  		logger.Error("CreateRpc err: %v", err)
101d1cc1   zhangqijia   feat: 一个基于redis的自...
42
  		return 1, err
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
43
  	}
29a163be   zhangqijia   fix: CreateReq ui...
44
  	role := models.RoleExistByUid(req.Token)
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
45
  	if role != nil {
101d1cc1   zhangqijia   feat: 一个基于redis的自...
46
47
48
49
50
51
  		return 2, "role exists"
  	}
  
  	roleId, err := common.GetNextRoleId()
  	if err != nil {
  		return 3, err
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
52
53
  	}
  
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
54
  	role = models.NewRole(roleId)
c47aa250   zhangqijia   feat: 增加GM相关接口。详情...
55
  	role.Role.Uid = req.Token
29a163be   zhangqijia   fix: CreateReq ui...
56
  	role.Role.Nick = getRandomName()
69d286a7   zhangqijia   fix: 插件用来做部分热更
57
  	if err := role.Create(); err != nil {
cad2b7f3   zhangqijia   reactor: 重构目录, 重构...
58
  		logger.Error("CreateRpc role create err: %v", err)
a24dea4c   zhangqijia   fix: id自增做了写更新。阵容...
59
  		return 4, nil
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
60
  	}
8d983031   zhangqijia   loginReq uid -> t...
61
  	role.InitRole()
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
62
63
64
  	return 0, nil
  }
  
eadc9aff   zhangqijia   feat: 增加上阵下阵协议,增加...
65
  func LoginRpc(agent components.IAgent, msg components.IMessage) (int32, interface{}) {
77f5eec7   zhangqijia   plugin 插件热更 接口
66
  	//logger.Debug("11111111cmd: %v, msg: %s", msg.GetHeader().GetMsgID(), msg.GetData())
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
67
  	req := pb.LoginReq{}
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
68
  	if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
cad2b7f3   zhangqijia   reactor: 重构目录, 重构...
69
  		logger.Error("loginRpc err: %v", err)
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
70
71
72
  		return 1, nil
  	}
  
436e0af4   zhangqijia   reactor: dir; Ac...
73
  	role := models.RoleExistByUid(req.Token)
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
74
75
76
  	if role == nil {
  		return 2, nil
  	}
7f269318   zhangqijia   add pb.go; 添加关闭连接...
77
  	role.SetProperty("Device", req.Device)
eadc9aff   zhangqijia   feat: 增加上阵下阵协议,增加...
78
  	protoMsg := &pb.RoleRsp{
17fe96be   zhangqijia   feat: 增加装备相关数据和协议
79
80
81
82
  		Role:       role.Role,
  		Hero:       role.GetAllHero(),
  		Team:       role.GetAllTeam(),
  		Equipments: role.GetEquipments(),
eadc9aff   zhangqijia   feat: 增加上阵下阵协议,增加...
83
84
85
86
87
  	}
  	//登录成功,存储agent role
  	agent.SetSchema(role)
  	return 0, protoMsg
  }
7f269318   zhangqijia   add pb.go; 添加关闭连接...
88
  
a24dea4c   zhangqijia   fix: id自增做了写更新。阵容...
89
90
  func ChangeTeamRpc(agent components.IAgent, msg components.IMessage) (int32, interface{}) {
  	req := pb.ChangeTeamReq{}
eadc9aff   zhangqijia   feat: 增加上阵下阵协议,增加...
91
92
93
94
95
96
97
98
99
100
101
  	if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
  		logger.Error("loginRpc err: %v", err)
  		return 1, nil
  	}
  	role := agent.GetSchema().(*models.RoleModel)
  	if role == nil {
  		return 2, nil
  	}
  
  	role.UpdateTeam(req.Team)
  	return 0, nil
69d286a7   zhangqijia   fix: 插件用来做部分热更
102
  }
17fe96be   zhangqijia   feat: 增加装备相关数据和协议
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
  
  func HeroEquipReferRpc(agent components.IAgent, msg components.IMessage) (int32, interface{}) {
  	req := pb.HeroEquipReferReq{}
  	if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
  		logger.Error("loginRpc err: %v", err)
  		return 1, nil
  	}
  	role := agent.GetSchema().(*models.RoleModel)
  	if role == nil {
  		return 2, nil
  	}
  
  	e, ok := role.Equipments[req.EquipId]
  	if !ok {
  		return 3, nil
  	}
  
  	equip := e.(*models.EquipModel)
  
  	// 装备未被穿戴
  	if equip.Equip.HeroId == "" {
  
  		h, ok := role.Heros[req.HeroId]
  		if ok {
  			hero := h.(*models.HeroModel)
  			hero.UpdateEquipment(equip.Equip.Id, equip.Equip.Type)
  		}
  		equip.SetProperty("heroid", req.HeroId)
  	} else {
  		//装备已经被穿戴
  		if req.HeroId != equip.Equip.HeroId {
  			h, ok := role.Heros[equip.Equip.HeroId]
  			if ok {
  				hero := h.(*models.HeroModel)
  				hero.UpdateEquipment(equip.Equip.Id, "")
  			}
  
  			h, ok = role.Heros[req.HeroId]
  			if ok {
  				hero := h.(*models.HeroModel)
  				hero.UpdateEquipment(equip.Equip.Id, equip.Equip.Type)
  			}
  
  			equip.SetProperty("heroid", req.HeroId)
  		}
  	}
  	return 0, nil
  }