From 85a115809c9243225d50aecf605c3182962310d9 Mon Sep 17 00:00:00 2001 From: kxdd Date: Tue, 3 Sep 2024 16:48:21 +0800 Subject: [PATCH 01/19] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A8=83=E5=A8=83?= =?UTF-8?q?=E6=9C=BA=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index d789cca..fd8bef9 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit d789cca81a36ddbaf30e5414b6c4fe530e0631f6 +Subproject commit fd8bef907ea15489504529da70f72038444b54e0 From d16c1a188703e501e5e666d9686c8eef81870ac4 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Tue, 3 Sep 2024 17:15:05 +0800 Subject: [PATCH 02/19] =?UTF-8?q?=E4=BF=AE=E6=94=B9log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/base/srvsessmgr.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gamesrv/base/srvsessmgr.go b/gamesrv/base/srvsessmgr.go index c401c26..3e95b69 100644 --- a/gamesrv/base/srvsessmgr.go +++ b/gamesrv/base/srvsessmgr.go @@ -1,7 +1,6 @@ package base import ( - "fmt" "mongo.games.com/game/common" "mongo.games.com/game/protocol/machine" "mongo.games.com/goserver/core/logger" @@ -32,7 +31,7 @@ func (this *SrvSessMgr) OnRegiste(s *netlib.Session) { } else if srvInfo.GetType() == 10 { logger.Logger.Warn("(this *SrvSessMgr) OnRegiste (Machine):", s) s.Send(int(machine.DollMachinePacketID_PACKET_SMGameLinkSucceed), &machine.SMGameLinkSucceed{}) - fmt.Printf("与娃娃机服务器连接成功\n") + logger.Logger.Info("与娃娃机服务器连接成功\n") } } } From c4d58262de8010f6fb3d5dd9a73285513a7453a7 Mon Sep 17 00:00:00 2001 From: kxdd Date: Tue, 3 Sep 2024 17:50:19 +0800 Subject: [PATCH 03/19] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=B5=81ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/base/scene.go | 9 +- gamesrv/clawdoll/action_clawdoll.go | 20 ++-- gamesrv/clawdoll/scenepolicy_clawdoll.go | 12 ++- machine/action/action_server.go | 1 + protocol/clawdoll/clawdoll.pb.go | 112 ++++++++++++----------- protocol/clawdoll/clawdoll.proto | 1 + protocol/machine/machine.pb.go | 86 ++++++++++------- protocol/machine/machine.proto | 2 + 8 files changed, 142 insertions(+), 101 deletions(-) diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index bec0917..91d8a24 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -4,6 +4,7 @@ import ( "fmt" "math" "math/rand" + "mongo.games.com/game/protocol/webapi" "strconv" "time" @@ -2551,15 +2552,15 @@ func (this *Scene) TryRelease() { this.Destroy(true) } } -func (this *Scene) GetMachineServerSecret(MachineId int32, platform string) (AppId int64, ServerSecret string) { +func (this *Scene) GetMachineServerInfo(MachineId int32, platform string) *webapi.MachineInfo { config := ConfigMgrInst.GetConfig(platform).MachineConfig if config == nil { - return 0, "" + return nil } for _, info := range config.Info { if info.MachineId == MachineId { - return info.AppId, info.ServerSecret + return info } } - return 0, "" + return nil } diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 11fddd2..75e5fd2 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -127,14 +127,17 @@ func (h *CSGetTokenHandler) Process(s *netlib.Session, packetid int, data interf } machineId := scene.GetDBGameFree().GetId() % 6080000 - appId, serverSecret := sceneEx.GetMachineServerSecret(machineId, p.Platform) - logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v", appId, serverSecret) - if serverSecret == "" || appId == 0 { + machineInfo := sceneEx.GetMachineServerInfo(machineId, p.Platform) + if machineInfo == nil { return nil } - pack.ServerSecret = serverSecret - pack.AppId = appId + logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v, streamId = %v", machineInfo.AppId, machineInfo.ServerSecret, machineInfo.StreamId) + + pack.ServerSecret = machineInfo.ServerSecret + pack.AppId = machineInfo.AppId + pack.StreamId = machineInfo.StreamId + sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMGetToken), pack) } return nil @@ -158,9 +161,10 @@ func MSSendTokenHandler(session *netlib.Session, packetId int, data interface{}) } pack := &clawdoll.SCCLAWDOLLSendToken{ - LogicId: scene.DBGameFree.GetId(), - Appid: msg.Appid, - Token: token, + LogicId: scene.DBGameFree.GetId(), + Appid: msg.Appid, + Token: token, + StreamId: msg.StreamId, } p.SendToClient(int(clawdoll.CLAWDOLLPacketID_PACKET_SC_SENDTOKEN), pack) } diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 713da22..8d56913 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -285,14 +285,16 @@ func (this *PolicyClawdoll) SendGetVideoToken(s *base.Scene, p *base.Player, sce pack.Snid = p.SnId machineId := s.DBGameFree.GetId() % 6080000 - appId, serverSecret := sceneEx.GetMachineServerSecret(machineId, p.Platform) - logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v", appId, serverSecret) - if serverSecret == "" || appId == 0 { + machineinfo := sceneEx.GetMachineServerInfo(machineId, p.Platform) + if machineinfo == nil { return } - pack.ServerSecret = serverSecret - pack.AppId = appId + logger.Logger.Tracef("获取娃娃机 appId = %v, serverSecret = %v, streamId = %v", machineinfo.AppId, machineinfo.ServerSecret, machineinfo.StreamId) + + pack.ServerSecret = machineinfo.ServerSecret + pack.AppId = machineinfo.AppId + pack.StreamId = machineinfo.StreamId sceneEx.SendToMachine(int(machine.DollMachinePacketID_PACKET_SMGetToken), pack) } diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 6138a53..48252c6 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -300,6 +300,7 @@ func SMGetTokenHandler(session *netlib.Session, packetId int, data interface{}) info.Snid = msg.Snid info.Token = token info.Appid = msg.AppId + info.StreamId = msg.StreamId session.Send(int(machine.DollMachinePacketID_PACKET_MSSendToken), info) logger.Logger.Tracef("向游戏服务器发送娃娃机token:%v", info) diff --git a/protocol/clawdoll/clawdoll.pb.go b/protocol/clawdoll/clawdoll.pb.go index 010b9fb..098f4ca 100644 --- a/protocol/clawdoll/clawdoll.pb.go +++ b/protocol/clawdoll/clawdoll.pb.go @@ -881,9 +881,10 @@ type SCCLAWDOLLSendToken struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - LogicId int32 `protobuf:"varint,1,opt,name=LogicId,proto3" json:"LogicId,omitempty"` - Appid int64 `protobuf:"varint,2,opt,name=Appid,proto3" json:"Appid,omitempty"` - Token string `protobuf:"bytes,3,opt,name=Token,proto3" json:"Token,omitempty"` + LogicId int32 `protobuf:"varint,1,opt,name=LogicId,proto3" json:"LogicId,omitempty"` + Appid int64 `protobuf:"varint,2,opt,name=Appid,proto3" json:"Appid,omitempty"` + Token string `protobuf:"bytes,3,opt,name=Token,proto3" json:"Token,omitempty"` + StreamId string `protobuf:"bytes,4,opt,name=StreamId,proto3" json:"StreamId,omitempty"` } func (x *SCCLAWDOLLSendToken) Reset() { @@ -939,6 +940,13 @@ func (x *SCCLAWDOLLSendToken) GetToken() string { return "" } +func (x *SCCLAWDOLLSendToken) GetStreamId() string { + if x != nil { + return x.StreamId + } + return "" +} + type CLAWDOLLWaitPlayers struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1145,59 +1153,61 @@ var file_clawdoll_proto_rawDesc = []byte{ 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x43, 0x53, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x47, 0x65, 0x74, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x22, 0x5b, 0x0a, 0x13, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, + 0x6b, 0x65, 0x6e, 0x22, 0x77, 0x0a, 0x13, 0x53, 0x43, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x22, 0x63, 0x0a, 0x13, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x57, 0x61, 0x69, 0x74, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x0f, 0x57, 0x61, 0x69, 0x74, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x63, 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x2e, 0x43, 0x4c, 0x41, 0x57, - 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x70, 0x0a, 0x18, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, - 0x4c, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x53, 0x6e, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x48, 0x65, 0x61, - 0x64, 0x55, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, - 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x2a, 0xfd, 0x02, 0x0a, 0x10, 0x43, 0x4c, 0x41, 0x57, - 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x0f, 0x0a, 0x0b, - 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, - 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x49, - 0x4e, 0x46, 0x4f, 0x10, 0xe1, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x43, 0x53, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe2, 0x2b, 0x12, - 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, - 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, - 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, - 0xe4, 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, - 0x47, 0x41, 0x4d, 0x45, 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe5, 0x2b, 0x12, 0x1a, 0x0a, - 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, - 0x76, 0x65, 0x10, 0xe7, 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, - 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, 0x2b, - 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, - 0x54, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xe9, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, - 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x54, 0x4f, 0x4b, 0x45, 0x4e, - 0x10, 0xea, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, - 0x5f, 0x57, 0x41, 0x49, 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xeb, 0x2b, 0x12, - 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x41, 0x49, - 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xec, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x49, 0x4e, 0x47, - 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xed, 0x2b, 0x2a, 0x64, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, - 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x52, - 0x43, 0x5f, 0x43, 0x6f, 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, - 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x6f, 0x73, 0x41, 0x6c, 0x52, - 0x65, 0x61, 0x64, 0x79, 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x42, 0x28, 0x5a, - 0x26, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, - 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x22, 0x63, 0x0a, 0x13, + 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x0f, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, + 0x6c, 0x61, 0x77, 0x64, 0x6f, 0x6c, 0x6c, 0x2e, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x0f, 0x57, 0x61, 0x69, 0x74, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, + 0x6f, 0x22, 0x70, 0x0a, 0x18, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, 0x50, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x48, 0x65, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x12, + 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, + 0x61, 0x6d, 0x65, 0x2a, 0xfd, 0x02, 0x0a, 0x10, 0x43, 0x4c, 0x41, 0x57, 0x44, 0x4f, 0x4c, 0x4c, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x5a, 0x45, 0x52, 0x4f, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x49, 0x4e, 0x46, 0x4f, 0x10, + 0xe1, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, + 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, 0x50, 0x10, 0xe2, 0x2b, 0x12, 0x17, 0x0a, 0x12, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x4f, + 0x50, 0x10, 0xe3, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, + 0x43, 0x5f, 0x52, 0x4f, 0x4f, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0xe4, 0x2b, 0x12, 0x19, + 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x47, 0x41, 0x4d, 0x45, + 0x42, 0x49, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0xe5, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, + 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x45, 0x6e, 0x74, + 0x65, 0x72, 0x10, 0xe6, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x10, 0xe7, + 0x2b, 0x12, 0x19, 0x0a, 0x14, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, + 0x4c, 0x41, 0x59, 0x45, 0x52, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe8, 0x2b, 0x12, 0x17, 0x0a, 0x12, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x54, 0x4f, 0x4b, + 0x45, 0x4e, 0x10, 0xe9, 0x2b, 0x12, 0x18, 0x0a, 0x13, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, + 0x53, 0x43, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x10, 0xea, 0x2b, 0x12, + 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x43, 0x53, 0x5f, 0x57, 0x41, 0x49, + 0x54, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x52, 0x53, 0x10, 0xeb, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, + 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x50, 0x4c, 0x41, + 0x59, 0x45, 0x52, 0x53, 0x10, 0xec, 0x2b, 0x12, 0x1a, 0x0a, 0x15, 0x50, 0x41, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x53, 0x43, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x49, 0x4e, 0x47, 0x49, 0x4e, 0x46, 0x4f, + 0x10, 0xed, 0x2b, 0x2a, 0x64, 0x0a, 0x0c, 0x4f, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x53, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x43, 0x6f, + 0x69, 0x6e, 0x4e, 0x6f, 0x74, 0x45, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x10, 0x02, 0x12, 0x1a, 0x0a, + 0x16, 0x4f, 0x50, 0x52, 0x43, 0x5f, 0x50, 0x6f, 0x73, 0x41, 0x6c, 0x52, 0x65, 0x61, 0x64, 0x79, + 0x50, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x42, 0x28, 0x5a, 0x26, 0x6d, 0x6f, 0x6e, + 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6c, 0x61, 0x77, 0x64, + 0x6f, 0x6c, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/clawdoll/clawdoll.proto b/protocol/clawdoll/clawdoll.proto index a3f075b..2dea4f0 100644 --- a/protocol/clawdoll/clawdoll.proto +++ b/protocol/clawdoll/clawdoll.proto @@ -117,6 +117,7 @@ message SCCLAWDOLLSendToken { int32 LogicId = 1; int64 Appid = 2; string Token = 3; + string StreamId = 4; } message CLAWDOLLWaitPlayers { diff --git a/protocol/machine/machine.pb.go b/protocol/machine/machine.pb.go index 464b384..e3cc943 100644 --- a/protocol/machine/machine.pb.go +++ b/protocol/machine/machine.pb.go @@ -505,6 +505,7 @@ type SMGetToken struct { Snid int32 `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"` AppId int64 `protobuf:"varint,2,opt,name=AppId,proto3" json:"AppId,omitempty"` ServerSecret string `protobuf:"bytes,3,opt,name=ServerSecret,proto3" json:"ServerSecret,omitempty"` + StreamId string `protobuf:"bytes,4,opt,name=StreamId,proto3" json:"StreamId,omitempty"` } func (x *SMGetToken) Reset() { @@ -560,15 +561,23 @@ func (x *SMGetToken) GetServerSecret() string { return "" } +func (x *SMGetToken) GetStreamId() string { + if x != nil { + return x.StreamId + } + return "" +} + //返回token type MSSendToken struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Snid int32 `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"` - Appid int64 `protobuf:"varint,2,opt,name=Appid,proto3" json:"Appid,omitempty"` - Token string `protobuf:"bytes,3,opt,name=Token,proto3" json:"Token,omitempty"` + Snid int32 `protobuf:"varint,1,opt,name=Snid,proto3" json:"Snid,omitempty"` + Appid int64 `protobuf:"varint,2,opt,name=Appid,proto3" json:"Appid,omitempty"` + Token string `protobuf:"bytes,3,opt,name=Token,proto3" json:"Token,omitempty"` + StreamId string `protobuf:"bytes,4,opt,name=StreamId,proto3" json:"StreamId,omitempty"` } func (x *MSSendToken) Reset() { @@ -624,6 +633,13 @@ func (x *MSSendToken) GetToken() string { return "" } +func (x *MSSendToken) GetStreamId() string { + if x != nil { + return x.StreamId + } + return "" +} + var File_machine_proto protoreflect.FileDescriptor var file_machine_proto_rawDesc = []byte{ @@ -661,40 +677,44 @@ var file_machine_proto_rawDesc = []byte{ 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, - 0x64, 0x64, 0x72, 0x22, 0x5a, 0x0a, 0x0a, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, + 0x64, 0x64, 0x72, 0x22, 0x76, 0x0a, 0x0a, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, - 0x4d, 0x0a, 0x0b, 0x4d, 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, - 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x2a, 0xb9, - 0x02, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x50, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5a, 0x65, - 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, - 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, - 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x50, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x47, 0x72, - 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e, 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x26, 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, - 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x10, 0xa4, 0x9c, 0x01, 0x12, 0x27, - 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x6f, 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x10, 0xa5, 0x9c, 0x01, 0x12, 0x17, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, - 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa6, 0x9c, 0x01, - 0x12, 0x18, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x53, 0x65, 0x6e, - 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa7, 0x9c, 0x01, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, - 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, - 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x09, 0x52, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, + 0x1a, 0x0a, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x22, 0x69, 0x0a, 0x0b, 0x4d, + 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x6e, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x53, 0x6e, 0x69, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x41, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x41, + 0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x2a, 0xb9, 0x02, 0x0a, 0x13, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x12, 0x1c, + 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5a, 0x65, 0x72, 0x6f, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x18, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x61, 0x6d, 0x65, 0x4c, 0x69, 0x6e, + 0x6b, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x10, 0xa0, 0x9c, 0x01, 0x12, 0x20, 0x0a, 0x1a, + 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x50, 0x65, 0x72, 0x61, 0x74, 0x65, 0x10, 0xa1, 0x9c, 0x01, 0x12, 0x1e, + 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x47, 0x72, 0x61, 0x62, 0x10, 0xa2, 0x9c, 0x01, 0x12, 0x1e, + 0x0a, 0x18, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x10, 0xa3, 0x9c, 0x01, 0x12, 0x26, + 0x0a, 0x20, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x10, 0xa4, 0x9c, 0x01, 0x12, 0x27, 0x0a, 0x21, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x4d, 0x53, 0x44, 0x6f, 0x6c, 0x6c, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x6f, 0x50, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x10, 0xa5, 0x9c, 0x01, 0x12, + 0x17, 0x0a, 0x11, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x53, 0x4d, 0x47, 0x65, 0x74, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa6, 0x9c, 0x01, 0x12, 0x18, 0x0a, 0x12, 0x50, 0x41, 0x43, 0x4b, + 0x45, 0x54, 0x5f, 0x4d, 0x53, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0xa7, + 0x9c, 0x01, 0x42, 0x27, 0x5a, 0x25, 0x6d, 0x6f, 0x6e, 0x67, 0x6f, 0x2e, 0x67, 0x61, 0x6d, 0x65, + 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x61, 0x6d, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/machine/machine.proto b/protocol/machine/machine.proto index 472cb4b..a109267 100644 --- a/protocol/machine/machine.proto +++ b/protocol/machine/machine.proto @@ -64,10 +64,12 @@ message SMGetToken{ int32 Snid = 1; int64 AppId = 2; string ServerSecret = 3; + string StreamId = 4; } //返回token message MSSendToken{ int32 Snid = 1; int64 Appid = 2; string Token = 3; + string StreamId = 4; } \ No newline at end of file From 92bf5fe16ec0d28c272a37444c02e8ecad8b7c10 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 3 Sep 2024 18:09:09 +0800 Subject: [PATCH 04/19] review --- gamesrv/action/action_server.go | 91 +++++++++++++++++---------------- gamesrv/base/scene.go | 4 +- 2 files changed, 48 insertions(+), 47 deletions(-) diff --git a/gamesrv/action/action_server.go b/gamesrv/action/action_server.go index 8826281..664ab9b 100644 --- a/gamesrv/action/action_server.go +++ b/gamesrv/action/action_server.go @@ -73,7 +73,7 @@ func HandleWGBuyRecTimeItem(session *netlib.Session, packetId int, data interfac // return nil //} -func CreateSceneHandler(session *netlib.Session, packetId int, data interface{}) error { +func CreateScene(session *netlib.Session, packetId int, data interface{}) error { logger.Logger.Tracef("receive CreateScene %v", data) msg, ok := data.(*server.WGCreateScene) if !ok { @@ -86,52 +86,53 @@ func CreateSceneHandler(session *netlib.Session, packetId int, data interface{}) return nil } +func DestroyScene(session *netlib.Session, packetId int, data interface{}) error { + logger.Logger.Trace("receive WGDestroyScene:", data) + msg, ok := data.(*server.WGDestroyScene) + if !ok { + return nil + } + + if !msg.IsGrace { + // 立刻删除,不管游戏是否结束 + for _, v := range msg.Ids { + s := base.SceneMgrSington.GetScene(int(v)) + if s == nil { + continue + } + if gameScene, ok := s.ExtraData.(base.GameScene); ok { + gameScene.SceneDestroy(true) + } + } + return nil + } + + // 游戏结束后删除房间 + for _, v := range msg.Ids { + s := base.SceneMgrSington.GetScene(int(v)) + if s == nil { + continue + } + if s.IsHundredScene() || s.Gaming { + s.SetGraceDestroy() + } else { + if s.IsMatchScene() { + s.SetGraceDestroy() + } + if gameScene, ok := s.ExtraData.(base.GameScene); ok { + gameScene.SceneDestroy(true) + } + } + } + + return nil +} + func init() { // 创建房间 - netlib.Register(int(server.SSPacketID_PACKET_WG_CREATESCENE), &server.WGCreateScene{}, CreateSceneHandler) - - //删除场景 - // 立刻删除,不管游戏是否结束 - netlib.RegisterFactory(int(server.SSPacketID_PACKET_WG_DESTROYSCENE), netlib.PacketFactoryWrapper(func() interface{} { - return &server.WGDestroyScene{} - })) - netlib.RegisterHandler(int(server.SSPacketID_PACKET_WG_DESTROYSCENE), netlib.HandlerWrapper(func(s *netlib.Session, packetid int, pack interface{}) error { - logger.Logger.Trace("receive WGDestroyScene:", pack) - msg, ok := pack.(*server.WGDestroyScene) - if !ok { - return nil - } - if !msg.IsGrace { - // 立刻删除,不管游戏是否结束 - for _, v := range msg.Ids { - s := base.SceneMgrSington.GetScene(int(v)) - if s != nil { - if gameScene, ok := s.ExtraData.(base.GameScene); ok { - gameScene.SceneDestroy(true) - } - } - } - } else { - // 游戏结束后删除房间 - for _, v := range msg.Ids { - s := base.SceneMgrSington.GetScene(int(v)) - if s != nil { - if s.IsHundredScene() || s.Gaming { - s.SetGraceDestroy(true) - } else { - if s.IsMatchScene() { - s.SetGraceDestroy(true) - } - if gameScene, ok := s.ExtraData.(base.GameScene); ok { - gameScene.SceneDestroy(true) - } - } - } - } - } - - return nil - })) + netlib.Register(int(server.SSPacketID_PACKET_WG_CREATESCENE), &server.WGCreateScene{}, CreateScene) + // 删除房间 + netlib.Register(int(server.SSPacketID_PACKET_WG_DESTROYSCENE), &server.WGDestroyScene{}, DestroyScene) //玩家进入 netlib.RegisterFactory(int(server.SSPacketID_PACKET_WG_PLAYERENTER), netlib.PacketFactoryWrapper(func() interface{} { diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 5f5b0e3..66b37f2 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -297,8 +297,8 @@ func (this *Scene) SetScenePolicy(sp ScenePolicy) { func (this *Scene) GetGraceDestroy() bool { return this.graceDestroy } -func (this *Scene) SetGraceDestroy(graceDestroy bool) { - this.graceDestroy = graceDestroy +func (this *Scene) SetGraceDestroy() { + this.graceDestroy = true } func (this *Scene) GetCpControlled() bool { From 7c00ec5067ae6e8868df7d581c77bddff91c6e9c Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Tue, 3 Sep 2024 18:42:49 +0800 Subject: [PATCH 05/19] =?UTF-8?q?=E9=81=93=E5=85=B7=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E8=BF=94=E5=9B=9E=E9=94=99=E8=AF=AF=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbproxy/svc/u_bag.go | 14 ++++++++++++-- worldsrv/trascate_webapi.go | 10 ++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/dbproxy/svc/u_bag.go b/dbproxy/svc/u_bag.go index 48afcfd..cc07df2 100644 --- a/dbproxy/svc/u_bag.go +++ b/dbproxy/svc/u_bag.go @@ -101,7 +101,8 @@ func (svc *BagSvc) AddBagItem(args *model.BagInfo, ret *bool) error { for id, v := range args.BagItem { if item, exist := bag.BagItem[id]; !exist { if v.ItemNum <= 0 { - continue + err = errors.New("item num not enough") + break } bag.BagItem[id] = &model.Item{ ItemId: v.ItemId, @@ -110,7 +111,8 @@ func (svc *BagSvc) AddBagItem(args *model.BagInfo, ret *bool) error { } } else { if v.ItemNum < 0 && -v.ItemNum > item.ItemNum { - v.ItemNum = -item.ItemNum + err = errors.New("item num not enough") + break } item.ItemNum += v.ItemNum } @@ -119,10 +121,18 @@ func (svc *BagSvc) AddBagItem(args *model.BagInfo, ret *bool) error { vCard = v.ItemNum } } + + if err != nil { + *ret = false + logger.Logger.Errorf("AddBagItem error: %v", err) + return err + } + _, err = cbag.Upsert(bson.M{"_id": bag.BagId}, bag) if err != nil { *ret = false logger.Logger.Info("AddBagItem error ", err) + return err } // v卡返还 diff --git a/worldsrv/trascate_webapi.go b/worldsrv/trascate_webapi.go index 454fedd..bb2e4e6 100644 --- a/worldsrv/trascate_webapi.go +++ b/worldsrv/trascate_webapi.go @@ -3761,15 +3761,21 @@ func init() { p := PlayerMgrSington.GetPlayerBySnId(msg.GetSnid()) if p != nil { //获取道具Id - BagMgrSingleton.AddItemsV2(&model.AddItemParam{ + _, _, ok := BagMgrSingleton.AddItemsV2(&model.AddItemParam{ P: p.PlayerData, Change: items, GainWay: msg.GetTypeId(), Operator: "system", Remark: msg.GetRemark(), }) + if !ok { + logger.Logger.Errorf("player delete %v err: %v", msg, err) + pack.Tag = webapiproto.TagCode_FAILED + pack.Msg = "修改道具失败" + return common.ResponseTag_Ok, pack + } pack.Tag = webapiproto.TagCode_SUCCESS - pack.Msg = "AddItem success" + pack.Msg = "修改道具成功" return common.ResponseTag_Ok, pack } else { BagMgrSingleton.AddItemsOffline(msg.Platform, msg.Snid, items, msg.GetTypeId(), From e23f33c5696bd8e429c247d71bb9f8fbe6454500 Mon Sep 17 00:00:00 2001 From: kxdd Date: Wed, 4 Sep 2024 10:01:15 +0800 Subject: [PATCH 06/19] public --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index d789cca..fd8bef9 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit d789cca81a36ddbaf30e5414b6c4fe530e0631f6 +Subproject commit fd8bef907ea15489504529da70f72038444b54e0 From c4a0a31df87209c880c42d733746c83c4b0d90c0 Mon Sep 17 00:00:00 2001 From: kxdd Date: Wed, 4 Sep 2024 10:01:50 +0800 Subject: [PATCH 07/19] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A8=83=E5=A8=83?= =?UTF-8?q?=E6=9C=BAID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index fd8bef9..cbad299 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit fd8bef907ea15489504529da70f72038444b54e0 +Subproject commit cbad2992a1ce71327def46ea01ebbcc8800bee89 From 27eb944329cde8a3cd05511c26d90bf07f6a930a Mon Sep 17 00:00:00 2001 From: kxdd Date: Wed, 4 Sep 2024 10:49:16 +0800 Subject: [PATCH 08/19] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/DB_GameFree.dat | Bin 24124 -> 24124 bytes data/DB_GameFree.json | 8 ++++---- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes gamesrv/clawdoll/scene_clawdoll.go | 23 +++++++++++++++++++++++ xlsx/DB_GameFree.xlsx | Bin 65652 -> 65617 bytes 6 files changed, 27 insertions(+), 4 deletions(-) diff --git a/data/DB_GameFree.dat b/data/DB_GameFree.dat index 10d42c96c3bcf614300371a1a122b24f45367bd7..93a0b0dac5767b64a722fe8e0c39d8872bfd7cab 100644 GIT binary patch delta 41 pcmdn9hjGsy#tj={CZCDsp1eCI8%irp4vzJlydg$+@<}kQ1puW<6FmR` delta 41 pcmdn9hjGsy#tj={CeMl0oqRXO6HEukdNMLi-Wa1Z`6QI32>_085nliR diff --git a/data/DB_GameFree.json b/data/DB_GameFree.json index 564a1f9..b08696a 100644 --- a/data/DB_GameFree.json +++ b/data/DB_GameFree.json @@ -6674,7 +6674,7 @@ 0 ], "OtherIntParams": [ - 1 + 0 ], "RobotNumRng": [ 0 @@ -6707,7 +6707,7 @@ 0 ], "OtherIntParams": [ - 1 + 0 ], "RobotNumRng": [ 0 @@ -6740,7 +6740,7 @@ 0 ], "OtherIntParams": [ - 2 + 1 ], "RobotNumRng": [ 0 @@ -6773,7 +6773,7 @@ 0 ], "OtherIntParams": [ - 2 + 1 ], "RobotNumRng": [ 0 diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index 12cce5f4165edd740dfa268af25289251ffeba4c..3094b57366ddb3f45bda1c2b49ca90dda8ad3167 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!(#8y?uR`f-Q2IKQz6_$3I5-yevI!h$vE|a^U;?YZ1(m-IrEfs# zn`r98IUwf4?17mJRtK~nrXOq%kdN*Tn7Ls4lsLieXjuD*g)5eW1?&)*Mwr844!Z+& d5X@qj!7vBF3`TK?5;IZ(|9n+LQPrXQvc<_>iGVdg{3EhutQ)5;Pn8Kg(wCB#qU5J U4t9VNJI5lRN53$0G0+wQ0AwmWH2?qr diff --git a/data/DB_Task.dat b/data/DB_Task.dat index f5a92be4c65bea8e256c4b0c15ec32c4d5e978b2..fb5fdb1771a150efb4d85f47e36048d82637a53a 100644 GIT binary patch delta 451 zcmdn2xmk09p&%Q_l3q3eRxb{Yg+O}2A-Rc8rh-sTFPj%cT4Z8JBUJE08#7dpYqAuh z1ysKrOn)!i=43_zrpYB7B9q&hcLAj@wlNDZL8T`w zS%8si@(UhYOyee-@xGBobsI2DqnH>Oxg0pI0)s+!vIDR98rdodqe;L delta 381 zcmdn2xmk09p&$px!d^Ck1&8Fk*f^E|S*#PCOa&oK5ih7@FWbb9MyMbcRPaI@^JFPT z3z+_1HmH8N&B=@cOp{AEL?*X0?}AECSjZ2QzSzbLlnG)nfN26-3KC_RJekE3Q|;!v zEE0^9uk#2nGEHV6_x;Ag*XJQ2a@j`2= diff --git a/gamesrv/clawdoll/scene_clawdoll.go b/gamesrv/clawdoll/scene_clawdoll.go index 3347ea6..f87890b 100644 --- a/gamesrv/clawdoll/scene_clawdoll.go +++ b/gamesrv/clawdoll/scene_clawdoll.go @@ -102,12 +102,35 @@ func (this *SceneEx) BroadcastPlayerLeave(p *base.Player, reason int) { // 玩家进入事件 func (this *SceneEx) OnPlayerEnter(p *base.Player, reason int) { this.BroadcastPlayerEnter(p, reason) + + machineId := this.GetDBGameFree().GetId() % 6080000 + machineInfo := this.GetMachineServerInfo(machineId, p.Platform) + if machineInfo == nil { + return + } + + if this.GetPlayerNum() > 0 { + // 发送http Get请求 打开直播间流 + + } } // 玩家离开事件 func (this *SceneEx) OnPlayerLeave(p *base.Player, reason int) { this.delPlayer(p) this.BroadcastPlayerLeave(p, reason) + + machineId := this.GetDBGameFree().GetId() % 6080000 + machineInfo := this.GetMachineServerInfo(machineId, p.Platform) + if machineInfo == nil { + return + } + + if this.GetPlayerNum() <= 0 { + // 发送http Get请求 关闭直播间流 + + } + } func (this *SceneEx) SceneDestroy(force bool) { //销毁房间 diff --git a/xlsx/DB_GameFree.xlsx b/xlsx/DB_GameFree.xlsx index f1116a6e4687dddf5b27d2f87645226c5d2e981c..5e2e2f1ccfa03ed71c1b3ad54ff6cd182224331f 100644 GIT binary patch delta 49272 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
    x(}vD93OQ?D}O0i`+jBQ7S9IBj5v= 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 W`zLw)!~?JPi4L9v#ryU--~R{PC5Czc From 9cdc0f24c7f2e8f61862cd0432b52b62faddbf7e Mon Sep 17 00:00:00 2001 From: kxdd Date: Wed, 4 Sep 2024 10:49:37 +0800 Subject: [PATCH 09/19] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public b/public index fd8bef9..00b9fce 160000 --- a/public +++ b/public @@ -1 +1 @@ -Subproject commit fd8bef907ea15489504529da70f72038444b54e0 +Subproject commit 00b9fce886af5b6a926aa804d3cad33be9ea0793 From d8f01f39ea50eb5fc309f56bb5416b107bdaf44b Mon Sep 17 00:00:00 2001 From: kxdd Date: Wed, 4 Sep 2024 10:52:45 +0800 Subject: [PATCH 10/19] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/DB_GameFree.dat | Bin 24124 -> 24124 bytes data/DB_GameFree.json | 8 ++++---- data/DB_PropExchange.dat | Bin 384 -> 384 bytes data/DB_Task.dat | Bin 5299 -> 5299 bytes xlsx/DB_GameFree.xlsx | Bin 65652 -> 65611 bytes 5 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/DB_GameFree.dat b/data/DB_GameFree.dat index 10d42c96c3bcf614300371a1a122b24f45367bd7..93a0b0dac5767b64a722fe8e0c39d8872bfd7cab 100644 GIT binary patch delta 41 pcmdn9hjGsy#tj={CZCDsp1eCI8%irp4vzJlydg$+@<}kQ1puW<6FmR` delta 41 pcmdn9hjGsy#tj={CeMl0oqRXO6HEukdNMLi-Wa1Z`6QI32>_085nliR diff --git a/data/DB_GameFree.json b/data/DB_GameFree.json index 564a1f9..b08696a 100644 --- a/data/DB_GameFree.json +++ b/data/DB_GameFree.json @@ -6674,7 +6674,7 @@ 0 ], "OtherIntParams": [ - 1 + 0 ], "RobotNumRng": [ 0 @@ -6707,7 +6707,7 @@ 0 ], "OtherIntParams": [ - 1 + 0 ], "RobotNumRng": [ 0 @@ -6740,7 +6740,7 @@ 0 ], "OtherIntParams": [ - 2 + 1 ], "RobotNumRng": [ 0 @@ -6773,7 +6773,7 @@ 0 ], "OtherIntParams": [ - 2 + 1 ], "RobotNumRng": [ 0 diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index 12cce5f4165edd740dfa268af25289251ffeba4c..f749192cb45516ddd8d43f5177f689fab68c6c6b 100644 GIT binary patch literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;Iq;j0RX>uu!1e?AVEdFf!R}~S`-p`rmV*WC5SRj(LAX2wb{Np0J5YzhJP7j$ T*aJ%J9E*S+{ld(}KwAg^W8yqD literal 384 zcmd-w<6snElw#w!+{O&1uR!UmQ2H8_z7C?5I5-yevI!h$vE|a^U;?YZ0hPZArEfv$ z+i2>;IZ(|9n+LQPrXQvc<_>iGVdg{3EhutQ)5;Pn8Kg(wCB#qU5J U4t9VNJI5lRN53$0G0+wQ0AwmWH2?qr diff --git a/data/DB_Task.dat b/data/DB_Task.dat index f5a92be4c65bea8e256c4b0c15ec32c4d5e978b2..aa58b67c7d1ea52a98e78c86dc459b7bd13fbbd8 100644 GIT binary patch delta 149 zcmdn2xmk09p&%Q_l3q3eRxb{Yg+O}2A-RoC0*p{mIhbfK+va3O0j9|%93q?BnGIMc zi?EAKKFy&&c>S%8si^9!CDMhJ6qDc=T3HjYI=vzef# i9hk+#WzF&U3bTOFWJZ3m$szpRlT-KvH-F$i%mM&TX)6){ delta 218 zcmdn2xmk09p&$px!d^Ck1&8Fk*f^E|S*#nK1Q=nWy=+iXxy{Lp0!)Hz9E*TT7`>pH zdf7I&FdMT%g_)qj2WIh1KEYuG6=jBsK3FcanVYko87j;QGvkoltnP*Egk6w>%bMfy6=ngU$&CDBlSBBsCvRmIVC35Tf&VZI0GSv&9RL6T diff --git a/xlsx/DB_GameFree.xlsx b/xlsx/DB_GameFree.xlsx index f1116a6e4687dddf5b27d2f87645226c5d2e981c..ac8e3acd5896bd420cd510af7f056132f9b8d1cb 100644 GIT binary patch delta 19291 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 delta 19333 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 Date: Wed, 4 Sep 2024 11:18:04 +0800 Subject: [PATCH 11/19] =?UTF-8?q?=E5=A8=83=E5=A8=83=E6=9C=BA=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/action_clawdoll.go | 17 ----------------- gamesrv/clawdoll/scene_clawdoll.go | 8 ++++++-- gamesrv/clawdoll/scenepolicy_clawdoll.go | 11 +++++++++++ 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/gamesrv/clawdoll/action_clawdoll.go b/gamesrv/clawdoll/action_clawdoll.go index 75e5fd2..bd83ddc 100644 --- a/gamesrv/clawdoll/action_clawdoll.go +++ b/gamesrv/clawdoll/action_clawdoll.go @@ -2,7 +2,6 @@ package clawdoll import ( "mongo.games.com/game/common" - rule "mongo.games.com/game/gamerule/clawdoll" "mongo.games.com/game/gamesrv/base" "mongo.games.com/game/protocol/clawdoll" "mongo.games.com/game/protocol/machine" @@ -60,15 +59,6 @@ func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data return nil } - scene := p.GetScene() - if scene == nil { - return nil - } - sceneEx, ok := scene.ExtraData.(*SceneEx) - if !ok { - return nil - } - switch msg.TypeId { case 1: if msg.Result == 1 { @@ -82,13 +72,6 @@ func MSDollMachineoCoinResultHandler(session *netlib.Session, packetId int, data } else { logger.Logger.Tracef("下抓失败!!!!!!!!!!!!snid = ", msg.Snid) } - - scene.ChangeSceneState(rule.ClawDollSceneStateBilled) - - sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled)) - - ClawdollBroadcastRoomState(scene) - ClawdollSendPlayerInfo(scene) } } return nil diff --git a/gamesrv/clawdoll/scene_clawdoll.go b/gamesrv/clawdoll/scene_clawdoll.go index f87890b..8c3070d 100644 --- a/gamesrv/clawdoll/scene_clawdoll.go +++ b/gamesrv/clawdoll/scene_clawdoll.go @@ -311,7 +311,7 @@ func (this *SceneEx) GetPlayGrabType(player *PlayerEx) int32 { return rule.ClawWeak } - if this.RoundId%100 == 0 && this.RoundId != 0 { + if this.RoundId/2 == 0 && this.RoundId != 0 { return rule.ClawStrong } @@ -371,7 +371,11 @@ func (this *SceneEx) SetPlayingState(state int32) { // 时间到 系统开始下抓 func (this *SceneEx) TimeOutPlayGrab() bool { - this.OnPlayerSMGrabOp(this.playingSnid, int32(this.machineId), rule.ClawWeak) + playerEx := this.players[this.playingSnid] + if playerEx != nil { + grapType := this.GetPlayGrabType(playerEx) + this.OnPlayerSMGrabOp(this.playingSnid, int32(this.machineId), grapType) + } return true } diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 8d56913..f2c46e0 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -668,6 +668,12 @@ func (this *PlayGame) OnPlayerOp(s *base.Scene, p *base.Player, opcode int, para //1-弱力抓 2 -强力抓 sceneEx.OnPlayerSMGrabOp(p.SnId, int32(sceneEx.machineId), grapType) + s.ChangeSceneState(rule.ClawDollSceneStateBilled) + sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled)) + + ClawdollBroadcastRoomState(s) + ClawdollSendPlayerInfo(s) + case rule.ClawDollPlayerOpMove: if !sceneEx.CheckMoveOp(playerEx) { @@ -698,6 +704,11 @@ func (this *PlayGame) OnTick(s *base.Scene) { logger.Logger.Trace("PlayGame OnTick TimeOutPlayGrab SnId", sceneEx.playingSnid, " machineId:", sceneEx.machineId) } + s.ChangeSceneState(rule.ClawDollSceneStateBilled) + sceneEx.SetPlayingState(int32(rule.ClawDollSceneStateBilled)) + + ClawdollBroadcastRoomState(s) + ClawdollSendPlayerInfo(s) return } } From 5b6a5ad5d3882a09f76f492d957dbacd98a99cda Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 4 Sep 2024 11:54:59 +0800 Subject: [PATCH 12/19] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E6=88=BF?= =?UTF-8?q?=E9=97=B4=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/scenemgr.go | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/worldsrv/scenemgr.go b/worldsrv/scenemgr.go index 42c33e6..702bc49 100644 --- a/worldsrv/scenemgr.go +++ b/worldsrv/scenemgr.go @@ -192,25 +192,26 @@ func (m *SceneMgr) MarshalAllRoom(platform string, groupId, gameId int, gameMode } si := &webapiproto.RoomInfo{ - Platform: platformName, - SceneId: int32(s.sceneId), - GameId: int32(s.gameId), - GameMode: int32(s.gameMode), - SceneMode: int32(s.sceneMode), - GroupId: s.groupId, - Creator: s.creator, - ReplayCode: s.replayCode, - Params: common.CopySliceInt64ToInt32(s.params), - PlayerCnt: int32(len(s.players) - s.robotNum), - RobotCnt: int32(s.robotNum), - CreateTime: s.createTime.Unix(), - BaseScore: s.dbGameFree.BaseScore, - GameFreeId: s.dbGameFree.GetId(), - MaxRound: s.totalRound, - Password: s.GetPassword(), - CostType: s.GetCostType(), - Voice: s.GetVoice(), - CurrRound: s.currRound, + Platform: platformName, + SceneId: int32(s.sceneId), + GameId: int32(s.gameId), + GameMode: int32(s.gameMode), + SceneMode: int32(s.sceneMode), + GroupId: s.groupId, + GameFreeId: s.dbGameFree.GetId(), + Creator: s.creator, + ReplayCode: s.replayCode, + Params: common.CopySliceInt64ToInt32(s.params), + PlayerCnt: int32(len(s.players) - s.robotNum), + RobotCnt: int32(s.robotNum), + CreateTime: s.createTime.Unix(), + BaseScore: s.dbGameFree.BaseScore, + RoomConfigId: s.GetRoomConfigId(), + CurrRound: s.currRound, + MaxRound: s.totalRound, + Password: s.GetPassword(), + CostType: s.GetCostType(), + Voice: s.GetVoice(), } if s.starting { si.Start = 1 From 12623d7b94a152e5e7225061dad5956705b3107c Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Wed, 4 Sep 2024 13:46:10 +0800 Subject: [PATCH 13/19] =?UTF-8?q?=E5=A2=9E=E5=8A=A0log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/base/scene.go | 1 + 1 file changed, 1 insertion(+) diff --git a/gamesrv/base/scene.go b/gamesrv/base/scene.go index 82b11a7..7f32058 100644 --- a/gamesrv/base/scene.go +++ b/gamesrv/base/scene.go @@ -2556,6 +2556,7 @@ func (this *Scene) TryRelease() { } func (this *Scene) GetMachineServerInfo(MachineId int32, platform string) *webapi.MachineInfo { config := ConfigMgrInst.GetConfig(platform).MachineConfig + logger.Logger.Tracef("========GetMachineServerInfo=========== platform=%s, MachineId=%d ,config = %v", platform, MachineId, config) if config == nil { return nil } From fb8bfbde87e45c106fc8421ff4aaf78a0176dffe Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Wed, 4 Sep 2024 14:03:37 +0800 Subject: [PATCH 14/19] =?UTF-8?q?=E5=88=AA=E9=99=A4log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/clawdoll/scenepolicy_clawdoll.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index f2c46e0..68f055c 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -701,7 +701,7 @@ func (this *PlayGame) OnTick(s *base.Scene) { if time.Now().Sub(sceneEx.StateStartTime) > rule.ClawDollScenePlayTimeout { if sceneEx.TimeOutPlayGrab() { - logger.Logger.Trace("PlayGame OnTick TimeOutPlayGrab SnId", sceneEx.playingSnid, " machineId:", sceneEx.machineId) + //logger.Logger.Trace("PlayGame OnTick TimeOutPlayGrab SnId", sceneEx.playingSnid, " machineId:", sceneEx.machineId) } s.ChangeSceneState(rule.ClawDollSceneStateBilled) From ac86a5e294359a7b0e3bfa880982a2f637422844 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 4 Sep 2024 14:21:21 +0800 Subject: [PATCH 15/19] =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=AB=9E=E6=8A=80?= =?UTF-8?q?=E9=A6=86=E6=B5=8B=E8=AF=95=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/etcd.go | 74 ------------------------------------------------ 1 file changed, 74 deletions(-) diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index d78a051..cca9e12 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -93,80 +93,6 @@ func init() { etcd.Register(etcd.ETCDKEY_MatchAudience, webapi.MatchAudience{}, handlerEvent) // 小精灵配置 etcd.Register(etcd.ETCDKEY_Spirit, webapi.SpiritConfig{}, platformConfigEvent) - - PlatformMgrSingleton.GetConfig("1").RoomType = map[int32]*webapi.RoomType{ - 1: { - Platform: "1", - Id: 1, - Name: "{\"zh\":\"话费赛\",\"kh\":\"话费赛\",\"vi\":\"话费赛\",\"en\":\"话费赛\"}", - On: 1, - SortId: 1, - }, - 2: { - Platform: "1", - Id: 2, - Name: "{\"zh\":\"物品赛\",\"kh\":\"物品赛\",\"vi\":\"物品赛\",\"en\":\"物品赛\"}", - On: 1, - SortId: 2, - }, - } - - PlatformMgrSingleton.UpdateRoomConfig(&webapi.RoomConfig{ - Platform: "1", - Id: 1, - Name: "{\"zh\":\"1元话费赛\",\"kh\":\"1元话费赛\",\"vi\":\"1元话费赛\",\"en\":\"1元话费赛\"}", - RoomType: 1, - On: 1, - SortId: 1, - Cost: []*webapi.ItemInfo{ - { - ItemId: 100001, - ItemNum: 12, - }, - }, - Reward: []*webapi.ItemInfo{ - { - ItemId: 100001, - ItemNum: 12, - }, - }, - OnChannelName: []string{common.ChannelOfficial, common.ChannelWeb, common.ChannelGooglePlay}, - GameFreeId: []int32{2150001, 2160001, 2170001, 2180001}, - Round: []int32{1, 2, 3, 4}, - PlayerNum: []int32{2, 3, 4}, - NeedPassword: 3, - CostType: 3, - Voice: 3, - ImageURI: "", - }) - PlatformMgrSingleton.UpdateRoomConfig(&webapi.RoomConfig{ - Platform: "1", - Id: 2, - Name: "{\"zh\":\"2元话费赛\",\"kh\":\"2元话费赛\",\"vi\":\"2元话费赛\",\"en\":\"2元话费赛\"}", - RoomType: 1, - On: 1, - SortId: 2, - Cost: []*webapi.ItemInfo{ - { - ItemId: 100001, - ItemNum: 12, - }, - }, - Reward: []*webapi.ItemInfo{ - { - ItemId: 100001, - ItemNum: 12, - }, - }, - OnChannelName: []string{common.ChannelOfficial, common.ChannelWeb, common.ChannelGooglePlay}, - GameFreeId: []int32{2150001, 2160001, 2170001, 2180001}, - Round: []int32{1, 2, 3, 4}, - PlayerNum: []int32{2, 3, 4}, - NeedPassword: 3, - CostType: 3, - Voice: 3, - ImageURI: "", - }) } func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) { From 9c1fed84e9fad798cddf646d627a74b81f28a786 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 4 Sep 2024 14:53:29 +0800 Subject: [PATCH 16/19] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E5=90=8E=E5=8F=B0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/etcd.go | 4 ++++ worldsrv/scene.go | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index cca9e12..b60851a 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -93,6 +93,10 @@ func init() { etcd.Register(etcd.ETCDKEY_MatchAudience, webapi.MatchAudience{}, handlerEvent) // 小精灵配置 etcd.Register(etcd.ETCDKEY_Spirit, webapi.SpiritConfig{}, platformConfigEvent) + // 竞技馆房间配置 + etcd.Register(etcd.ETCDKEY_RoomConfig, webapi.RoomConfig{}, handlerEvent) + // 竞技馆房间类型配置 + etcd.Register(etcd.ETCDKEY_RoomType, webapi.RoomType{}, handlerEvent) } func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) { diff --git a/worldsrv/scene.go b/worldsrv/scene.go index 333f90e..093a35e 100644 --- a/worldsrv/scene.go +++ b/worldsrv/scene.go @@ -514,8 +514,6 @@ func (this *Scene) lastScene(p *Player) { } func (this *Scene) DelPlayer(p *Player) bool { - FirePlayerLeaveScene(p, this) - this.sp.OnPlayerLeave(this, p) if p.scene != this { roomId := 0 if p.scene != nil { @@ -556,6 +554,8 @@ func (this *Scene) DelPlayer(p *Player) bool { if !p.IsRob { this.lastTime = time.Now() } + FirePlayerLeaveScene(p, this) + this.sp.OnPlayerLeave(this, p) return true } From 4a32df4ecfdc37657119f44bc8b4ca4ec56522f5 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 4 Sep 2024 15:31:35 +0800 Subject: [PATCH 17/19] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E9=A6=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- worldsrv/etcd.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/worldsrv/etcd.go b/worldsrv/etcd.go index b60851a..606899b 100644 --- a/worldsrv/etcd.go +++ b/worldsrv/etcd.go @@ -485,7 +485,7 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c config := data.(*webapi.RoomType) PlatformMgrSingleton.UpdateRoomType(config) if !isInit { - PlayerMgrSington.BroadcastMessageToPlatform(config.GetPlatform(), int(0), nil) + //PlayerMgrSington.BroadcastMessageToPlatform(config.GetPlatform(), int(0), nil) } case clientv3.EventTypeDelete: if plt == "" || len(param) == 0 { @@ -493,7 +493,7 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c } PlatformMgrSingleton.DelRoomType(plt, int32(param[0])) if !isInit { - PlayerMgrSington.BroadcastMessageToPlatform(plt, int(0), nil) + //PlayerMgrSington.BroadcastMessageToPlatform(plt, int(0), nil) } } From 88bbca47f1606bfe4eec07eeeec0410d831127ed Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Wed, 4 Sep 2024 17:24:29 +0800 Subject: [PATCH 18/19] =?UTF-8?q?=E6=8E=A8=E5=B9=BF=E6=B8=A0=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbproxy/svc/u_player.go | 2 +- model/player.go | 3 ++- worldsrv/action_player.go | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/dbproxy/svc/u_player.go b/dbproxy/svc/u_player.go index bf6b7c1..62cb522 100644 --- a/dbproxy/svc/u_player.go +++ b/dbproxy/svc/u_player.go @@ -227,7 +227,7 @@ func (svc *PlayerDataSvc) CreatePlayerDataByThird(args *model.CreatePlayer, ret var dataParams model.PlayerParams json.Unmarshal([]byte(a.Params), &dataParams) pd = model.NewPlayerDataThird(acc, name, args.HeadUrl, id, a.Channel, a.Platform, a.Params, - a.Tel, a.PackegeTag, dataParams.Ip, a.TagKey, a.AccountType, a.DeviceOs) + a.Tel, a.PackegeTag, dataParams.Ip, a.TagKey, a.AccountType, a.DeviceOs, a.ChannelId) if pd != nil { err = cplayerdata.Insert(pd) if err != nil { diff --git a/model/player.go b/model/player.go index ca719c8..c26829f 100644 --- a/model/player.go +++ b/model/player.go @@ -981,7 +981,7 @@ func NewPlayerData(acc string, name string, id int32, channel, platform string, } func NewPlayerDataThird(acc string, name, headUrl string, id int32, channel, platform string, params, tel string, - packTag, ip string, tagkey, accountType int32, deviceOS string) *PlayerData { + packTag, ip string, tagkey, accountType int32, deviceOS, channelId string) *PlayerData { if len(name) == 0 { logger.Logger.Trace("New player name is empty.") return nil @@ -992,6 +992,7 @@ func NewPlayerDataThird(acc string, name, headUrl string, id int32, channel, pla AccountId: acc, Name: name, Channel: channel, + ChannelId: channelId, Platform: platform, SnId: id, Head: rand.Int31n(common.HeadRange), diff --git a/worldsrv/action_player.go b/worldsrv/action_player.go index d800fbe..66abe75 100644 --- a/worldsrv/action_player.go +++ b/worldsrv/action_player.go @@ -1938,6 +1938,9 @@ func CSPlayerData(s *netlib.Session, packetid int, data interface{}, sid int64) if (p.Channel == "" || p.Channel == "0") && p.Channel != msg.AppChannel { p.Channel = msg.AppChannel } + if ls.als.acc.ChannelId != "" && p.ChannelId == "" { + p.ChannelId = ls.als.acc.ChannelId + } if ls.clog != nil { PlayerSubjectSign.UpdateHeadUrl(p.SnId, ls.clog.HeadUrl) From 68a8e010cfeb5e3399c85ac78bcbc7b54f7f8145 Mon Sep 17 00:00:00 2001 From: by <123456@qq.com> Date: Thu, 5 Sep 2024 10:28:43 +0800 Subject: [PATCH 19/19] =?UTF-8?q?scene=E5=8F=AA=E8=83=BD=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E5=AF=B9=E5=BA=94=E7=9A=84=E5=A8=83=E5=A8=83=E6=9C=BA=E7=BC=96?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamesrv/action/action_machine.go | 14 +++++--------- gamesrv/clawdoll/scenepolicy_clawdoll.go | 3 ++- machine/action/action_server.go | 8 ++++---- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/gamesrv/action/action_machine.go b/gamesrv/action/action_machine.go index c577f4e..fb287f2 100644 --- a/gamesrv/action/action_machine.go +++ b/gamesrv/action/action_machine.go @@ -35,15 +35,11 @@ func MSDollMachineListHandler(session *netlib.Session, packetId int, data interf } // 获取空闲娃娃机标识 -func GetFreeDollMachineId() int { - // 获取互斥锁 - MachineMapLock.Lock() - defer MachineMapLock.Unlock() - for i, v := range MachineMap { - if v.Status == false { - v.Status = true - return i - } +func GetFreeDollMachineId(id int32) int { + if MachineMap[int(id)] != nil && MachineMap[int(id)].MachineStatus == 1 { + return int(id) + } else { + return 0 } return 0 } diff --git a/gamesrv/clawdoll/scenepolicy_clawdoll.go b/gamesrv/clawdoll/scenepolicy_clawdoll.go index 68f055c..3d31f96 100644 --- a/gamesrv/clawdoll/scenepolicy_clawdoll.go +++ b/gamesrv/clawdoll/scenepolicy_clawdoll.go @@ -67,7 +67,8 @@ func (this *PolicyClawdoll) OnTick(s *base.Scene) { sceneEx, ok := s.ExtraData.(*SceneEx) if ok { if sceneEx.machineId == 0 { - sceneEx.machineId = action.GetFreeDollMachineId() + machineId := s.DBGameFree.GetId() % 6080000 + sceneEx.machineId = action.GetFreeDollMachineId(machineId) } if sceneEx.machineId != 0 { machineStatus := action.GetDollMachineStatus(sceneEx.machineId) diff --git a/machine/action/action_server.go b/machine/action/action_server.go index 48252c6..afa8cd6 100644 --- a/machine/action/action_server.go +++ b/machine/action/action_server.go @@ -169,7 +169,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid num := int64(1) for { // 读取数据 - logger.Logger.Trace("监听抓取结果返回!") + //logger.Logger.Trace("监听抓取结果返回!") buf := make([]byte, 1024) n, err := conn.Read(buf) if err != nil { @@ -178,7 +178,7 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid } // 将读取到的数据按照 221 进行分割 parts := bytes.Split(buf[:n], []byte{221}) - fmt.Println("获取到的返回值:", parts) + //fmt.Println("获取到的返回值:", parts) instruction := []byte{0xAA, 0x05, 0x02, 0x50, 0x09, 0x00} instruction1 := []byte{0xAA, 0x05, 0x02, 0x50, 0x09, 0x01} // 遍历分割结果,打印出每个部分 @@ -187,11 +187,11 @@ func DollMachineGrabResult(session *netlib.Session, conn *machinedoll.Conn, snid part = part[:len(part)-1] // 去除最后一个字节,该字节为分隔符 //fmt.Println("比较返回结果 part = ", part) if bytes.Contains(part, instruction) && num != 1 { - fmt.Printf("Part %d: %s\n", i+1, part) + //fmt.Printf("Part %d: %s\n", i+1, part) //回应数据 _, err = conn.Write([]byte{0xAA, 0x04, 0x01, 0x50, 0x09, 0x5c, 0xdd}) if err != nil { - fmt.Println("Failed to read response from server:", err) + //fmt.Println("Failed to read response from server:", err) return } session.Send(int(machine.DollMachinePacketID_PACKET_MSDollMachineoPerateResult), &machine.MSDollMachineoPerateResult{