活动配置优化
This commit is contained in:
parent
47ffc52955
commit
fa8e1a93d7
@ -1,24 +1,39 @@
|
||||
package backend
|
||||
|
||||
func Start() {
|
||||
// addr := net.JoinHostPort("localhost", "9090")
|
||||
// handler := NewGameServiceHandler()
|
||||
import (
|
||||
"context"
|
||||
"net"
|
||||
"server/conf"
|
||||
"server/msg"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
|
||||
// //创建处理器
|
||||
// processor := backend.NewGameAdminServiceProcessor(handler)
|
||||
"google.golang.org/grpc"
|
||||
)
|
||||
|
||||
// transportFactory := thrift.NewTBufferedTransportFactory(8192)
|
||||
// protocolFactory := thrift.NewTBinaryProtocolFactoryConf(&thrift.TConfiguration{})
|
||||
|
||||
// tcpAddr, err := net.ResolveTCPAddr("tcp", addr)
|
||||
// if err != nil {
|
||||
// fmt.Printf("Failed to resolve address %s: %v\n", addr, err)
|
||||
// return
|
||||
// }
|
||||
// serverTransport := thrift.NewTServerSocketFromAddrTimeout(tcpAddr, 0)
|
||||
// server := thrift.NewTSimpleServer4(processor, serverTransport, transportFactory, protocolFactory)
|
||||
// fmt.Printf("Starting the server on %s...\n", addr)
|
||||
// if err := server.Serve(); err != nil {
|
||||
// fmt.Printf("Error starting the server: %v\n", err)
|
||||
// }
|
||||
type backendServer struct {
|
||||
msg.UnimplementedBackendServer
|
||||
}
|
||||
|
||||
func (s *backendServer) ReloadActivity(ctx context.Context, req *msg.ReqActivityCfgReload) (*msg.ResActivityCfgReload, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func Start() {
|
||||
if conf.Server.RPCAddr == "" {
|
||||
log.Debug("RPC server address not configured, skipping gRPC server startup")
|
||||
return
|
||||
}
|
||||
lis, err := net.Listen("tcp", conf.Server.RPCAddr)
|
||||
if err != nil {
|
||||
log.Error("failed to listen: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
s := grpc.NewServer()
|
||||
msg.RegisterBackendServer(s, &backendServer{})
|
||||
|
||||
log.Debug("gRPC server listening on %s", conf.Server.RPCAddr)
|
||||
if err := s.Serve(lis); err != nil {
|
||||
log.Error("server exited with error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
@ -14,6 +14,7 @@ var Server struct {
|
||||
LogLevel string
|
||||
LogPath string
|
||||
WSAddr string
|
||||
RPCAddr string
|
||||
CertFile string
|
||||
KeyFile string
|
||||
TCPAddr string
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
"LogPath": "./log",
|
||||
"TCPAddr": ":3602",
|
||||
"WSAddr": ":3567",
|
||||
"RPCAddr": ":9003",
|
||||
"MySqlAddr": "127.0.0.1",
|
||||
"MySqlPort": "3306",
|
||||
"MySqlUsr": "root",
|
||||
|
||||
@ -413,6 +413,12 @@ func GetServerMailData(data *[]*SqlServerMailStruct) error {
|
||||
return err
|
||||
}
|
||||
|
||||
func GetActivityData(data *[]*SqlActivityCfgStruct) error {
|
||||
sql := "select `id`, `type`, `title`, `mail_title`, `mail_content`, `level_limit`, `start_time`, `end_time`, `reward`, `extra` from t_activity_mod"
|
||||
err := SqlDb.Select(data, sql)
|
||||
return err
|
||||
}
|
||||
|
||||
func CreateOrderSn(Uid, ChargeId int, OrderSn, Platform, Channel string, Price float64, Currency, Extra string) error {
|
||||
sql := "insert into t_player_charge (`Uid`,`OrderId`, `ProductId`, `Price`,`Currency`, `CreateTime`, `PayPlatform`, `PayChannel`, `PayChannelExtra`) Values (?,?,?,?,?,?,?,?,?)"
|
||||
Now := GoUtil.Now()
|
||||
|
||||
@ -497,6 +497,19 @@ type SqlServerMailStruct struct {
|
||||
CreateTime int64 `db:"create_time"`
|
||||
}
|
||||
|
||||
type SqlActivityCfgStruct struct {
|
||||
Id int `db:"id"`
|
||||
Type int `db:"type"`
|
||||
Title string `db:"title"`
|
||||
MailTitle string `db:"mail_title"`
|
||||
MailContent string `db:"mail_content"`
|
||||
Level int `db:"level_limit"`
|
||||
Start_time int64 `db:"start_time"`
|
||||
End_time int64 `db:"end_time"`
|
||||
RewardItem string `db:"reward"`
|
||||
Extra string `db:"extra"`
|
||||
}
|
||||
|
||||
type SqlChargeOrderStruct struct {
|
||||
Id int `db:"id"`
|
||||
Uid int `db:"Uid"`
|
||||
|
||||
@ -84,6 +84,7 @@ type GameLogic struct {
|
||||
VarMgr *VarMgr // 变量管理器
|
||||
StartTime int64 // 服务器启动时间
|
||||
MessageMgr *MessageMgr // 消息管理器
|
||||
ActivityMgr *ActivityMgr // 活动管理器
|
||||
}
|
||||
|
||||
type ServerInfo struct {
|
||||
@ -293,6 +294,14 @@ func (ad *GameLogic) CreateMailMgr() {
|
||||
ad.MailMgr.Init()
|
||||
}
|
||||
|
||||
// 活动管理器
|
||||
func (ad *GameLogic) CreateActivityMgr() {
|
||||
ad.ActivityMgr = &ActivityMgr{
|
||||
ServerMod: new(ServerMod),
|
||||
}
|
||||
ad.ActivityMgr.Init()
|
||||
}
|
||||
|
||||
func (ad *GameLogic) CreateMessageMgr() {
|
||||
ad.MessageMgr = &MessageMgr{
|
||||
ServerMod: new(ServerMod),
|
||||
@ -478,6 +487,8 @@ func G_getGameLogic() *GameLogic {
|
||||
// G_GameLogicPtr.CreateFriendMgr() //创建好友管理器
|
||||
G_GameLogicPtr.CreateChampshipMgr() // 创建竞标赛管理器
|
||||
G_GameLogicPtr.CreateVarMgr() // 创建变量管理器
|
||||
} else {
|
||||
G_GameLogicPtr.CreateActivityMgr() //创建活动管理器
|
||||
}
|
||||
G_GameLogicPtr.CreateRankMgr() //创建排行榜管理器
|
||||
G_GameLogicPtr.CreateMailMgr() //创建邮件管理器
|
||||
|
||||
@ -1,7 +1,11 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"server/db"
|
||||
"server/game/mod/msg"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"sync"
|
||||
)
|
||||
|
||||
@ -27,15 +31,21 @@ type ActivityCfg struct {
|
||||
Extra map[string]interface{}
|
||||
}
|
||||
|
||||
func (ac *ActivityCfg) String() string {
|
||||
return fmt.Sprintf("Id: %d, Type: %d, StartTime: %d, EndTime: %d, Level: %d, Title: %s, MailTitle: %s, MailContent: %s, RewardItem: %v, Extra: %v",
|
||||
ac.Id, ac.Type, ac.Strartime, ac.Endtime, ac.Level, ac.Title, ac.MailTitle, ac.MailContent, ac.RewardItem, ac.Extra)
|
||||
}
|
||||
|
||||
const ()
|
||||
|
||||
func (r *ActivityMgr) Init() {
|
||||
r.key = RANK_MGR_KEY
|
||||
r.key = ACTIVITY_MGR_KEY
|
||||
r.data = &ActivityData{
|
||||
List: make(map[int]*ActivityCfg, 0),
|
||||
}
|
||||
// 注册处理函数
|
||||
r.init()
|
||||
r.Reload()
|
||||
}
|
||||
|
||||
func (r *ActivityMgr) getData() *ActivityData {
|
||||
@ -58,3 +68,52 @@ func (r ActivityMgr) GetActivityCfg(Id int) ActivityCfg {
|
||||
}
|
||||
return *cfg
|
||||
}
|
||||
|
||||
func (r *ActivityMgr) Reload() error {
|
||||
// 重新加载活动配置
|
||||
// 从数据库加载邮件
|
||||
log.Debug("reload activity data")
|
||||
data := r.getData()
|
||||
data.mu.Lock()
|
||||
defer data.mu.Unlock()
|
||||
cfgList := make([]*db.SqlActivityCfgStruct, 0)
|
||||
err := db.GetActivityData(&cfgList)
|
||||
if err != nil {
|
||||
log.Error("LoadActivityData error: %v", err)
|
||||
return err
|
||||
}
|
||||
data.List = make(map[int]*ActivityCfg, 0)
|
||||
for _, v := range cfgList {
|
||||
reward := make(map[string]interface{})
|
||||
if v.RewardItem != "" {
|
||||
err := json.Unmarshal([]byte(v.RewardItem), &reward)
|
||||
if err != nil {
|
||||
log.Error("Unmarshal reward error: %v", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
extra := make(map[string]interface{})
|
||||
if v.Extra != "" {
|
||||
err := json.Unmarshal([]byte(v.Extra), &extra)
|
||||
if err != nil {
|
||||
log.Error("Unmarshal extra error: %v", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
cfg := &ActivityCfg{
|
||||
Id: v.Id,
|
||||
Type: v.Type,
|
||||
Strartime: v.Start_time,
|
||||
Endtime: v.End_time,
|
||||
Level: v.Level,
|
||||
Title: v.Title,
|
||||
MailTitle: v.MailTitle,
|
||||
MailContent: v.MailContent,
|
||||
RewardItem: reward,
|
||||
Extra: extra,
|
||||
}
|
||||
log.Debug("load activity cfg: %v", cfg)
|
||||
data.List[v.Id] = cfg
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -34,7 +34,7 @@ func RegisterHandlerRPC(param []interface{}) {
|
||||
handler(&msg.AdminReq{}, HandleAdminReq)
|
||||
}
|
||||
|
||||
func init() {
|
||||
func Init() {
|
||||
register()
|
||||
db.InitDB()
|
||||
db.InitRedis()
|
||||
|
||||
@ -2894,8 +2894,6 @@ func ReqSetPetName(player *Player, buf []byte) error {
|
||||
})
|
||||
player.PlayMod.save()
|
||||
player.BackUserInfo()
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
PlayroomMod.UnLock(BaseMod.GetLevel())
|
||||
player.LimitedTimePlayroomTrigger()
|
||||
player.UpdateUserInfo()
|
||||
player.TeLog("petname_set", map[string]interface{}{
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
module server
|
||||
|
||||
go 1.23
|
||||
go 1.25.0
|
||||
|
||||
require (
|
||||
github.com/alibabacloud-go/cloudauth-20190307/v4 v4.9.2
|
||||
@ -13,10 +13,12 @@ require (
|
||||
github.com/go-sql-driver/mysql v1.8.1
|
||||
github.com/gorilla/websocket v1.5.3
|
||||
github.com/jmoiron/sqlx v1.4.0
|
||||
github.com/oschwald/geoip2-golang v1.13.0
|
||||
github.com/redis/go-redis/v9 v9.6.1
|
||||
github.com/robfig/cron/v3 v3.0.1
|
||||
github.com/shirou/gopsutil v3.21.11+incompatible
|
||||
google.golang.org/protobuf v1.36.2
|
||||
google.golang.org/grpc v1.64.0
|
||||
google.golang.org/protobuf v1.36.11
|
||||
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22
|
||||
)
|
||||
|
||||
@ -36,7 +38,6 @@ require (
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/stretchr/testify v1.9.0 // indirect
|
||||
github.com/tjfoc/gmsm v1.4.1 // indirect
|
||||
github.com/tklauser/go-sysconf v0.3.14 // indirect
|
||||
github.com/tklauser/numcpus v0.8.0 // indirect
|
||||
@ -47,10 +48,10 @@ require (
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/apache/thrift v0.22.0 // indirect
|
||||
github.com/oschwald/geoip2-golang v1.13.0 // indirect
|
||||
github.com/oschwald/maxminddb-golang v1.13.0 // indirect
|
||||
golang.org/x/sys v0.29.0 // indirect
|
||||
golang.org/x/text v0.21.0 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c // indirect
|
||||
)
|
||||
|
||||
require (
|
||||
|
||||
@ -73,8 +73,6 @@ github.com/aliyun/credentials-go v1.3.6/go.mod h1:1LxUuX7L5YrZUWzBrRyk0SwSdH4OmP
|
||||
github.com/aliyun/credentials-go v1.4.5/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U=
|
||||
github.com/aliyun/credentials-go v1.4.6 h1:CG8rc/nxCNKfXbZWpWDzI9GjF4Tuu3Es14qT8Y0ClOk=
|
||||
github.com/aliyun/credentials-go v1.4.6/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U=
|
||||
github.com/apache/thrift v0.22.0 h1:r7mTJdj51TMDe6RtcmNdQxgn9XcyfGDOzegMDRg47uc=
|
||||
github.com/apache/thrift v0.22.0/go.mod h1:1e7J/O1Ae6ZQMTYdy9xa3w9k+XHWPfRvdPyJeynQ+/g=
|
||||
github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
|
||||
github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
|
||||
github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
|
||||
@ -114,8 +112,9 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
|
||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
@ -282,6 +281,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
|
||||
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
|
||||
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
||||
golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 h1:NusfzzA6yGQ+ua51ck7E3omNUX/JuqbFSaRGqU8CcLI=
|
||||
golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
@ -303,18 +304,22 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c h1:xgCzyF2LFIO/0X2UAoVRiXKU5Xg6VjToG4i2/ecSswk=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
||||
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
||||
google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY=
|
||||
google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
||||
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.36.2 h1:R8FeyR1/eLmkutZOM5CWghmo5itiG9z0ktFlTVLuTmU=
|
||||
google.golang.org/protobuf v1.36.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
|
||||
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
|
||||
@ -26,9 +26,10 @@ func main() {
|
||||
lconf.ListenAddr = conf.Server.ListenAddr
|
||||
lconf.CenterAddr = conf.Server.CenterAddr
|
||||
lconf.PendingWriteNum = conf.PendingWriteNum
|
||||
// 当内存>256M时开始GC
|
||||
// 当内存>512M时开始GC
|
||||
debug.SetGCPercent(50)
|
||||
debug.SetMemoryLimit(512 << 20)
|
||||
game.Init()
|
||||
// 启动 pprof(仅绑定本地)
|
||||
go func() {
|
||||
// 如果需要绑定所有接口改为 ":6060"
|
||||
|
||||
121
src/server/msg/Gameapi_grpc.pb.go
Normal file
121
src/server/msg/Gameapi_grpc.pb.go
Normal file
@ -0,0 +1,121 @@
|
||||
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
|
||||
// versions:
|
||||
// - protoc-gen-go-grpc v1.6.1
|
||||
// - protoc v5.28.2
|
||||
// source: proto/Gameapi.proto
|
||||
|
||||
package msg
|
||||
|
||||
import (
|
||||
context "context"
|
||||
grpc "google.golang.org/grpc"
|
||||
codes "google.golang.org/grpc/codes"
|
||||
status "google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the grpc package it is being compiled against.
|
||||
// Requires gRPC-Go v1.64.0 or later.
|
||||
const _ = grpc.SupportPackageIsVersion9
|
||||
|
||||
const (
|
||||
Backend_ReloadActivity_FullMethodName = "/tutorial.Backend/ReloadActivity"
|
||||
)
|
||||
|
||||
// BackendClient is the client API for Backend service.
|
||||
//
|
||||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
|
||||
type BackendClient interface {
|
||||
ReloadActivity(ctx context.Context, in *ReqActivityCfgReload, opts ...grpc.CallOption) (*ResActivityCfgReload, error)
|
||||
}
|
||||
|
||||
type backendClient struct {
|
||||
cc grpc.ClientConnInterface
|
||||
}
|
||||
|
||||
func NewBackendClient(cc grpc.ClientConnInterface) BackendClient {
|
||||
return &backendClient{cc}
|
||||
}
|
||||
|
||||
func (c *backendClient) ReloadActivity(ctx context.Context, in *ReqActivityCfgReload, opts ...grpc.CallOption) (*ResActivityCfgReload, error) {
|
||||
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
||||
out := new(ResActivityCfgReload)
|
||||
err := c.cc.Invoke(ctx, Backend_ReloadActivity_FullMethodName, in, out, cOpts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// BackendServer is the server API for Backend service.
|
||||
// All implementations must embed UnimplementedBackendServer
|
||||
// for forward compatibility.
|
||||
type BackendServer interface {
|
||||
ReloadActivity(context.Context, *ReqActivityCfgReload) (*ResActivityCfgReload, error)
|
||||
mustEmbedUnimplementedBackendServer()
|
||||
}
|
||||
|
||||
// UnimplementedBackendServer must be embedded to have
|
||||
// forward compatible implementations.
|
||||
//
|
||||
// NOTE: this should be embedded by value instead of pointer to avoid a nil
|
||||
// pointer dereference when methods are called.
|
||||
type UnimplementedBackendServer struct{}
|
||||
|
||||
func (UnimplementedBackendServer) ReloadActivity(context.Context, *ReqActivityCfgReload) (*ResActivityCfgReload, error) {
|
||||
return nil, status.Error(codes.Unimplemented, "method ReloadActivity not implemented")
|
||||
}
|
||||
func (UnimplementedBackendServer) mustEmbedUnimplementedBackendServer() {}
|
||||
func (UnimplementedBackendServer) testEmbeddedByValue() {}
|
||||
|
||||
// UnsafeBackendServer may be embedded to opt out of forward compatibility for this service.
|
||||
// Use of this interface is not recommended, as added methods to BackendServer will
|
||||
// result in compilation errors.
|
||||
type UnsafeBackendServer interface {
|
||||
mustEmbedUnimplementedBackendServer()
|
||||
}
|
||||
|
||||
func RegisterBackendServer(s grpc.ServiceRegistrar, srv BackendServer) {
|
||||
// If the following call panics, it indicates UnimplementedBackendServer was
|
||||
// embedded by pointer and is nil. This will cause panics if an
|
||||
// unimplemented method is ever invoked, so we test this at initialization
|
||||
// time to prevent it from happening at runtime later due to I/O.
|
||||
if t, ok := srv.(interface{ testEmbeddedByValue() }); ok {
|
||||
t.testEmbeddedByValue()
|
||||
}
|
||||
s.RegisterService(&Backend_ServiceDesc, srv)
|
||||
}
|
||||
|
||||
func _Backend_ReloadActivity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(ReqActivityCfgReload)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(BackendServer).ReloadActivity(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: Backend_ReloadActivity_FullMethodName,
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(BackendServer).ReloadActivity(ctx, req.(*ReqActivityCfgReload))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
// Backend_ServiceDesc is the grpc.ServiceDesc for Backend service.
|
||||
// It's only intended for direct use with grpc.RegisterService,
|
||||
// and not to be introspected or modified (even as a copy)
|
||||
var Backend_ServiceDesc = grpc.ServiceDesc{
|
||||
ServiceName: "tutorial.Backend",
|
||||
HandlerType: (*BackendServer)(nil),
|
||||
Methods: []grpc.MethodDesc{
|
||||
{
|
||||
MethodName: "ReloadActivity",
|
||||
Handler: _Backend_ReloadActivity_Handler,
|
||||
},
|
||||
},
|
||||
Streams: []grpc.StreamDesc{},
|
||||
Metadata: "proto/Gameapi.proto",
|
||||
}
|
||||
@ -3,6 +3,7 @@ package leaf
|
||||
import (
|
||||
"os"
|
||||
"os/signal"
|
||||
"server/backend"
|
||||
mergeCluster "server/cluster"
|
||||
sconf "server/conf"
|
||||
"server/game"
|
||||
@ -32,7 +33,7 @@ func Run(mods ...module.Module) {
|
||||
}
|
||||
log.Release("服务器版本: %s", "1.0.02")
|
||||
log.Release("%s 启动, 节点类型: %s, 区服id: %d", sconf.Server.GameName, sconf.Server.ServerType, sconf.Server.ServerID)
|
||||
|
||||
go backend.Start()
|
||||
// module
|
||||
for i := 0; i < len(mods); i++ {
|
||||
module.Register(mods[i])
|
||||
|
||||
@ -141,7 +141,7 @@ CREATE TABLE IF NOT EXISTS `system_mail_info` (
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 COMMENT = '系统邮件';
|
||||
|
||||
/*==============================================================*/
|
||||
/* Table: t_player_data 系统模块表 */
|
||||
/* Table: t_server_mod 系统模块表 */
|
||||
/*==============================================================*/
|
||||
CREATE TABLE IF NOT EXISTS t_server_mod (
|
||||
`id` int NOT NULL AUTO_INCREMENT primary key,
|
||||
@ -149,3 +149,20 @@ CREATE TABLE IF NOT EXISTS t_server_mod (
|
||||
`mData` mediumblob DEFAULT NULL COMMENT '数据',
|
||||
`updateTime` int unsigned NOT NULL DEFAULT '0' COMMENT '更新时间'
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE utf8mb4_general_ci COMMENT = '系统模块表';
|
||||
|
||||
/*==============================================================*/
|
||||
/* Table: t_activity_mod 系统活动表 */
|
||||
/*==============================================================*/
|
||||
CREATE TABLE IF NOT EXISTS t_activity_mod (
|
||||
`id` int NOT NULL AUTO_INCREMENT primary key,
|
||||
`type` int DEFAULT 0 COMMENT '活动类型',
|
||||
`title` varchar(128) DEFAULT '' COMMENT '活动标题',
|
||||
`mail_title` varchar(128) DEFAULT '' COMMENT '活动邮件标题',
|
||||
`mail_content` varchar(2048) DEFAULT '' COMMENT '活动邮件内容',
|
||||
`start_time` int unsigned NOT NULL DEFAULT '0' COMMENT '活动开始时间',
|
||||
`end_time` int unsigned NOT NULL DEFAULT '0' COMMENT '活动结束时间',
|
||||
`level_limit` int unsigned NOT NULL DEFAULT '0' COMMENT '等级限制',
|
||||
`reward` varchar(2048) DEFAULT '' COMMENT '活动奖励',
|
||||
`extra` varchar(2048) DEFAULT '' COMMENT '活动额外数据',
|
||||
`updateTime` int unsigned NOT NULL DEFAULT '0' COMMENT '更新时间'
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE utf8mb4_general_ci COMMENT = '系统活动表';
|
||||
@ -113,6 +113,7 @@ func TestLevelUp(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestEndless(t *testing.T) {
|
||||
game.Init()
|
||||
p1 := new(game.Player)
|
||||
p1.InitPlayer("3625212")
|
||||
p1.ZeroUpdate(nil)
|
||||
@ -292,3 +293,27 @@ func TestGeoIp(t *testing.T) {
|
||||
code, _ := GoUtil.GetCountryByIP(ip)
|
||||
fmt.Printf("IP: %s, Country Code: %s\n", ip, code)
|
||||
}
|
||||
|
||||
func TestSearchPlayer(t *testing.T) {
|
||||
db.InitDB()
|
||||
db.InitRedis()
|
||||
uids := []int{}
|
||||
err := db.SqlDb.Select(&uids, "select dwUin from t_player_baseinfo")
|
||||
if err != nil {
|
||||
fmt.Printf("Error fetching UIDs: %v\n", err)
|
||||
return
|
||||
}
|
||||
var i int
|
||||
for _, uid := range uids {
|
||||
p1 := new(game.Player)
|
||||
p1.M_DwUin = int64(uid)
|
||||
p1.InitPlayerOnly()
|
||||
if p1.GetBaseMod().GetLevel() < 16 {
|
||||
continue
|
||||
}
|
||||
if len(p1.GetPlayroomMod().Physiology) < 6 {
|
||||
i++
|
||||
}
|
||||
}
|
||||
fmt.Printf("Number of players with level >= 16 and less than 6 physiology: %d\n", i)
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user