RoleAction.go 3.33 KB
package action

import (
	"fmt"
	"github.com/golang/protobuf/proto"
	"pro2d/common"
	"pro2d/common/components"
	"pro2d/common/db/redisproxy"
	"pro2d/common/logger"
	"pro2d/models"
	"pro2d/pb"
)

func HeartRpc(agent components.IAgent, msg components.IMessage) (int32, interface{}) {
	//msg.Conn.SetLastHeartCheckTime()
	return 0, nil
}

func getRandomName() string {
	name := ""
	for {
		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
}

func CreateRpc(agent components.IAgent, msg components.IMessage) (int32, interface{}) {
	req := pb.CreateReq{}
	if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
		logger.Error("CreateRpc err: %v", err)
		return 1, err
	}
	role := models.RoleExistByUid(req.Token)
	if role != nil {
		return 2, "role exists"
	}

	roleId, err := common.GetNextRoleId()
	if err != nil {
		return 3, err
	}

	role = models.NewRole(roleId)
	role.Role.Uid = req.Token
	role.Role.Nick = getRandomName()
	if err := role.Create(); err != nil {
		logger.Error("CreateRpc role create err: %v", err)
		return 4, nil
	}
	role.InitRole()
	return 0, nil
}

func LoginRpc(agent components.IAgent, msg components.IMessage) (int32, interface{}) {
	//logger.Debug("11111111cmd: %v, msg: %s", msg.GetHeader().GetMsgID(), msg.GetData())
	req := pb.LoginReq{}
	if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
		logger.Error("loginRpc err: %v", err)
		return 1, nil
	}

	role := models.RoleExistByUid(req.Token)
	if role == nil {
		return 2, nil
	}
	role.SetProperty("Device", req.Device)
	protoMsg := &pb.RoleRsp{
		Role:       role.Role,
		Hero:       role.GetAllHero(),
		Team:       role.GetAllTeam(),
		Equipments: role.GetEquipments(),
	}
	//登录成功,存储agent role
	agent.SetSchema(role)
	return 0, protoMsg
}

func ChangeTeamRpc(agent components.IAgent, msg components.IMessage) (int32, interface{}) {
	req := pb.ChangeTeamReq{}
	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
}

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
}