This commit is contained in:
wh_zcy 2022-11-24 16:35:55 +08:00
commit 1f0af69c8d
9 changed files with 222 additions and 371 deletions

View File

@ -9,7 +9,8 @@
"LockSlots": [],
"AssistTeam": 0,
"EventList": [],
"playexp": 1000
"playexp": 1000,
"NoMidwayExit": 0
},
{
"id": 102,
@ -21,7 +22,8 @@
"LockSlots": [],
"AssistTeam": 0,
"EventList": [],
"playexp": 1000
"playexp": 1000,
"NoMidwayExit": 0
},
{
"id": 103,
@ -33,7 +35,8 @@
"LockSlots": [],
"AssistTeam": 0,
"EventList": [],
"playexp": 1000
"playexp": 1000,
"NoMidwayExit": 0
},
{
"id": 104,
@ -45,7 +48,8 @@
"LockSlots": [],
"AssistTeam": 0,
"EventList": [],
"playexp": 1000
"playexp": 1000,
"NoMidwayExit": 0
},
{
"id": 105,
@ -57,7 +61,8 @@
"LockSlots": [],
"AssistTeam": 0,
"EventList": [],
"playexp": 1000
"playexp": 1000,
"NoMidwayExit": 0
},
{
"id": 106,
@ -69,7 +74,8 @@
"LockSlots": [],
"AssistTeam": 0,
"EventList": [],
"playexp": 1000
"playexp": 1000,
"NoMidwayExit": 0
},
{
"id": 107,
@ -81,7 +87,8 @@
"LockSlots": [],
"AssistTeam": 0,
"EventList": [],
"playexp": 1000
"playexp": 1000,
"NoMidwayExit": 0
},
{
"id": 108,
@ -93,7 +100,8 @@
"LockSlots": [],
"AssistTeam": 0,
"EventList": [],
"playexp": 1000
"playexp": 1000,
"NoMidwayExit": 0
},
{
"id": 109,
@ -105,7 +113,8 @@
"LockSlots": [],
"AssistTeam": 0,
"EventList": [],
"playexp": 1000
"playexp": 1000,
"NoMidwayExit": 0
},
{
"id": 110,
@ -117,7 +126,8 @@
"LockSlots": [],
"AssistTeam": 0,
"EventList": [],
"playexp": 1000
"playexp": 1000,
"NoMidwayExit": 0
},
{
"id": 111,
@ -129,7 +139,8 @@
"LockSlots": [],
"AssistTeam": 0,
"EventList": [],
"playexp": 1000
"playexp": 1000,
"NoMidwayExit": 0
},
{
"id": 112,
@ -141,7 +152,8 @@
"LockSlots": [],
"AssistTeam": 0,
"EventList": [],
"playexp": 1000
"playexp": 1000,
"NoMidwayExit": 0
},
{
"id": 113,
@ -153,7 +165,8 @@
"LockSlots": [],
"AssistTeam": 0,
"EventList": [],
"playexp": 1000
"playexp": 1000,
"NoMidwayExit": 0
},
{
"id": 114,
@ -165,6 +178,7 @@
"LockSlots": [],
"AssistTeam": 0,
"EventList": [],
"playexp": 1000
"playexp": 1000,
"NoMidwayExit": 0
}
]

File diff suppressed because it is too large Load Diff

View File

