This commit is contained in:
liuxiaobo 2025-05-26 16:02:54 +08:00
parent cd54354df2
commit b692da3054
6 changed files with 72 additions and 61 deletions

View File

@ -14,9 +14,10 @@ type INode interface {
MapKey() string MapKey() string
} }
// 服务节点信息TypeId及Type都是标记同类型的节点Name是区别该节点与其它节点的字段
type ServiceNode struct { type ServiceNode struct {
ServiceId int32 `json:"service_id"` // 服务id 由proto定义gate通过该字段找到serviceNode TypeId int `json:"type_id"` // 服务类型id与Type字段功能一样 由proto定义gate通过该字段找到这类服务的所有节点信息
Name string `json:"name"` // 服务名 多个同类服务依赖name区分:1,2,3等等 Name string `json:"name"` // 服务名 多个同类服务依赖name区分:lobby1,lobby2,lobby3等等
Type string `json:"type"` // 服务类型:lobby, game, gate等等 Type string `json:"type"` // 服务类型:lobby, game, gate等等
Address string `json:"address"` // 地址 Address string `json:"address"` // 地址
Port int `json:"port"` // 端口 Port int `json:"port"` // 端口
@ -33,7 +34,7 @@ func (s ServiceNode) EtcdRootKey() string {
} }
func (s ServiceNode) MapKey() string { func (s ServiceNode) MapKey() string {
return fmt.Sprintf("%s-%s", s.Type, s.Name) return s.Name
} }
type TopicNode struct { type TopicNode struct {
@ -50,5 +51,5 @@ func (s TopicNode) EtcdRootKey() string {
} }
func (s TopicNode) MapKey() string { func (s TopicNode) MapKey() string {
return fmt.Sprintf("%s", s.Name) return s.Name
} }

View File

@ -172,11 +172,11 @@ func (s *BaseService) Run() {
} }
func (s *BaseService) Log(format string, a ...any) string { func (s *BaseService) Log(format string, a ...any) string {
head := fmt.Sprintf("service:%v-%v ", s.type_, s.name) head := fmt.Sprintf("service:%v ", s.name)
return head + fmt.Sprintf(format, a...) return head + fmt.Sprintf(format, a...)
} }
func (s *BaseService) Err(format string, a ...any) error { func (s *BaseService) Err(format string, a ...any) error {
head := fmt.Sprintf("service:%v-%v ", s.type_, s.name) head := fmt.Sprintf("service:%v ", s.name)
return fmt.Errorf(head + fmt.Sprintf(format, a...)) return fmt.Errorf(head + fmt.Sprintf(format, a...))
} }

View File

@ -1,18 +1,23 @@
package service package service
import ( const (
"fmt" extTopic = ".topic"
extGroup = ".group"
) )
// 每个服务都有自己的服务topic // 每个服务都有自己的服务topic
func Topic(s IService) string { func Topic(s IService) string {
return fmt.Sprintf("%v-%v.topic", s.Type(), s.Name()) return s.Name() + extTopic
}
func TopicEx(serviceName string) string {
return serviceName + extTopic
} }
func GroupTopic(s IService) string { func GroupTopic(s IService) string {
return s.Type() + ".topic" return s.Type() + extTopic
} }
func GroupQueue(s IService) string { func GroupQueue(s IService) string {
return s.Type() + ".group" return s.Type() + extGroup
} }

View File

@ -5,54 +5,59 @@ import (
"time" "time"
) )
var rd *rand.Rand
func init() { func init() {
rand.New(rand.NewSource(time.Now().UnixNano())) rd = rand.New(rand.NewSource(time.Now().UnixNano()))
} }
var Int = rand.Int func Int() int {
return rd.Int()
}
func Intn(n int) int { // [0,n)
return rand.Intn(n) func IntN(n int) int {
return rd.Intn(n)
} }
func Int31() int32 { func Int31() int32 {
return rand.Int31() return rd.Int31()
} }
func Int31n(n int32) int32 { func Int31n(n int32) int32 {
return rand.Int31n(n) return rd.Int31n(n)
} }
func Int63() int64 { func Int63() int64 {
return rand.Int63() return rd.Int63()
} }
func Int63n(n int64) int64 { func Int63n(n int64) int64 {
return rand.Int63n(n) return rd.Int63n(n)
} }
func Uint32() uint32 { func Uint32() uint32 {
return rand.Uint32() return rd.Uint32()
} }
func Uint64() uint64 { func Uint64() uint64 {
return rand.Uint64() return rd.Uint64()
} }
func Float32() float32 { func Float32() float32 {
return rand.Float32() return rd.Float32()
} }
func Float64() float64 { func Float64() float64 {
return rand.Float64() return rd.Float64()
} }
func Perm(n int) []int { func Perm(n int) []int {
return rand.Perm(n) return rd.Perm(n)
} }
func Read(p []byte) (n int, err error) { func Read(p []byte) (n int, err error) {
return rand.Read(p) return rd.Read(p)
} }
func Shuffle[T any](slice []T) { func Shuffle[T any](slice []T) {

View File

@ -29,7 +29,7 @@ func WeightRandom[W int | uint | int32 | uint32 | int64 | uint64, T any](m map[W
return items[0].Data, nil return items[0].Data, nil
} }
r := Intn(int(sum)) r := IntN(int(sum))
for _, item := range items { for _, item := range items {
r -= int(item.Weight) r -= int(item.Weight)
if r < 0 { if r < 0 {

View File

@ -14,7 +14,7 @@ import (
// 设置时区 // 设置时区
// reverse给Now()设置时传false解析系统时区输出的字符串/时间戳时传true // reverse给Now()设置时传false解析系统时区输出的字符串/时间戳时传true
func setLocation(c carbon.Carbon, offsets ...int) carbon.Carbon { func setLocation(c *carbon.Carbon, offsets ...int) *carbon.Carbon {
var loc *time.Location var loc *time.Location
if len(offsets) > 0 { if len(offsets) > 0 {
loc = time.FixedZone("CUS", offsets[len(offsets)-1]) loc = time.FixedZone("CUS", offsets[len(offsets)-1])
@ -25,7 +25,7 @@ func setLocation(c carbon.Carbon, offsets ...int) carbon.Carbon {
return c.SetLocation(loc) return c.SetLocation(loc)
} }
func set(c carbon.Carbon, offsets ...int) carbon.Carbon { func set(c *carbon.Carbon, offsets ...int) *carbon.Carbon {
// 设置周起始 // 设置周起始
c = c.SetWeekStartsAt(WeekStartsAt) c = c.SetWeekStartsAt(WeekStartsAt)
// 设置时区 // 设置时区
@ -33,18 +33,18 @@ func set(c carbon.Carbon, offsets ...int) carbon.Carbon {
return c return c
} }
func Now(offsets ...int) (c carbon.Carbon) { func Now(offsets ...int) (c *carbon.Carbon) {
c = carbon.Now().AddSeconds(nowOffset) c = carbon.Now().AddSeconds(nowOffset)
c = set(c, offsets...) c = set(c, offsets...)
return return
} }
func ConvertToCarbon[T time.Time | carbon.Carbon | int64](t T, offsets ...int) carbon.Carbon { func ConvertToCarbon[T time.Time | *carbon.Carbon | int64](t T, offsets ...int) *carbon.Carbon {
var c carbon.Carbon var c *carbon.Carbon
switch v := any(t).(type) { switch v := any(t).(type) {
case time.Time: case time.Time:
c = set(carbon.CreateFromStdTime(v), offsets...) c = set(carbon.CreateFromStdTime(v), offsets...)
case carbon.Carbon: case *carbon.Carbon:
c = set(v, offsets...) c = set(v, offsets...)
case int64: case int64:
c = set(carbon.CreateFromTimestamp(v), offsets...) c = set(carbon.CreateFromTimestamp(v), offsets...)
@ -58,7 +58,7 @@ func IsTodayTimestamp[T int | int64](timestamp T, offsets ...int) bool {
} }
// IsToday 判断时间是否为今天 // IsToday 判断时间是否为今天
func IsToday[T time.Time | carbon.Carbon | int64](t T, offsets ...int) bool { func IsToday[T time.Time | *carbon.Carbon | int64](t T, offsets ...int) bool {
c := ConvertToCarbon(t, offsets...) c := ConvertToCarbon(t, offsets...)
return c.ToDateString() == Now().ToDateString() return c.ToDateString() == Now().ToDateString()
@ -70,7 +70,7 @@ func IsToday[T time.Time | carbon.Carbon | int64](t T, offsets ...int) bool {
// now := time.Now() // now := time.Now()
// before := time.Now().Add(-time.Hour) // before := time.Now().Add(-time.Hour)
// IsBeforeNow(after) // true // IsBeforeNow(after) // true
func IsBeforeNow[T time.Time | carbon.Carbon | int64](t T, offsets ...int) bool { func IsBeforeNow[T time.Time | *carbon.Carbon | int64](t T, offsets ...int) bool {
return !IsAfterNow(t, offsets...) return !IsAfterNow(t, offsets...)
} }
@ -80,11 +80,11 @@ func IsBeforeNow[T time.Time | carbon.Carbon | int64](t T, offsets ...int) bool
// now := time.Now() // now := time.Now()
// after := time.Now().Add(time.Hour) // after := time.Now().Add(time.Hour)
// IsAfterNow(after) // true // IsAfterNow(after) // true
func IsAfterNow[T time.Time | carbon.Carbon | int64](t T, offsets ...int) bool { func IsAfterNow[T time.Time | *carbon.Carbon | int64](t T, offsets ...int) bool {
switch v := any(t).(type) { switch v := any(t).(type) {
case time.Time: case time.Time:
return IsAfter(v, time.Now(), offsets...) return IsAfter(v, time.Now(), offsets...)
case carbon.Carbon: case *carbon.Carbon:
return IsAfter(v, Now(), offsets...) return IsAfter(v, Now(), offsets...)
case int64: case int64:
return IsAfter(v, Now().Timestamp()) return IsAfter(v, Now().Timestamp())
@ -98,7 +98,7 @@ func IsAfterNow[T time.Time | carbon.Carbon | int64](t T, offsets ...int) bool {
// t1 := time.Now().Add(-time.Hour) // t1 := time.Now().Add(-time.Hour)
// t2 := time.Now() // t2 := time.Now()
// IsBefore(t1,t2) // true // IsBefore(t1,t2) // true
func IsBefore[T time.Time | carbon.Carbon | int64](t1, t2 T, offsets ...int) bool { func IsBefore[T time.Time | *carbon.Carbon | int64](t1, t2 T, offsets ...int) bool {
return !IsAfter(t1, t2, offsets...) return !IsAfter(t1, t2, offsets...)
} }
@ -107,103 +107,103 @@ func IsBefore[T time.Time | carbon.Carbon | int64](t1, t2 T, offsets ...int) boo
// t1 := time.Now().Add(time.Hour) // t1 := time.Now().Add(time.Hour)
// t2 := time.Now() // t2 := time.Now()
// IsAfter(t1,t2) // true // IsAfter(t1,t2) // true
func IsAfter[T time.Time | carbon.Carbon | int64](t1, t2 T, offsets ...int) bool { func IsAfter[T time.Time | *carbon.Carbon | int64](t1, t2 T, offsets ...int) bool {
c1, c2 := ConvertToCarbon(t1, offsets...), ConvertToCarbon(t2, offsets...) c1, c2 := ConvertToCarbon(t1, offsets...), ConvertToCarbon(t2, offsets...)
return c1.Gt(c2) return c1.Gt(c2)
} }
// TimestampToTime 将时间戳转为 carbon.Carbon 类型 // TimestampToTime 将时间戳转为 carbon.Carbon 类型
func TimestampToTime[T int | int64](timestamp T, offsets ...int) carbon.Carbon { func TimestampToTime[T int | int64](timestamp T, offsets ...int) *carbon.Carbon {
return set(carbon.CreateFromTimestamp(int64(timestamp)), offsets...) return set(carbon.CreateFromTimestamp(int64(timestamp)), offsets...)
} }
// IsInDuration 判断某个时间在某个时间段内 // IsInDuration 判断某个时间在某个时间段内
func IsInDuration[T time.Time | carbon.Carbon | int64](t, start, end T, offsets ...int) bool { func IsInDuration[T time.Time | *carbon.Carbon | int64](t, start, end T, offsets ...int) bool {
return IsAfter(t, start, offsets...) && IsBefore(t, end, offsets...) return IsAfter(t, start, offsets...) && IsBefore(t, end, offsets...)
} }
// FormatDuration 将起止时间,格式化为 format - format // FormatDuration 将起止时间,格式化为 format - format
func FormatDuration[T time.Time | carbon.Carbon | int64](start, end T, layout string, offsets ...int) string { func FormatDuration[T time.Time | *carbon.Carbon | int64](start, end T, layout string, offsets ...int) string {
startC, endC := ConvertToCarbon(start, offsets...), ConvertToCarbon(end, offsets...) startC, endC := ConvertToCarbon(start, offsets...), ConvertToCarbon(end, offsets...)
return fmt.Sprintf("%s - %s", startC.StdTime().Format(layout), endC.StdTime().Format(layout)) return fmt.Sprintf("%s - %s", startC.StdTime().Format(layout), endC.StdTime().Format(layout))
} }
func Yesterday(offsets ...int) carbon.Carbon { func Yesterday(offsets ...int) *carbon.Carbon {
return Now(offsets...).SubDay().StartOfDay() return Now(offsets...).SubDay().StartOfDay()
} }
func Today(offsets ...int) carbon.Carbon { func Today(offsets ...int) *carbon.Carbon {
return Now(offsets...).StartOfDay() return Now(offsets...).StartOfDay()
} }
func Tomorrow(offsets ...int) carbon.Carbon { func Tomorrow(offsets ...int) *carbon.Carbon {
return Now(offsets...).AddDay().StartOfDay() return Now(offsets...).AddDay().StartOfDay()
} }
func NextNDay(n int, offsets ...int) carbon.Carbon { func NextNDay(n int, offsets ...int) *carbon.Carbon {
return Now(offsets...).AddDays(n).StartOfDay() return Now(offsets...).AddDays(n).StartOfDay()
} }
func LastWeek(offsets ...int) carbon.Carbon { func LastWeek(offsets ...int) *carbon.Carbon {
return Now(offsets...).SubWeek().StartOfWeek() return Now(offsets...).SubWeek().StartOfWeek()
} }
func ThisWeek(offsets ...int) carbon.Carbon { func ThisWeek(offsets ...int) *carbon.Carbon {
return Now(offsets...).StartOfWeek() return Now(offsets...).StartOfWeek()
} }
func NextWeek(offsets ...int) carbon.Carbon { func NextWeek(offsets ...int) *carbon.Carbon {
return Now(offsets...).AddWeek().StartOfWeek() return Now(offsets...).AddWeek().StartOfWeek()
} }
func NextNWeek(n int, offsets ...int) carbon.Carbon { func NextNWeek(n int, offsets ...int) *carbon.Carbon {
return Now(offsets...).AddWeeks(n).StartOfWeek() return Now(offsets...).AddWeeks(n).StartOfWeek()
} }
func LastMonth(offsets ...int) carbon.Carbon { func LastMonth(offsets ...int) *carbon.Carbon {
return Now(offsets...).SubMonth().StartOfMonth() return Now(offsets...).SubMonth().StartOfMonth()
} }
func ThisMonth(offsets ...int) carbon.Carbon { func ThisMonth(offsets ...int) *carbon.Carbon {
return Now(offsets...).StartOfMonth() return Now(offsets...).StartOfMonth()
} }
func NextMonth(offsets ...int) carbon.Carbon { func NextMonth(offsets ...int) *carbon.Carbon {
return Now(offsets...).AddMonth().StartOfMonth() return Now(offsets...).AddMonth().StartOfMonth()
} }
func NextNMonth(n int, offsets ...int) carbon.Carbon { func NextNMonth(n int, offsets ...int) *carbon.Carbon {
return Now(offsets...).AddMonths(n).StartOfMonth() return Now(offsets...).AddMonths(n).StartOfMonth()
} }
func LastQuarter(offsets ...int) carbon.Carbon { func LastQuarter(offsets ...int) *carbon.Carbon {
return Now(offsets...).SubQuarter().StartOfQuarter() return Now(offsets...).SubQuarter().StartOfQuarter()
} }
func ThisQuarter(offsets ...int) carbon.Carbon { func ThisQuarter(offsets ...int) *carbon.Carbon {
return Now(offsets...).StartOfQuarter() return Now(offsets...).StartOfQuarter()
} }
func NextQuarter(offsets ...int) carbon.Carbon { func NextQuarter(offsets ...int) *carbon.Carbon {
return Now(offsets...).AddQuarter().StartOfQuarter() return Now(offsets...).AddQuarter().StartOfQuarter()
} }
func NextNQuarter(n int, offsets ...int) carbon.Carbon { func NextNQuarter(n int, offsets ...int) *carbon.Carbon {
return Now(offsets...).AddQuarters(n).StartOfQuarter() return Now(offsets...).AddQuarters(n).StartOfQuarter()
} }
func LastYear(offsets ...int) carbon.Carbon { func LastYear(offsets ...int) *carbon.Carbon {
return Now(offsets...).SubYear().StartOfYear() return Now(offsets...).SubYear().StartOfYear()
} }
func ThisYear(offsets ...int) carbon.Carbon { func ThisYear(offsets ...int) *carbon.Carbon {
return Now(offsets...).StartOfYear() return Now(offsets...).StartOfYear()
} }
func NextYear(offsets ...int) carbon.Carbon { func NextYear(offsets ...int) *carbon.Carbon {
return Now(offsets...).AddYear().StartOfYear() return Now(offsets...).AddYear().StartOfYear()
} }
func NextNYear(n int, offsets ...int) carbon.Carbon { func NextNYear(n int, offsets ...int) *carbon.Carbon {
return Now(offsets...).AddYears(n).StartOfYear() return Now(offsets...).AddYears(n).StartOfYear()
} }