上传服务cmd 启动程序
This commit is contained in:
parent
5e9f50e10f
commit
97cff7c81c
47
bin/gm.json
Normal file
47
bin/gm.json
Normal file
@ -0,0 +1,47 @@
|
||||
{
|
||||
"AreaId": "dfli01",
|
||||
"ConsulAddr": "10.0.0.9:10012",
|
||||
"IsCross": false,
|
||||
"BelongCrossServerId": "dflicross01",
|
||||
"LoaclDB": {
|
||||
"RedisIsCluster": false,
|
||||
"RedisAddr": "10.0.0.9:10011",
|
||||
"RedisPassword": "li13451234",
|
||||
"RedisDB": 5,
|
||||
"MongodbUrl": "mongodb://10.0.0.9:10013",
|
||||
"MongodbDatabase": "dreamfactory5"
|
||||
},
|
||||
"CrossDB": {
|
||||
"RedisIsCluster": false,
|
||||
"RedisAddr": "10.0.0.9:10011",
|
||||
"RedisPassword": "li13451234",
|
||||
"RedisDB": 6,
|
||||
"MongodbUrl": "mongodb://10.0.0.9:10013",
|
||||
"MongodbDatabase": "dreamfactory6"
|
||||
},
|
||||
"Services": [
|
||||
{
|
||||
"ServiceType": "gateway",
|
||||
"Host": "127.0.0.1",
|
||||
"Port": 9567,
|
||||
"Loglevel": 5,
|
||||
"MaxAgeTime": 7,
|
||||
"ListenPort": 7891
|
||||
},
|
||||
{
|
||||
"ServiceType": "mainte",
|
||||
"Host": "127.0.0.1",
|
||||
"Port": 9568,
|
||||
"Loglevel": 5,
|
||||
"MaxAgeTime": 7,
|
||||
"ListenPort": 8000
|
||||
},
|
||||
{
|
||||
"ServiceType": "worker",
|
||||
"Host": "127.0.0.1",
|
||||
"Port": 9569,
|
||||
"Loglevel": 5,
|
||||
"MaxAgeTime": 7
|
||||
}
|
||||
]
|
||||
}
|
32
comm/gameconfig.go
Normal file
32
comm/gameconfig.go
Normal file
@ -0,0 +1,32 @@
|
||||
package comm
|
||||
|
||||
//游戏区服配置
|
||||
type GameConfig struct {
|
||||
AreaId string //区服id 每个区服id都必须是唯一
|
||||
ConsulAddr string //区服Consul
|
||||
IsCross bool ///是否是跨区区服
|
||||
BelongCrossServerId string //所属跨服Id (区服id) 不是跨服区服才有效
|
||||
LoaclDB *DBConfig //本地db
|
||||
CrossDB *DBConfig //跨服db
|
||||
Services []*ServiceConfig //服务列表 可以配置多个gateway 和多个 worker ,只能有一个mainte
|
||||
}
|
||||
|
||||
//区服db配置
|
||||
type DBConfig struct {
|
||||
RedisIsCluster bool //redis 是否是集群模式
|
||||
RedisAddr string //redis 地址
|
||||
RedisPassword string //redis 密码
|
||||
RedisDB int32 //redis db
|
||||
MongodbUrl string //mgondb 地址
|
||||
MongodbDatabase string //数据库地址
|
||||
}
|
||||
|
||||
//服务配置
|
||||
type ServiceConfig struct {
|
||||
ServiceType string //服务类型:gateway(网关服务),worker(业务服务),mainte(维护服务)
|
||||
Host string //运行主机ip
|
||||
Port int32 //监控Prot
|
||||
Loglevel int32 //日志文件输出级别
|
||||
MaxAgeTime int32 //日志文件保存时长
|
||||
ListenPort int32 //网关和维护服务 都需要提供http服务 所以需要监听端口
|
||||
}
|
@ -45,7 +45,7 @@ func (this *AttributeNumeric) Value() float32 {
|
||||
}
|
||||
|
||||
func (this *AttributeNumeric) SetBase(value float32) float32 {
|
||||
this.BaseValue.Set(value)
|
||||
this.BaseValue.SetFloat(value)
|
||||
this.onChange()
|
||||
return this.BaseValue.Value()
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ package attribute
|
||||
|
||||
func NewFixedNumeric(pData float32) FixedNumeric {
|
||||
fixed := FixedNumeric{}
|
||||
fixed.Set(pData)
|
||||
fixed.SetFloat(pData)
|
||||
return fixed
|
||||
}
|
||||
|
||||
@ -10,17 +10,38 @@ type FixedNumeric struct {
|
||||
baseValue FixedPoint
|
||||
}
|
||||
|
||||
func (this FixedNumeric) Set(value float32) float32 {
|
||||
this.baseValue = NewFixedPoint(value)
|
||||
return this.baseValue.Scalar()
|
||||
}
|
||||
func (this FixedNumeric) Fixed() FixedPoint {
|
||||
return this.baseValue
|
||||
}
|
||||
|
||||
func (this FixedNumeric) Value() float32 {
|
||||
return this.baseValue.Scalar()
|
||||
}
|
||||
|
||||
func (this FixedNumeric) GetValue(pDefault float32) float32 {
|
||||
if this.Value() != 0 {
|
||||
return this.Value()
|
||||
} else {
|
||||
return pDefault
|
||||
}
|
||||
}
|
||||
func (this FixedNumeric) SetFloat(value float32) float32 {
|
||||
this.baseValue = NewFixedPoint(value)
|
||||
return this.baseValue.Scalar()
|
||||
}
|
||||
func (this FixedNumeric) Set(value FixedPoint) float32 {
|
||||
this.baseValue = value
|
||||
return this.baseValue.Scalar()
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 增加基本值
|
||||
/// </summary>
|
||||
func (this FixedNumeric) Add(value float32) float32 {
|
||||
this.baseValue.Add(value)
|
||||
return this.baseValue.Scalar()
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 减少基本值
|
||||
/// </summary>
|
||||
|
@ -36,6 +36,12 @@ func (this FixedPoint) ToString() string {
|
||||
return fmt.Sprintf("%f", this.Scalar())
|
||||
}
|
||||
|
||||
/// -
|
||||
func (this FixedPoint) Add(v float32) {
|
||||
y := NewFixedPoint(v)
|
||||
this.rawValue = this.rawValue + y.rawValue
|
||||
}
|
||||
|
||||
/// -
|
||||
func (this FixedPoint) Reduce(v float32) {
|
||||
y := NewFixedPoint(v)
|
||||
|
@ -36,6 +36,12 @@ type HealthPoint struct {
|
||||
CurrMaxHpAppend *AttributeNumeric
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重置当前生命值为最大值
|
||||
/// </summary>
|
||||
func (this *HealthPoint) Reset() {
|
||||
this.Hp.SetFloat(this.CurrMaxHp.Value())
|
||||
}
|
||||
func (this *HealthPoint) Value() int32 {
|
||||
return int32(this.Hp.Value())
|
||||
}
|
||||
@ -43,10 +49,35 @@ func (this *HealthPoint) MaxValue() int32 {
|
||||
return int32(this.CurrMaxHp.Value())
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 扣血
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
func (this *HealthPoint) Minus(value float32) {
|
||||
this.Hp.Minus(value)
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 加血
|
||||
/// </summary>
|
||||
func (this *HealthPoint) Add(value float32) {
|
||||
if FixedPoint_Add(this.Hp.Fixed(), NewFixedPoint(value)).rawValue > this.CurrMaxHp.Fixed().rawValue {
|
||||
this.Reset()
|
||||
} else {
|
||||
this.Hp.Add(value)
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取治疗溢出值
|
||||
/// </summary>
|
||||
func (this *HealthPoint) Overflow(value float32) float32 {
|
||||
if FixedPoint_Add(this.Hp.Fixed(), NewFixedPoint(value)).rawValue > this.CurrMaxHp.Fixed().rawValue {
|
||||
return FixedPoint_Divide(FixedPoint_Add(this.Hp.Fixed(), NewFixedPoint(value)), this.CurrMaxHp.Fixed()).Scalar()
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 剩余血量百分比
|
||||
/// </summary>
|
||||
|
@ -6,6 +6,7 @@ import (
|
||||
cfg "go_dreamfactory/sys/configure/structs"
|
||||
)
|
||||
|
||||
///战斗角色
|
||||
type FightRole struct {
|
||||
/// <summary>
|
||||
/// 战斗实例
|
||||
@ -15,7 +16,15 @@ type FightRole struct {
|
||||
/// 角色数据
|
||||
/// </summary>
|
||||
data core.FightRoleData
|
||||
CurrentHealth attribute.HealthPoint
|
||||
CurrentHealth *attribute.HealthPoint
|
||||
}
|
||||
|
||||
func (this *FightRole) Initialize(pData core.FightRoleData) {
|
||||
// this.data = pData
|
||||
// this.CurrentHealth = attribute.NewHealthPoint(this.data.Hp)
|
||||
// this.CurrentHealth.Reset()
|
||||
// this.data.BuffStore.OwnerRole = this
|
||||
// this.data.PassiveStore.OwnerRole = this
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -28,7 +37,7 @@ func (this *FightRole) ReceiveDamage(DamageValue float32) {
|
||||
//有不死buff生命值设置为1
|
||||
for _, v := range this.data.BuffStore.HasBuffTypes {
|
||||
if v == cfg.GameBuffType_UNDEAD {
|
||||
this.CurrentHealth.Hp.Set(1)
|
||||
this.CurrentHealth.Hp.SetFloat(1)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
176
services/cmd/main.go
Normal file
176
services/cmd/main.go
Normal file
@ -0,0 +1,176 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"fmt"
|
||||
"go_dreamfactory/comm"
|
||||
"go_dreamfactory/lego/core"
|
||||
"go_dreamfactory/lego/sys/log"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
/*
|
||||
服务类型:区服启动程序
|
||||
服务描述:通过读取游戏json配置,启动服务程序
|
||||
*/
|
||||
var (
|
||||
gmpath = flag.String("p", "./gm.json", "区服配置json") //启动服务的Id
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
if err := log.OnInit(nil,
|
||||
log.SetFileName("./log/cmd.log"),
|
||||
log.SetLoglevel(log.DebugLevel),
|
||||
log.SetIsDebug(true)); err != nil {
|
||||
panic(fmt.Sprintf("Sys log Init err:%v", err))
|
||||
} else {
|
||||
log.Infof("Sys log Init success !")
|
||||
}
|
||||
if config, err := readergmconf(*gmpath); err != nil {
|
||||
log.Error("读取区服配置失败!", log.Field{Key: "err", Value: err})
|
||||
} else {
|
||||
for i, v := range config.Services {
|
||||
if sseting, err := convertServiceSttings(config, i, v); err != nil {
|
||||
log.Error("转换服务配置异常!", log.Field{Key: "v", Value: v}, log.Field{Key: "err", Value: err})
|
||||
return
|
||||
} else {
|
||||
if err = writeServiceConfig(fmt.Sprintf("./conf/%s.yaml", sseting.Id), sseting); err != nil {
|
||||
log.Error("写入服务配置失败!", log.Field{Key: "sseting", Value: sseting}, log.Field{Key: "err", Value: err})
|
||||
return
|
||||
}
|
||||
startService(sseting)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//读取游戏配置文件
|
||||
func readergmconf(path string) (config *comm.GameConfig, err error) {
|
||||
config = &comm.GameConfig{}
|
||||
var (
|
||||
jsonFile *os.File
|
||||
byteValue []byte
|
||||
)
|
||||
if jsonFile, err = os.Open(path); err != nil {
|
||||
return
|
||||
} else {
|
||||
defer jsonFile.Close()
|
||||
if byteValue, err = ioutil.ReadAll(jsonFile); err != nil {
|
||||
return
|
||||
}
|
||||
err = json.Unmarshal(byteValue, config)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//转换游戏服务配置
|
||||
func convertServiceSttings(config *comm.GameConfig, id int, sconfig *comm.ServiceConfig) (sseting *core.ServiceSttings, err error) {
|
||||
sseting = &core.ServiceSttings{}
|
||||
sseting.Modules = make(map[string]map[string]interface{})
|
||||
sseting.Sys = make(map[string]map[string]interface{})
|
||||
sseting.Sys["rpcx"] = map[string]interface{}{
|
||||
"ConsulServers": config.ConsulAddr,
|
||||
}
|
||||
switch sconfig.ServiceType {
|
||||
case comm.Service_Gateway: //网关服务
|
||||
sseting.Type = comm.Service_Gateway
|
||||
sseting.Sys["rpcx"]["RpcxStartType"] = 1
|
||||
sseting.Modules["gateway"] = map[string]interface{}{
|
||||
"ListenPort": sconfig.ListenPort,
|
||||
"SpanServiceTag": config.BelongCrossServerId,
|
||||
}
|
||||
break
|
||||
case comm.Service_Worker: //业务服务
|
||||
sseting.Type = comm.Service_Worker
|
||||
sseting.Sys["rpcx"]["RpcxStartType"] = 0
|
||||
break
|
||||
case comm.Service_Mainte: //维护服务
|
||||
sseting.Type = comm.Service_Mainte
|
||||
sseting.Sys["rpcx"]["RpcxStartType"] = 0
|
||||
sseting.Modules["web"] = map[string]interface{}{
|
||||
"WebDir": "./dist",
|
||||
"Port": sconfig.ListenPort,
|
||||
"Key": "@234%67g12q4*67m12#4l67!",
|
||||
}
|
||||
break
|
||||
default:
|
||||
err = fmt.Errorf("服务类型异常 stype:%s", sseting.Type)
|
||||
return
|
||||
}
|
||||
sseting.Id = fmt.Sprintf("%s_s%d", config.AreaId, id)
|
||||
sseting.Tag = config.AreaId
|
||||
sseting.Ip = sconfig.Host
|
||||
sseting.Port = int(sconfig.Port)
|
||||
|
||||
sseting.Sys["log"] = map[string]interface{}{
|
||||
"FileName": fmt.Sprintf("./log/%s.log", sseting.Id),
|
||||
"Loglevel": sconfig.Loglevel,
|
||||
"MaxAgeTime": sconfig.MaxAgeTime,
|
||||
}
|
||||
sseting.Sys["configure"] = map[string]interface{}{
|
||||
"ConfigurePath": "./json",
|
||||
}
|
||||
sseting.Sys["db"] = map[string]interface{}{}
|
||||
sseting.Sys["db"]["Loacl"] = map[string]interface{}{
|
||||
"Enabled": true,
|
||||
"RedisIsCluster": config.LoaclDB.RedisIsCluster,
|
||||
"RedisAddr": config.LoaclDB.RedisAddr,
|
||||
"RedisPassword": config.LoaclDB.RedisPassword,
|
||||
"RedisDB": config.LoaclDB.RedisDB,
|
||||
"MongodbUrl": config.LoaclDB.MongodbUrl,
|
||||
"MongodbDatabase": config.LoaclDB.MongodbDatabase,
|
||||
}
|
||||
if !config.IsCross { //不是跨服区服务 需要配置所属跨服db
|
||||
sseting.Sys["db"]["Cross"] = map[string]interface{}{
|
||||
"Enabled": true,
|
||||
"RedisIsCluster": config.CrossDB.RedisIsCluster,
|
||||
"RedisAddr": config.CrossDB.RedisAddr,
|
||||
"RedisPassword": config.CrossDB.RedisPassword,
|
||||
"RedisDB": config.CrossDB.RedisDB,
|
||||
"MongodbUrl": config.CrossDB.MongodbUrl,
|
||||
"MongodbDatabase": config.CrossDB.MongodbDatabase,
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
//启动服务程序
|
||||
func startService(sseting *core.ServiceSttings) (err error) {
|
||||
var (
|
||||
cmd *exec.Cmd
|
||||
)
|
||||
switch sseting.Type {
|
||||
case comm.Service_Gateway: //网关服务
|
||||
cmd = exec.Command("./stup.sh", "start", sseting.Id, "gateway", fmt.Sprintf("./conf/%s.yaml", sseting.Id))
|
||||
break
|
||||
case comm.Service_Worker: //业务服务
|
||||
cmd = exec.Command("./stup.sh", "start", sseting.Id, "worker", fmt.Sprintf("./conf/%s.yaml", sseting.Id))
|
||||
break
|
||||
case comm.Service_Mainte: //维护服务
|
||||
cmd = exec.Command("./stup.sh", "start", sseting.Id, "mainte", fmt.Sprintf("./conf/%s.yaml", sseting.Id))
|
||||
break
|
||||
default:
|
||||
err = fmt.Errorf("服务类型异常 stype:%s", sseting.Type)
|
||||
return
|
||||
}
|
||||
err = cmd.Start()
|
||||
return
|
||||
}
|
||||
|
||||
//写入服务配置文件
|
||||
func writeServiceConfig(filename string, sseting *core.ServiceSttings) (err error) {
|
||||
var data []byte
|
||||
if data, err = yaml.Marshal(sseting); err != nil {
|
||||
return
|
||||
} else {
|
||||
err = ioutil.WriteFile(filename, data, 0777)
|
||||
}
|
||||
return
|
||||
}
|
Loading…
Reference in New Issue
Block a user