@ -12,8 +12,8 @@ type Options struct {
func DefaultOpts() *Options {
return &Options{
WsUrl: "ws://localhost:7891/gateway",
RegUrl: "http://localhost:8000/register",
WsUrl: "ws://10.0.5.73:7891/gateway",
RegUrl: "http://10.0.5.73:8000/register",
Create: false,
ServerId: "1",
}

View File

@ -162,7 +162,7 @@ type (
// 远程任务条件校验
RemoteCheckCondi(uid string, condiId int32, rsp *pb.DBRtaskRecord) error
// 删除任务条件数据
RemoveCondi(uid string ,condiId int32) error
RemoveCondi(uid string, condiId int32) error
//任务触发
SendToRtask(session IUserSession, rtaskType TaskType, params ...int32) (code pb.ErrorCode)
// 初始化条件数据
@ -263,9 +263,9 @@ type (
}
IPrivilege interface {
// 创建一个新的特权卡
CreatePrivilegeCard(session IUserSession, cId string) (res []*pb.UserAssets, code pb.ErrorCode)
CreatePrivilegeCard(session IUserSession, cId string) (code pb.ErrorCode)
// 续费特权卡
RenewPrivilegeCard(session IUserSession, cId string) (res []*pb.UserAssets, code pb.ErrorCode)
RenewPrivilegeCard(session IUserSession, cId string) (code pb.ErrorCode)
// 检查特权
CheckPrivilege(session IUserSession, cId string) (privilege *pb.DBPrivilege)
// 查询玩家当前所有特权 返回特权id

View File

@ -1,12 +1,28 @@
package battle
import (
"go_dreamfactory/lego/sys/log"
"google.golang.org/protobuf/proto"
)
//异步返回结构
type MessageCall struct {
Method string
Metadata map[string]string
ResMetadata map[string]string
Args interface{} //请求参数
Reply interface{} //返回参数
Args proto.Message //请求参数
Reply proto.Message //返回参数
Error error //错误信息
Done chan *MessageCall
}
func (call *MessageCall) done(log log.Ilogf) {
select {
case call.Done <- call:
// ok
default:
log.Debugf("rpc: discarding Call reply due to insufficient Done chan capacity")
}
}

View File

@ -1,13 +1,16 @@
package battle
import (
"context"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"sync"
"go_dreamfactory/lego/core"
"github.com/gorilla/websocket"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/types/known/anypb"
)
/*
@ -19,6 +22,9 @@ type clientComp struct {
service core.IService
module *Battle
conn *websocket.Conn
seq uint64
pendingmutex sync.Mutex
pending map[uint64]*MessageCall //高并发回调
}
//组件初始化接口
@ -26,6 +32,7 @@ func (this *clientComp) Init(service core.IService, module core.IModule, comp co
this.MCompGate.Init(service, module, comp, options)
this.options = options.(*Options)
this.module = module.(*Battle)
this.pending = make(map[uint64]*MessageCall)
return
}
@ -37,8 +44,43 @@ func (this *clientComp) Start() (err error) {
}
//校验战斗过程
func (this *clientComp) CheckBattle() {
func (this *clientComp) callBattle(ctx context.Context, method string, req proto.Message, reply proto.Message) (err error) {
call := new(MessageCall)
call.Done = make(chan *MessageCall, 10)
call.Args = req
call.Reply = reply
this.pendingmutex.Lock()
seq := this.seq
this.seq++
this.pending[seq] = call
this.pendingmutex.Unlock()
msg := &pb.BattleRpcMessage{
Rid: seq,
Method: method,
}
msg.Data, _ = anypb.New(req)
data, _ := proto.Marshal(msg)
if err = this.conn.WriteMessage(websocket.BinaryMessage, data); err != nil {
this.pendingmutex.Lock()
delete(this.pending, seq)
this.pendingmutex.Unlock()
return
}
select {
case <-ctx.Done(): // cancel by context
this.pendingmutex.Lock()
call := this.pending[seq]
delete(this.pending, seq)
this.pendingmutex.Unlock()
if call != nil {
call.Error = ctx.Err()
call.done(this.options.Log)
}
return ctx.Err()
case call := <-call.Done:
err = call.Error
}
return
}
func (this *clientComp) run() {
@ -57,5 +99,16 @@ locp:
this.module.Errorf("client Unmarshal err:%v", err)
break locp
}
go this.handleresponse(msg)
}
}
func (this *clientComp) handleresponse(resp *pb.BattleRpcMessage) {
var call *MessageCall
this.pendingmutex.Lock()
call = this.pending[resp.Rid]
delete(this.pending, resp.Rid)
this.pendingmutex.Unlock()
call.Error = resp.Data.UnmarshalTo(call.Reply)
call.done(this.options.Log)
}

View File

@ -302,7 +302,7 @@ func (this *ModuleBase) ConsumeRes(session comm.IUserSession, res []*cfg.Gameatn
return
}
this.Debugf("消耗玩家资源: %v", attrs)
if count,ok:= attrs[comm.ResDiamond];ok{
if count, ok := attrs[comm.ResDiamond]; ok {
this.ModuleRtask.SendToRtask(session, comm.Rtype104, count)
}
}
@ -369,7 +369,7 @@ func (this *ModuleBase) DispenseRes(session comm.IUserSession, res []*cfg.Gameat
}
if len(vip) > 0 { //卡片资源
for k := range vip {
_, code = this.ModulePrivilege.CreatePrivilegeCard(session, k)
code = this.ModulePrivilege.CreatePrivilegeCard(session, k)
this.Debugf("发放月卡资源: %v [%v]", k, code)
}

View File

@ -21,6 +21,6 @@ func (this *apiComp) BuyYueka(session comm.IUserSession, req *pb.PrivilegeBuyYue
if code = this.BuyYuekaCheck(session, req); code != pb.ErrorCode_Success {
return
}
_, code = this.module.CreatePrivilegeCard(session, req.CID)
code = this.module.CreatePrivilegeCard(session, req.CID)
return
}

View File

@ -64,21 +64,14 @@ func (this *Privilege) EventUserOffline(session comm.IUserSession) {
}
// 购买了一个新的特权
func (this *Privilege) CreatePrivilegeCard(session comm.IUserSession, cId string) (res []*pb.UserAssets, code pb.ErrorCode) {
func (this *Privilege) CreatePrivilegeCard(session comm.IUserSession, cId string) (code pb.ErrorCode) {
var (
data *pb.DBPrivilege
bFind bool
)
atn := &pb.UserAssets{
A: "vip",
T: "",
N: 1,
}
conf, err := this.configure.GetPrivilegeCard(cId)
if err != nil {
code = pb.ErrorCode_ConfigNoFound
return nil, code
return pb.ErrorCode_ConfigNoFound
}
// 是不是购买过
list, err := this.modelPrivilege.getPrivilegeList(session.GetUserId())
@ -105,14 +98,13 @@ func (this *Privilege) CreatePrivilegeCard(session comm.IUserSession, cId string
this.Errorf("err:%v", err)
return
}
data = v
bFind = true
break
}
}
if !bFind {
data = &pb.DBPrivilege{
data := &pb.DBPrivilege{
Id: primitive.NewObjectID().Hex(),
Uid: session.GetUserId(),
CId: cId,
@ -125,6 +117,7 @@ func (this *Privilege) CreatePrivilegeCard(session comm.IUserSession, cId string
for _, v := range conf.PrivilegeId {
data.PrivilegeID = append(data.PrivilegeID, v)
}
list = append(list, data)
this.modelPrivilege.addNewPrivilegeData(session.GetUserId(), data)
this.SendDailyMail(session, cId, 1, conf.PType)
}
@ -132,29 +125,13 @@ func (this *Privilege) CreatePrivilegeCard(session comm.IUserSession, cId string
if code = this.DispenseRes(session, conf.DisposableReward, true); code != pb.ErrorCode_Success {
return
}
atn.T = conf.Id
res = append(res, atn) // 加资源
for _, v := range conf.DisposableReward {
res = append(res, &pb.UserAssets{
A: v.A,
T: v.T,
N: v.N,
})
}
// 推送
session.SendMsg(string(this.GetType()), PrivilegeBuyYuekaResp, &pb.PrivilegeGetListResp{Data: list})
return
}
// 续费特权
func (this *Privilege) RenewPrivilegeCard(session comm.IUserSession, cId string) (res []*pb.UserAssets, code pb.ErrorCode) {
atn := &pb.UserAssets{
A: "vip",
T: "",
N: 1, // 暂时只支持一次续费一次
}
func (this *Privilege) RenewPrivilegeCard(session comm.IUserSession, cId string) (code pb.ErrorCode) {
list, err := this.modelPrivilege.getPrivilegeList(session.GetUserId())
if err != nil {
return
@ -163,8 +140,8 @@ func (this *Privilege) RenewPrivilegeCard(session comm.IUserSession, cId string)
if v.CId == cId {
conf, err := this.configure.GetPrivilegeCard(cId)
if err != nil {
code = pb.ErrorCode_ConfigNoFound
return nil, code
return pb.ErrorCode_ConfigNoFound
}
if conf.RenewDay >= int32(configure.Now().Unix()-v.ETime)/(24*3600) {
v.ETime += int64(conf.AssertDay) * 24 * 3600
@ -175,18 +152,7 @@ func (this *Privilege) RenewPrivilegeCard(session comm.IUserSession, cId string)
if code = this.DispenseRes(session, conf.DisposableReward, true); code != pb.ErrorCode_Success {
break
}
session.SendMsg(string(this.GetType()), PrivilegeBuyYuekaResp, &pb.PrivilegeGetListResp{Data: list})
atn.T = conf.Id
res = append(res, atn) // 加资源
for _, v := range conf.DisposableReward {
res = append(res, &pb.UserAssets{
A: v.A,
T: v.T,
N: v.N,
})
}
} else {
code = pb.ErrorCode_PrivilegeRenewTime
}