feat 包命名规范
This commit is contained in:
@@ -6,7 +6,7 @@ import (
|
|||||||
"git.hlsq.asia/mmorpg/service-common/log"
|
"git.hlsq.asia/mmorpg/service-common/log"
|
||||||
"git.hlsq.asia/mmorpg/service-common/module"
|
"git.hlsq.asia/mmorpg/service-common/module"
|
||||||
"git.hlsq.asia/mmorpg/service-scene/config"
|
"git.hlsq.asia/mmorpg/service-scene/config"
|
||||||
"git.hlsq.asia/mmorpg/service-scene/internal/grpc_server"
|
"git.hlsq.asia/mmorpg/service-scene/internal/grpcserver"
|
||||||
"github.com/judwhite/go-svc"
|
"github.com/judwhite/go-svc"
|
||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
@@ -19,7 +19,7 @@ func (p *Program) Init(_ svc.Environment) error {
|
|||||||
p.moduleList = append(p.moduleList, &module.Log{Cfg: config.Get().Log})
|
p.moduleList = append(p.moduleList, &module.Log{Cfg: config.Get().Log})
|
||||||
p.moduleList = append(p.moduleList, &module.DB{Cfg: config.Get().DB, AppName: config.Get().App.Name})
|
p.moduleList = append(p.moduleList, &module.DB{Cfg: config.Get().DB, AppName: config.Get().App.Name})
|
||||||
p.moduleList = append(p.moduleList, &module.Snowflake{})
|
p.moduleList = append(p.moduleList, &module.Snowflake{})
|
||||||
p.moduleList = append(p.moduleList, &module.Grpc{Server: grpc_server.NewServer(config.Get().Serve.Grpc)})
|
p.moduleList = append(p.moduleList, &module.Grpc{Server: grpcserver.NewServer(config.Get().Serve.Grpc)})
|
||||||
p.moduleList = append(p.moduleList, &module.Prometheus{Cfg: config.Get().Metric})
|
p.moduleList = append(p.moduleList, &module.Prometheus{Cfg: config.Get().Metric})
|
||||||
p.moduleList = append(p.moduleList, &module.Tracer{Cfg: config.Get().Metric, ServiceName: common.KeyDiscoverServiceNameScene})
|
p.moduleList = append(p.moduleList, &module.Tracer{Cfg: config.Get().Metric, ServiceName: common.KeyDiscoverServiceNameScene})
|
||||||
p.moduleList = append(p.moduleList, &module.Discover{})
|
p.moduleList = append(p.moduleList, &module.Discover{})
|
||||||
|
|||||||
2
go.mod
2
go.mod
@@ -3,7 +3,7 @@ module git.hlsq.asia/mmorpg/service-scene
|
|||||||
go 1.24.0
|
go 1.24.0
|
||||||
|
|
||||||
require (
|
require (
|
||||||
git.hlsq.asia/mmorpg/service-common v0.0.0-20260207051302-0ca8a0ccbb14
|
git.hlsq.asia/mmorpg/service-common v0.0.0-20260211064821-558677bc3a2e
|
||||||
github.com/judwhite/go-svc v1.2.1
|
github.com/judwhite/go-svc v1.2.1
|
||||||
go.uber.org/zap v1.27.0
|
go.uber.org/zap v1.27.0
|
||||||
google.golang.org/grpc v1.77.0
|
google.golang.org/grpc v1.77.0
|
||||||
|
|||||||
4
go.sum
4
go.sum
@@ -1,7 +1,7 @@
|
|||||||
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
|
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
|
||||||
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
|
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
|
||||||
git.hlsq.asia/mmorpg/service-common v0.0.0-20260207051302-0ca8a0ccbb14 h1:4r3tNWRzGVY3Xx6UiGjJJnwoMoWlVqbyGrljxl5d/nQ=
|
git.hlsq.asia/mmorpg/service-common v0.0.0-20260211064821-558677bc3a2e h1:MNVS1NXNVn4DeTZPcvvA8YFM8afCzZedLPUYMffNgZs=
|
||||||
git.hlsq.asia/mmorpg/service-common v0.0.0-20260207051302-0ca8a0ccbb14/go.mod h1:mMhZcumphj6gaVTppVYsMTkd+5HupmQgAc53Pd4MH9I=
|
git.hlsq.asia/mmorpg/service-common v0.0.0-20260211064821-558677bc3a2e/go.mod h1:mMhZcumphj6gaVTppVYsMTkd+5HupmQgAc53Pd4MH9I=
|
||||||
github.com/BurntSushi/toml v1.2.0 h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0=
|
github.com/BurntSushi/toml v1.2.0 h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0=
|
||||||
github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
||||||
github.com/IBM/sarama v1.46.3 h1:njRsX6jNlnR+ClJ8XmkO+CM4unbrNr/2vB5KK6UA+IE=
|
github.com/IBM/sarama v1.46.3 h1:njRsX6jNlnR+ClJ8XmkO+CM4unbrNr/2vB5KK6UA+IE=
|
||||||
|
|||||||
@@ -1,45 +1,45 @@
|
|||||||
package grpc_server
|
package grpcserver
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"git.hlsq.asia/mmorpg/service-common/log"
|
"git.hlsq.asia/mmorpg/service-common/log"
|
||||||
"git.hlsq.asia/mmorpg/service-common/proto/rs/grpc_pb"
|
"git.hlsq.asia/mmorpg/service-common/proto/rs/rspb"
|
||||||
"git.hlsq.asia/mmorpg/service-common/proto/ss/ss_pb"
|
"git.hlsq.asia/mmorpg/service-common/proto/ss/sspb"
|
||||||
"git.hlsq.asia/mmorpg/service-scene/internal/instance"
|
"git.hlsq.asia/mmorpg/service-scene/internal/instance"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (s *Server) Enter(ctx context.Context, req *grpc_pb.EnterReq) (*grpc_pb.EnterResp, error) {
|
func (s *Server) Enter(ctx context.Context, req *rspb.EnterReq) (*rspb.EnterResp, error) {
|
||||||
ins, loaded := instance.Mgr.LoadOrStoreByInstanceID(req.InstanceID, instance.NewScene(s.SID, req.InstanceID))
|
ins, loaded := instance.Mgr.LoadOrStoreByInstanceID(req.InstanceID, instance.NewScene(s.SID, req.InstanceID))
|
||||||
if !loaded {
|
if !loaded {
|
||||||
ins.Start(s.Cfg.TTL)
|
ins.Start(s.Cfg.TTL)
|
||||||
}
|
}
|
||||||
ins.EventIn <- req
|
ins.EventIn <- req
|
||||||
|
|
||||||
payload, _ := proto.Marshal(&ss_pb.S2C_EnterInstance{
|
payload, _ := proto.Marshal(&sspb.S2C_EnterInstance{
|
||||||
Info: &ss_pb.PositionInfo{
|
Info: &sspb.PositionInfo{
|
||||||
USN: req.USN,
|
USN: req.USN,
|
||||||
X: 1,
|
X: 1,
|
||||||
Y: 1,
|
Y: 1,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
return &grpc_pb.EnterResp{
|
return &rspb.EnterResp{
|
||||||
SceneSID: s.SID,
|
SceneSID: s.SID,
|
||||||
UniqueNo: ins.UniqueNo,
|
UniqueNo: ins.UniqueNo,
|
||||||
MessageID: int32(ss_pb.MessageID_MESSAGE_ID_ENTER_INSTANCE),
|
MessageID: int32(sspb.MessageID_MESSAGE_ID_ENTER_INSTANCE),
|
||||||
Payload: payload,
|
Payload: payload,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) Leave(ctx context.Context, req *grpc_pb.LeaveReq) (*grpc_pb.LeaveResp, error) {
|
func (s *Server) Leave(ctx context.Context, req *rspb.LeaveReq) (*rspb.LeaveResp, error) {
|
||||||
if i := instance.Mgr.GetByUniqueNo(req.UniqueNo); i != nil {
|
if i := instance.Mgr.GetByUniqueNo(req.UniqueNo); i != nil {
|
||||||
i.EventIn <- req
|
i.EventIn <- req
|
||||||
}
|
}
|
||||||
return &grpc_pb.LeaveResp{}, nil
|
return &rspb.LeaveResp{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) Action(server grpc_pb.Scene_ActionServer) error {
|
func (s *Server) Action(server rspb.Scene_ActionServer) error {
|
||||||
wg := &sync.WaitGroup{}
|
wg := &sync.WaitGroup{}
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
@@ -64,5 +64,5 @@ func (s *Server) Action(server grpc_pb.Scene_ActionServer) error {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
return server.SendAndClose(&grpc_pb.ActionResp{})
|
return server.SendAndClose(&rspb.ActionResp{})
|
||||||
}
|
}
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
package grpc_server
|
package grpcserver
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"git.hlsq.asia/mmorpg/service-common/config"
|
"git.hlsq.asia/mmorpg/service-common/config"
|
||||||
"git.hlsq.asia/mmorpg/service-common/discover/common"
|
"git.hlsq.asia/mmorpg/service-common/discover/common"
|
||||||
"git.hlsq.asia/mmorpg/service-common/net/grpc/service"
|
"git.hlsq.asia/mmorpg/service-common/net/grpc/service"
|
||||||
"git.hlsq.asia/mmorpg/service-common/proto/rs/grpc_pb"
|
"git.hlsq.asia/mmorpg/service-common/proto/rs/rspb"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Server struct {
|
type Server struct {
|
||||||
grpc_pb.UnimplementedSceneServer
|
rspb.UnimplementedSceneServer
|
||||||
service.Base
|
service.Base
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ func (s *Server) OnCustomGrpcServerOption() []grpc.ServerOption {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) OnInit(serve *grpc.Server) {
|
func (s *Server) OnInit(serve *grpc.Server) {
|
||||||
grpc_pb.RegisterSceneServer(serve, s)
|
rspb.RegisterSceneServer(serve, s)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) OnClose() {
|
func (s *Server) OnClose() {
|
||||||
@@ -5,9 +5,9 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"git.hlsq.asia/mmorpg/service-common/discover"
|
"git.hlsq.asia/mmorpg/service-common/discover"
|
||||||
"git.hlsq.asia/mmorpg/service-common/log"
|
"git.hlsq.asia/mmorpg/service-common/log"
|
||||||
"git.hlsq.asia/mmorpg/service-common/net/grpc/grpc_client"
|
"git.hlsq.asia/mmorpg/service-common/net/grpc/grpcclient"
|
||||||
"git.hlsq.asia/mmorpg/service-common/proto/rs/grpc_pb"
|
"git.hlsq.asia/mmorpg/service-common/proto/rs/rspb"
|
||||||
"git.hlsq.asia/mmorpg/service-common/proto/ss/ss_pb"
|
"git.hlsq.asia/mmorpg/service-common/proto/ss/sspb"
|
||||||
"git.hlsq.asia/mmorpg/service-common/utils"
|
"git.hlsq.asia/mmorpg/service-common/utils"
|
||||||
"git.hlsq.asia/mmorpg/service-scene/internal/npc"
|
"git.hlsq.asia/mmorpg/service-scene/internal/npc"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
@@ -90,25 +90,25 @@ func (i *Instance) Start(ttl int64) {
|
|||||||
// 网络帧,将玩家的操作储存起来,到逻辑帧再处理玩家操作
|
// 网络帧,将玩家的操作储存起来,到逻辑帧再处理玩家操作
|
||||||
func (i *Instance) onEvent(e proto.Message) {
|
func (i *Instance) onEvent(e proto.Message) {
|
||||||
switch v := e.(type) {
|
switch v := e.(type) {
|
||||||
case *grpc_pb.EnterReq:
|
case *rspb.EnterReq:
|
||||||
i.players[v.USN] = npc.NewPlayerNode(v.GatewaySID, v.USN)
|
i.players[v.USN] = npc.NewPlayerNode(v.GatewaySID, v.USN)
|
||||||
case *grpc_pb.ActionReq:
|
case *rspb.ActionReq:
|
||||||
if node, ok := i.players[v.USN]; ok {
|
if node, ok := i.players[v.USN]; ok {
|
||||||
node.AddAction(v)
|
node.AddAction(v)
|
||||||
}
|
}
|
||||||
case *grpc_pb.LeaveReq:
|
case *rspb.LeaveReq:
|
||||||
delete(i.players, v.USN)
|
delete(i.players, v.USN)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 逻辑帧
|
// 逻辑帧
|
||||||
func (i *Instance) onLogic(delta int64) {
|
func (i *Instance) onLogic(delta int64) {
|
||||||
positionUpdate := make([]*ss_pb.PositionInfo, 0)
|
positionUpdate := make([]*sspb.PositionInfo, 0)
|
||||||
sid := int64(0)
|
sid := int64(0)
|
||||||
// 处理玩家指令
|
// 处理玩家指令
|
||||||
for _, node := range i.players {
|
for _, node := range i.players {
|
||||||
if node.LogicAction(delta) {
|
if node.LogicAction(delta) {
|
||||||
positionUpdate = append(positionUpdate, &ss_pb.PositionInfo{
|
positionUpdate = append(positionUpdate, &sspb.PositionInfo{
|
||||||
USN: node.USN,
|
USN: node.USN,
|
||||||
X: int32(node.Position[0] * 100),
|
X: int32(node.Position[0] * 100),
|
||||||
Y: int32(node.Position[1] * 100),
|
Y: int32(node.Position[1] * 100),
|
||||||
@@ -117,12 +117,12 @@ func (i *Instance) onLogic(delta int64) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(positionUpdate) > 0 {
|
if len(positionUpdate) > 0 {
|
||||||
payload, _ := proto.Marshal(&ss_pb.S2C_Position{
|
payload, _ := proto.Marshal(&sspb.S2C_Position{
|
||||||
Info: positionUpdate,
|
Info: positionUpdate,
|
||||||
})
|
})
|
||||||
if err := grpc_client.SendMessageToGateway(sid, grpc_client.FunToClient, &grpc_pb.ToClientReq{
|
if err := grpcclient.SendMessageToGateway(sid, grpcclient.FunToClient, &rspb.ToClientReq{
|
||||||
USN: -1,
|
USN: -1,
|
||||||
MessageID: int32(ss_pb.MessageID_MESSAGE_ID_POSITION),
|
MessageID: int32(sspb.MessageID_MESSAGE_ID_POSITION),
|
||||||
Payload: payload,
|
Payload: payload,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
i.logger.Errorf("send action err: %v", err)
|
i.logger.Errorf("send action err: %v", err)
|
||||||
|
|||||||
@@ -1,17 +1,15 @@
|
|||||||
package npc
|
package npc
|
||||||
|
|
||||||
import (
|
import "git.hlsq.asia/mmorpg/service-common/proto/rs/rspb"
|
||||||
"git.hlsq.asia/mmorpg/service-common/proto/rs/grpc_pb"
|
|
||||||
)
|
|
||||||
|
|
||||||
// NPCNode 定义NPC节点
|
// NPCNode 定义NPC节点
|
||||||
type NPCNode struct {
|
type NPCNode struct {
|
||||||
USN int64 // 用户ID
|
USN int64 // 用户ID
|
||||||
GatewaySID int64 // 网关服务ID
|
GatewaySID int64 // 网关服务ID
|
||||||
|
|
||||||
Position [2]float64 // 二维坐标 [x, y]
|
Position [2]float64 // 二维坐标 [x, y]
|
||||||
MoveCross int8 // 移动十字,1 上 2 下 4 左 8 右
|
MoveCross int8 // 移动十字,1 上 2 下 4 左 8 右
|
||||||
Action []*grpc_pb.ActionReq // 其他操作
|
Action []*rspb.ActionReq // 其他操作
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewNPCNode(gatewaySID int64, usn int64) *NPCNode {
|
func NewNPCNode(gatewaySID int64, usn int64) *NPCNode {
|
||||||
@@ -20,6 +18,6 @@ func NewNPCNode(gatewaySID int64, usn int64) *NPCNode {
|
|||||||
GatewaySID: gatewaySID,
|
GatewaySID: gatewaySID,
|
||||||
Position: [2]float64{0, 0},
|
Position: [2]float64{0, 0},
|
||||||
MoveCross: 0,
|
MoveCross: 0,
|
||||||
Action: make([]*grpc_pb.ActionReq, 0),
|
Action: make([]*rspb.ActionReq, 0),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package npc
|
package npc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"git.hlsq.asia/mmorpg/service-common/proto/rs/grpc_pb"
|
"git.hlsq.asia/mmorpg/service-common/proto/rs/rspb"
|
||||||
"git.hlsq.asia/mmorpg/service-common/proto/ss/ss_pb"
|
"git.hlsq.asia/mmorpg/service-common/proto/ss/sspb"
|
||||||
)
|
)
|
||||||
|
|
||||||
// PlayerNode 定义玩家节点结构体
|
// PlayerNode 定义玩家节点结构体
|
||||||
@@ -11,10 +11,10 @@ type PlayerNode struct {
|
|||||||
GatewaySID int64 // 网关服务ID
|
GatewaySID int64 // 网关服务ID
|
||||||
MoveSpeed float32 // 移动速度
|
MoveSpeed float32 // 移动速度
|
||||||
|
|
||||||
Position [2]float32 // 二维坐标 [x, y]
|
Position [2]float32 // 二维坐标 [x, y]
|
||||||
MoveDirection [2]int8 // 移动方向 [x, y]
|
MoveDirection [2]int8 // 移动方向 [x, y]
|
||||||
MoveCount int8 // 移动指令使用计数
|
MoveCount int8 // 移动指令使用计数
|
||||||
Action []*grpc_pb.ActionReq // 其他操作
|
Action []*rspb.ActionReq // 其他操作
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewPlayerNode(gatewaySID int64, usn int64) *PlayerNode {
|
func NewPlayerNode(gatewaySID int64, usn int64) *PlayerNode {
|
||||||
@@ -23,12 +23,12 @@ func NewPlayerNode(gatewaySID int64, usn int64) *PlayerNode {
|
|||||||
GatewaySID: gatewaySID,
|
GatewaySID: gatewaySID,
|
||||||
MoveSpeed: 5 * 0.00001,
|
MoveSpeed: 5 * 0.00001,
|
||||||
Position: [2]float32{0, 0},
|
Position: [2]float32{0, 0},
|
||||||
Action: make([]*grpc_pb.ActionReq, 0),
|
Action: make([]*rspb.ActionReq, 0),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddAction 将指令存储到玩家身上
|
// AddAction 将指令存储到玩家身上
|
||||||
func (p *PlayerNode) AddAction(e *grpc_pb.ActionReq) {
|
func (p *PlayerNode) AddAction(e *rspb.ActionReq) {
|
||||||
p.Action = append(p.Action, e)
|
p.Action = append(p.Action, e)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,14 +36,14 @@ func (p *PlayerNode) AddAction(e *grpc_pb.ActionReq) {
|
|||||||
// return 是否更新玩家状态
|
// return 是否更新玩家状态
|
||||||
func (p *PlayerNode) LogicAction(delta int64) bool {
|
func (p *PlayerNode) LogicAction(delta int64) bool {
|
||||||
for _, a := range p.Action {
|
for _, a := range p.Action {
|
||||||
switch ss_pb.ActionID(a.Action) {
|
switch sspb.ActionID(a.Action) {
|
||||||
case ss_pb.ActionID_ACTION_ID_MOVE:
|
case sspb.ActionID_ACTION_ID_MOVE:
|
||||||
p.MoveDirection = [2]int8{int8(a.DirX), int8(a.DirY)}
|
p.MoveDirection = [2]int8{int8(a.DirX), int8(a.DirY)}
|
||||||
p.MoveCount = 0
|
p.MoveCount = 0
|
||||||
case ss_pb.ActionID_ACTION_ID_ATTACK:
|
case sspb.ActionID_ACTION_ID_ATTACK:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
p.Action = make([]*grpc_pb.ActionReq, 0)
|
p.Action = make([]*rspb.ActionReq, 0)
|
||||||
|
|
||||||
return p.move(delta)
|
return p.move(delta)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user