Browse Source

deploy k8s

master
tangmingyou 3 years ago
parent
commit
7d3aa3968e
  1. 7
      api/mahjong.proto
  2. 6
      cmd/gateway_ws/config.toml
  3. 4
      cmd/mahjong/main.go
  4. 23
      deploy_k8s/auth.yaml
  5. 23
      deploy_k8s/chat.yaml
  6. 33
      deploy_k8s/etcd.yaml
  7. 39
      deploy_k8s/gateway_http.yaml
  8. 146
      deploy_k8s/gateway_ws.yaml
  9. 23
      deploy_k8s/mahjong.yaml
  10. 32
      deploy_k8s/nats.yaml
  11. 28
      deploy_k8s/redis.yaml
  12. 26
      go.mod
  13. 46
      go.sum
  14. 2
      internal/gateway_ws/server/http_server.go
  15. 40
      internal/gateway_ws/server/ws_server.go
  16. 1
      internal/mahjong/game/mj_player.go
  17. 4
      internal/mahjong/game/mj_table.go
  18. 4
      internal/mahjong/helper/conver.go
  19. 16
      internal/mahjong/logic/mahjong_server.go
  20. 2
      pkg/grpc/balancer/consistent_hash.go
  21. 33
      pkg/grpc/discovery/etcd.go
  22. 13
      pkg/grpc/discovery/register.go
  23. 18
      pkg/grpc/generic/generic_client.go
  24. 7
      pkg/grpc/interceptor/recover_interceptor.go
  25. 19
      pkg/protocol/protocol.go

7
api/mahjong.proto

@ -69,6 +69,7 @@ message WinSettle {
message MjPlayer { message MjPlayer {
string playerId = 1; string playerId = 1;
int32 direct = 14; // 012西3
string username = 2; string username = 2;
string avatar = 3; string avatar = 3;
int32 status = 4; int32 status = 4;
@ -78,11 +79,11 @@ message MjPlayer {
repeated int32 mjHand = 8; // repeated int32 mjHand = 8; //
int32 mjDraw = 9; // int32 mjDraw = 9; //
message Peng { message Peng {
repeated int32 peng = 1; repeated int32 tiles = 1;
} }
repeated Peng mjPeng = 10; // repeated Peng mjPeng = 10; //
message Gang { message Gang {
repeated int32 gang = 1; repeated int32 tiles = 1;
} }
repeated Gang mjGang = 11; // repeated Gang mjGang = 11; //
repeated int32 opts = 12; // repeated int32 opts = 12; //

6
cmd/gateway_ws/config.toml

@ -1,12 +1,12 @@
[app] [app]
httpPort = 7002 httpPort = 7001
endpointAddress = "127.0.0.1:7002" endpointAddress = "127.0.0.1:7001"
subjectCacheTopic = "wsgate:subject:" subjectCacheTopic = "wsgate:subject:"
subjectLrcExpiration = "10m" subjectLrcExpiration = "10m"
subjectLrcCleanupInterval = "5m" subjectLrcCleanupInterval = "5m"
[grpc] [grpc]
address = ":7012" address = ":7011"
maxSendMsgSize = "8Mi" maxSendMsgSize = "8Mi"
maxRecvMsgSize = "8Mi" maxRecvMsgSize = "8Mi"
readBufferSize = "8Ki" readBufferSize = "8Ki"

4
cmd/mahjong/main.go

@ -6,7 +6,7 @@ import (
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/credentials/insecure"
"sonet/api/gen/auth" "sonet/api/gen/auth"
"sonet/api/gen/chat" "sonet/api/gen/mahjong"
"sonet/internal/mahjong/logic" "sonet/internal/mahjong/logic"
"sonet/internal/mahjong/store" "sonet/internal/mahjong/store"
"sonet/pkg/config" "sonet/pkg/config"
@ -29,7 +29,7 @@ func main() {
// init deliver // init deliver
etcdResolver := discovery.NewResolver(etcdClient) etcdResolver := discovery.NewResolver(etcdClient)
deli := deliver.NewDeliver(chat.Chat_ServiceDesc.ServiceName) deli := deliver.NewDeliver(mahjong.Mahjong_ServiceDesc.ServiceName)
if err := deli.InitWithResolver(context.Background(), etcdResolver); err != nil { if err := deli.InitWithResolver(context.Background(), etcdResolver); err != nil {
panic(err) panic(err)
} }

23
deploy_k8s/auth.yaml

@ -0,0 +1,23 @@
apiVersion: v1
kind: Pod
metadata:
name: auth
namespace: sopod
labels:
app: auth
spec:
containers:
- name: auth
image: 10.0.16.5:3050/so_auth:1.0.0
env:
- name: SO_ETCD.ENDPOINTS
value: etcd-svc:2379
- name: SO_ETCD.USERNAME
value: ""
- name: SO_ETCD.PASSWORD
value: ""
- name: SO_PROMETHEUS.ENABLE
value: "false"
- name: SO_PROMETHEUS.PORT
value: "9100"
imagePullPolicy: Always

23
deploy_k8s/chat.yaml

@ -0,0 +1,23 @@
apiVersion: v1
kind: Pod
metadata:
name: chat
namespace: sopod
labels:
app: chat
spec:
containers:
- name: chat
image: 10.0.16.5:3050/so_chat:1.0.0
env:
- name: SO_ETCD.ENDPOINTS
value: etcd-svc:2379
- name: SO_ETCD.USERNAME
value: ""
- name: SO_ETCD.PASSWORD
value: ""
- name: SO_PROMETHEUS.ENABLE
value: "false"
- name: SO_PROMETHEUS.PORT
value: "9100"
imagePullPolicy: Always

33
deploy_k8s/etcd.yaml

@ -0,0 +1,33 @@
apiVersion: v1
kind: Pod
metadata:
name: etcd
namespace: sopod
labels:
app: etcd
spec:
containers:
- name: etcd
image: bitnami/etcd:3.4
env:
- name: ALLOW_NONE_AUTHENTICATION
value: "yes"
- name: TZ
value: "Asia/Shanghai"
imagePullPolicy: IfNotPresent
ports:
- containerPort: 2379
- containerPort: 2380
---
apiVersion: v1
kind: Service
metadata:
namespace: sopod
name: etcd-svc
labels:
app: etcd-svc
spec:
ports:
- port: 2379
selector:
app: etcd

39
deploy_k8s/gateway_http.yaml

@ -0,0 +1,39 @@
apiVersion: v1
kind: Pod
metadata:
name: gateway-http
namespace: sopod
labels:
app: gateway-http
spec:
containers:
- name: gateway-http
image: 10.0.16.5:3050/so_gateway_http:1.0.0
env: [
{name: SO_ETCD.ENDPOINTS, value: "etcd-svc:2379"},
{name: SO_ETCD.USERNAME, value: ""},
{name: SO_PROMETHEUS.ENABLE, value: "false"},
{name: SO_PROMETHEUS.PORT, value: "9100"},
{name: SO_APP.PORT, value: "7000"},
]
imagePullPolicy: Always
ports:
- containerPort: 7000
---
apiVersion: v1
kind: Service
metadata:
name: gateway-http-svc
namespace: sopod
labels:
app: gateway-http-svc
spec:
type: NodePort
ports:
- name: gateway-http
port: 7000
targetPort: 7000
nodePort: 30830
selector:
app: gateway-http

146
deploy_k8s/gateway_ws.yaml

@ -0,0 +1,146 @@
apiVersion: v1
kind: Pod
metadata:
name: gateway-ws1
namespace: sopod
labels:
app: gateway-ws1
spec:
containers:
- name: gateway-ws1
image: 10.0.16.5:3050/so_gateway_ws:1.0.0
env:
- name: SO_ETCD.ENDPOINTS
value: etcd-svc:2379
- name: SO_ETCD.USERNAME
value: ""
- name: SO_ETCD.PASSWORD
value: ""
- name: SO_PROMETHEUS.ENABLE
value: "false"
- name: SO_PROMETHEUS.PORT
value: "9100"
- name: SO_APP.HTTPPORT
value: "7001"
- name: SO_APP.ENDPOINTADDRESS
value: 124.222.131.236:30801
- name: SO_REDIS.ADDR
value: "redis-svc:6379"
- name: SO_REDIS.PASSWORD
value: ""
- name: SO_NATS.URL
value: nats://nats-svc:4222
imagePullPolicy: Always
ports:
- containerPort: 7001
- containerPort: 30801
- containerPort: 9100
---
apiVersion: v1
kind: Service
metadata:
name: gateway-ws1-svc
namespace: sopod
labels:
app: gateway-ws1-svc
spec:
type: NodePort
ports:
- name: gateway-ws1
port: 7001
targetPort: 7001
nodePort: 30801
selector:
app: gateway-ws1
---
apiVersion: v1
kind: Service
metadata:
name: gateway-ws1-metrics-svc
namespace: sopod
labels:
app: gateway-ws1-metrics-svc
spec:
type: ClusterIP
ports:
- name: metrics
port: 9100
targetPort: 9100
selector:
app: gateway-ws1
---
apiVersion: v1
kind: Pod
metadata:
name: gateway-ws2
namespace: sopod
labels:
app: gateway-ws2
spec:
containers:
- name: gateway-ws2
image: 10.0.16.5:3050/so_gateway_ws:1.0.0
env:
- name: SO_ETCD.ENDPOINTS
value: etcd-svc:2379
- name: SO_ETCD.USERNAME
value: ""
- name: SO_ETCD.PASSWORD
value: ""
- name: SO_PROMETHEUS.ENABLE
value: "false"
- name: SO_PROMETHEUS.PORT
value: "9100"
- name: SO_APP.HTTPPORT
value: "7002"
- name: SO_APP.ENDPOINTADDRESS
value: 124.222.131.236:30802
- name: SO_REDIS.ADDR
value: "redis-svc:6379"
- name: SO_REDIS.PASSWORD
value: ""
- name: SO_NATS.URL
value: nats://nats-svc:4222
imagePullPolicy: Always
ports:
- containerPort: 7002
- containerPort: 30802
- containerPort: 9100
---
apiVersion: v1
kind: Service
metadata:
name: gateway-ws2-svc
namespace: sopod
labels:
app: gateway-ws2-svc
spec:
type: NodePort
ports:
- name: gateway-ws2
port: 7002
targetPort: 7002
nodePort: 30802
selector:
app: gateway-ws2
---
apiVersion: v1
kind: Service
metadata:
name: gateway-ws2-metrics-svc
namespace: sopod
labels:
app: gateway-ws2-metrics-svc
spec:
type: ClusterIP
ports:
- name: metrics
port: 9100
targetPort: 9100
selector:
app: gateway-ws2

23
deploy_k8s/mahjong.yaml

@ -0,0 +1,23 @@
apiVersion: v1
kind: Pod
metadata:
name: mahjong
namespace: sopod
labels:
app: mahjong
spec:
containers:
- name: mahjong
image: 10.0.16.5:3050/so_mahjong:1.0.0
env:
- name: SO_ETCD.ENDPOINTS
value: etcd-svc:2379
- name: SO_ETCD.USERNAME
value: ""
- name: SO_ETCD.PASSWORD
value: ""
- name: SO_PROMETHEUS.ENABLE
value: "false"
- name: SO_PROMETHEUS.PORT
value: "9100"
imagePullPolicy: Always

32
deploy_k8s/nats.yaml

@ -0,0 +1,32 @@
apiVersion: v1
kind: Pod
metadata:
name: nats
namespace: sopod
labels:
app: nats
spec:
containers:
- name: nats
image: nats:2.9-alpine
args: ["-js"]
env:
- name: TZ
value: "Asia/Shanghai"
imagePullPolicy: IfNotPresent
ports:
- containerPort: 4222
---
apiVersion: v1
kind: Service
metadata:
namespace: sopod
name: nats-svc
labels:
app: nats-svc
spec:
ports:
- port: 4222
selector:
app: nats

28
deploy_k8s/redis.yaml

@ -0,0 +1,28 @@
apiVersion: v1
kind: Pod
metadata:
name: redis
namespace: sopod
labels:
app: redis
spec:
containers:
- name: redis
image: redis:6.2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
namespace: sopod
name: redis-svc
labels:
app: redis-svc
spec:
ports:
- port: 6379
selector:
app: redis

26
go.mod

@ -15,6 +15,7 @@ require (
github.com/redis/go-redis/v9 v9.4.0 github.com/redis/go-redis/v9 v9.4.0
github.com/sirupsen/logrus v1.9.3 github.com/sirupsen/logrus v1.9.3
github.com/spf13/viper v1.17.0 github.com/spf13/viper v1.17.0
go.etcd.io/etcd/api/v3 v3.5.11
go.etcd.io/etcd/client/v3 v3.5.11 go.etcd.io/etcd/client/v3 v3.5.11
google.golang.org/grpc v1.60.1 google.golang.org/grpc v1.60.1
google.golang.org/protobuf v1.32.0 google.golang.org/protobuf v1.32.0
@ -27,19 +28,29 @@ require (
github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
github.com/chenzhuoyu/iasm v0.9.1 // indirect github.com/chenzhuoyu/iasm v0.9.1 // indirect
github.com/cilium/ebpf v0.12.3 // indirect
github.com/coreos/go-semver v0.3.0 // indirect github.com/coreos/go-semver v0.3.0 // indirect
github.com/coreos/go-systemd/v22 v22.3.2 // indirect github.com/coreos/go-systemd/v22 v22.3.2 // indirect
github.com/cosiner/argv v0.1.0 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect
github.com/derekparker/trie v0.0.0-20230829180723-39f4de51ef7d // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.2 // indirect github.com/gabriel-vasile/mimetype v1.4.2 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-delve/delve v1.22.0 // indirect
github.com/go-delve/gore v0.11.6 // indirect
github.com/go-delve/liner v1.2.3-0.20220127212407-d32d89dd2a5d // indirect
github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.14.0 // indirect github.com/go-playground/validator/v10 v10.14.0 // indirect
github.com/go-sql-driver/mysql v1.7.0 // indirect github.com/go-sql-driver/mysql v1.7.0 // indirect
github.com/goccy/go-json v0.10.2 // indirect github.com/goccy/go-json v0.10.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect
github.com/google/go-dap v0.11.0 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect github.com/jinzhu/now v1.1.5 // indirect
github.com/json-iterator/go v1.1.12 // indirect github.com/json-iterator/go v1.1.12 // indirect
@ -47,30 +58,36 @@ require (
github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/klauspost/cpuid/v2 v2.2.4 // indirect
github.com/leodido/go-urn v1.2.4 // indirect github.com/leodido/go-urn v1.2.4 // indirect
github.com/magiconair/properties v1.8.7 // indirect github.com/magiconair/properties v1.8.7 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.15 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/nats-io/nkeys v0.4.7 // indirect github.com/nats-io/nkeys v0.4.7 // indirect
github.com/nats-io/nuid v1.0.1 // indirect github.com/nats-io/nuid v1.0.1 // indirect
github.com/pelletier/go-toml/v2 v2.1.0 // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect
github.com/rivo/uniseg v0.4.4 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect
github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect
github.com/spf13/afero v1.11.0 // indirect github.com/spf13/afero v1.11.0 // indirect
github.com/spf13/cast v1.6.0 // indirect github.com/spf13/cast v1.6.0 // indirect
github.com/spf13/cobra v1.8.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/pflag v1.0.5 // indirect
github.com/subosito/gotenv v1.6.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.11 // indirect github.com/ugorji/go/codec v1.2.11 // indirect
go.etcd.io/etcd/api/v3 v3.5.11 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.11 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.11 // indirect
go.starlark.net v0.0.0-20231121155337-90ade8b19d09 // indirect
go.uber.org/atomic v1.9.0 // indirect go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.9.0 // indirect go.uber.org/multierr v1.9.0 // indirect
go.uber.org/zap v1.21.0 // indirect go.uber.org/zap v1.21.0 // indirect
golang.org/x/arch v0.3.0 // indirect golang.org/x/arch v0.7.0 // indirect
golang.org/x/crypto v0.18.0 // indirect golang.org/x/crypto v0.18.0 // indirect
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 // indirect
golang.org/x/mod v0.14.0 // indirect
golang.org/x/net v0.19.0 // indirect golang.org/x/net v0.19.0 // indirect
golang.org/x/sync v0.5.0 // indirect golang.org/x/sync v0.5.0 // indirect
golang.org/x/sys v0.16.0 // indirect golang.org/x/sys v0.16.0 // indirect
@ -79,5 +96,6 @@ require (
google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f // indirect
gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect
) )

46
go.sum

@ -17,13 +17,21 @@ github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpV
github.com/chenzhuoyu/iasm v0.9.0/go.mod h1:Xjy2NpN3h7aUqeqM+woSuuvxmIe6+DDsiNLIrkAmYog= github.com/chenzhuoyu/iasm v0.9.0/go.mod h1:Xjy2NpN3h7aUqeqM+woSuuvxmIe6+DDsiNLIrkAmYog=
github.com/chenzhuoyu/iasm v0.9.1 h1:tUHQJXo3NhBqw6s33wkGn9SP3bvrWLdlVIJ3hQBL7P0= github.com/chenzhuoyu/iasm v0.9.1 h1:tUHQJXo3NhBqw6s33wkGn9SP3bvrWLdlVIJ3hQBL7P0=
github.com/chenzhuoyu/iasm v0.9.1/go.mod h1:Xjy2NpN3h7aUqeqM+woSuuvxmIe6+DDsiNLIrkAmYog= github.com/chenzhuoyu/iasm v0.9.1/go.mod h1:Xjy2NpN3h7aUqeqM+woSuuvxmIe6+DDsiNLIrkAmYog=
github.com/cilium/ebpf v0.12.3 h1:8ht6F9MquybnY97at+VDZb3eQQr8ev79RueWeVaEcG4=
github.com/cilium/ebpf v0.12.3/go.mod h1:TctK1ivibvI3znr66ljgi4hqOT8EYQjz1KWBfb1UVgM=
github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI=
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cosiner/argv v0.1.0 h1:BVDiEL32lwHukgJKP87btEPenzrrHUjajs/8yzaqcXg=
github.com/cosiner/argv v0.1.0/go.mod h1:EusR6TucWKX+zFgtdUsKT2Cvg45K5rtpCcWz4hK06d8=
github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM=
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/derekparker/trie v0.0.0-20230829180723-39f4de51ef7d h1:hUWoLdw5kvo2xCsqlsIBMvWUc1QCSsCYD2J2+Fg6YoU=
github.com/derekparker/trie v0.0.0-20230829180723-39f4de51ef7d/go.mod h1:C7Es+DLenIpPc9J6IYw4jrK0h7S9bKj4DNl8+KxGEXU=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/dsnet/golib/unitconv v1.0.2 h1:45gXng3Op1vTrnX1PdM9Bla4mEpBFYA5aC8dlqacmwM= github.com/dsnet/golib/unitconv v1.0.2 h1:45gXng3Op1vTrnX1PdM9Bla4mEpBFYA5aC8dlqacmwM=
@ -37,6 +45,12 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
github.com/go-delve/delve v1.22.0 h1:c7GOFs49/jMGHdp10KphKkGqNmLjOp7fcwz1MQwcMlw=
github.com/go-delve/delve v1.22.0/go.mod h1:cSvtTzN0Ei8NsPH7TbxeQSLBmdsreeAD5p1UNhrII7w=
github.com/go-delve/gore v0.11.6 h1:MyP7xTNQO+dDiLBKxI/DKgkn74cMBjHZZxS8grtJ6G8=
github.com/go-delve/gore v0.11.6/go.mod h1:6RBVnEUxVGkztpRY0UDUnEzS4GqETQjWrw8rhegmN4I=
github.com/go-delve/liner v1.2.3-0.20220127212407-d32d89dd2a5d h1:pxjSLshkZJGLVm0wv20f/H0oTWiq/egkoJQ2ja6LEvo=
github.com/go-delve/liner v1.2.3-0.20220127212407-d32d89dd2a5d/go.mod h1:biJCRbqp51wS+I92HMqn5H8/A0PAhxn2vyOT+JqhiGI=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
@ -57,13 +71,19 @@ github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/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 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-dap v0.11.0 h1:SpAZJL41rOOvd85PuLCCLE1dteTQOyKNnn0H3DBHywo=
github.com/google/go-dap v0.11.0/go.mod h1:HAeyoSd2WIfTfg+0GRXcFrb+RnojAtGNh+k+XTIxJDE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/jhump/protoreflect v1.15.4 h1:mrwJhfQGGljwvR/jPEocli8KA6G9afbQpH8NY2wORcI= github.com/jhump/protoreflect v1.15.4 h1:mrwJhfQGGljwvR/jPEocli8KA6G9afbQpH8NY2wORcI=
github.com/jhump/protoreflect v1.15.4/go.mod h1:2B+zwrnMY3TTIqEK01OG/d3pyUycQBfDf+bx8fE2DNg= github.com/jhump/protoreflect v1.15.4/go.mod h1:2B+zwrnMY3TTIqEK01OG/d3pyUycQBfDf+bx8fE2DNg=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
@ -89,8 +109,16 @@ github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@ -114,7 +142,12 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/redis/go-redis/v9 v9.4.0 h1:Yzoz33UZw9I/mFhx4MNrB6Fk+XHO1VukNcCa1+lwyKk= github.com/redis/go-redis/v9 v9.4.0 h1:Yzoz33UZw9I/mFhx4MNrB6Fk+XHO1VukNcCa1+lwyKk=
github.com/redis/go-redis/v9 v9.4.0/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M= github.com/redis/go-redis/v9 v9.4.0/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
@ -127,6 +160,8 @@ github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI= github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI=
@ -157,6 +192,8 @@ go.etcd.io/etcd/client/pkg/v3 v3.5.11 h1:bT2xVspdiCj2910T0V+/KHcVKjkUrCZVtk8J2JF
go.etcd.io/etcd/client/pkg/v3 v3.5.11/go.mod h1:seTzl2d9APP8R5Y2hFL3NVlD6qC/dOT+3kvrqPyTas4= go.etcd.io/etcd/client/pkg/v3 v3.5.11/go.mod h1:seTzl2d9APP8R5Y2hFL3NVlD6qC/dOT+3kvrqPyTas4=
go.etcd.io/etcd/client/v3 v3.5.11 h1:ajWtgoNSZJ1gmS8k+icvPtqsqEav+iUorF7b0qozgUU= go.etcd.io/etcd/client/v3 v3.5.11 h1:ajWtgoNSZJ1gmS8k+icvPtqsqEav+iUorF7b0qozgUU=
go.etcd.io/etcd/client/v3 v3.5.11/go.mod h1:a6xQUEqFJ8vztO1agJh/KQKOMfFI8og52ZconzcDJwE= go.etcd.io/etcd/client/v3 v3.5.11/go.mod h1:a6xQUEqFJ8vztO1agJh/KQKOMfFI8og52ZconzcDJwE=
go.starlark.net v0.0.0-20231121155337-90ade8b19d09 h1:hzy3LFnSN8kuQK8h9tHl4ndF6UruMj47OqwqsS+/Ai4=
go.starlark.net v0.0.0-20231121155337-90ade8b19d09/go.mod h1:LcLNIzVOMp4oV+uusnpk+VU+SzXaJakUuBjoCSWH5dM=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
@ -170,6 +207,8 @@ go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k=
golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
golang.org/x/arch v0.7.0 h1:pskyeJh/3AmoQ8CPE95vxHLqp1G1GfGNXTmcl9NEKTc=
golang.org/x/arch v0.7.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@ -177,10 +216,14 @@ golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc=
golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g=
golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k=
golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 h1:hNQpMuAJe5CtcUqCXaWga3FHu+kQvCqcsoVaQgSV60o=
golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@ -201,8 +244,10 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
@ -240,6 +285,7 @@ gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

2
internal/gateway_ws/server/http_server.go

@ -31,7 +31,7 @@ func (s *HttpServer) Run(port int) error {
var ( var (
HandshakeTimeout = 3 * time.Second HandshakeTimeout = 3 * time.Second
ReadDeadline = 5 * time.Second ReadDeadline = 60 * time.Second
WriteDeadline = 5 * time.Second WriteDeadline = 5 * time.Second
// PongWait Time allowed to read the next pong message from the peer. // PongWait Time allowed to read the next pong message from the peer.
PongWait = 60 * time.Second PongWait = 60 * time.Second

40
internal/gateway_ws/server/ws_server.go

@ -2,8 +2,10 @@ package server
import ( import (
"context" "context"
"fmt"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"google.golang.org/protobuf/proto" "google.golang.org/protobuf/proto"
"regexp"
"runtime/debug" "runtime/debug"
"sonet/api/gen/auth" "sonet/api/gen/auth"
"sonet/internal/gateway_ws/session" "sonet/internal/gateway_ws/session"
@ -82,18 +84,20 @@ func (c *ConnHandler) handleConn(conn *websocket.Conn) {
logger.Errorf("decode message error: len=%d", len(message), err) logger.Errorf("decode message error: len=%d", len(message), err)
return return
} }
header := payload.Header
if client.Subject == nil && !(header.Svc == "Auth" && header.Target == "Verify") { header := payload.Header
service, method := header.Svc, header.Target
if client.Subject == nil && !(service == "Auth" && method == "Verify") {
writeError(client, header.SeqId, session2.UnauthorizedRequestError.Error()) writeError(client, header.SeqId, session2.UnauthorizedRequestError.Error())
continue continue
} }
// grpc generic call // grpc generic call
ctx := context.Background() ctx := context.Background()
grpcClient, err := c.grpcFactory.GetClient(ctx, header.Svc) grpcClient, err := c.grpcFactory.GetClient(ctx, service)
if err != nil { if err != nil {
logger.Error("get grpc generic client error: ", err) logger.Error("get grpc generic client error: ", err)
writeError(client, header.SeqId, fmt.Sprintf("service %s not avaliable: %s", header.Svc, err.Error()))
continue continue
} }
// put session // put session
@ -103,21 +107,26 @@ func (c *ConnHandler) handleConn(conn *websocket.Conn) {
resp, err := grpcClient.InvokeUnary(ctx, header.Target, payload.Body) resp, err := grpcClient.InvokeUnary(ctx, header.Target, payload.Body)
if err != nil { if err != nil {
// todo 提取 err: fmt.Sprintf("rpc error: code = %s desc = %s", s.Code(), s.Message()) // todo 提取 err: fmt.Sprintf("rpc error: code = %s desc = %s", s.Code(), s.Message())
writeError(client, header.SeqId, err.Error()) writeError(client, header.SeqId, unwrapRpcError(err.Error()))
logger.Error("grpc generic call error: ", err) logger.Error("grpc generic call error: ", err)
continue continue
} }
// write response // write response
payload.Body, err = resp.Marshal() if resp == nil { // proto.Empty
if err != nil { header.Target = ""
logger.Error("generic call response marshal error: ", err) } else {
writeError(client, header.SeqId, "server error") payload.Body, err = resp.Marshal()
continue if err != nil {
logger.Error("generic call response marshal error: ", err)
writeError(client, header.SeqId, "server error")
continue
}
header.Target = resp.XXX_MessageName()
} }
// auth verify success // auth verify success
if header.Svc == "Auth" && header.Target == "Verify" { if service == "Auth" && method == "Verify" {
err = c.extractAuthVerify(client, payload.Body) err = c.extractAuthVerify(client, payload.Body)
if err != nil { if err != nil {
logger.Error("extractAuthVerify error: ", err) logger.Error("extractAuthVerify error: ", err)
@ -127,7 +136,6 @@ func (c *ConnHandler) handleConn(conn *websocket.Conn) {
} }
header.Type = protocol.TypeResponse header.Type = protocol.TypeResponse
header.Target = resp.XXX_MessageName()
resMessage, err := protocol.EncodeSo(payload) resMessage, err := protocol.EncodeSo(payload)
if err != nil { if err != nil {
logger.Error("grpc generic call error: ", err) logger.Error("grpc generic call error: ", err)
@ -169,6 +177,16 @@ func (c *ConnHandler) extractAuthVerify(netClient *session.NetClient, resp []byt
return return
} }
var reg = regexp.MustCompile("^rpc error:.*?desc ?= ?(.*)$")
func unwrapRpcError(err string) string {
finds := reg.FindStringSubmatch(err)
if len(finds) > 1 {
return finds[1]
}
return err
}
func writeError(client *session.NetClient, seqId int32, errMsg string) { func writeError(client *session.NetClient, seqId int32, errMsg string) {
header := &protocol.Header{} header := &protocol.Header{}
payload := &protocol.Payload{Header: header} payload := &protocol.Payload{Header: header}

1
internal/mahjong/game/mj_player.go

@ -16,6 +16,7 @@ type MjPlayer struct {
PlayerId string `json:"playerId"` PlayerId string `json:"playerId"`
Username string `json:"username"` Username string `json:"username"`
Avatar string `json:"avatar"` Avatar string `json:"avatar"`
Direct int `json:"direct"`
Status int8 `json:"status"` // 1.未准备 2.已准备 3.赢 4.结算阶段 Status int8 `json:"status"` // 1.未准备 2.已准备 3.赢 4.结算阶段
TileLack int8 `json:"tileLack"` // 定缺: 0万 1条 2筒 TileLack int8 `json:"tileLack"` // 定缺: 0万 1条 2筒
Coin int64 `json:"coin"` Coin int64 `json:"coin"`

4
internal/mahjong/game/mj_table.go

@ -80,8 +80,8 @@ func (t *MjTable) GetEastPlayerIndex() int {
// EastPlayerSit 东玩家(为nil则顺时针最近玩家)索引位置 // EastPlayerSit 东玩家(为nil则顺时针最近玩家)索引位置
func (t *MjTable) EastPlayerSit() int { func (t *MjTable) EastPlayerSit() int {
for i, direct := range t.PlayerDirects { for i, direct := range t.PlayerDirects {
if direct == 0 { if direct == 0 { // 东
if t.Players[direct] != nil { if t.Players[i] != nil {
return i return i
} else { } else {
for j := 1; j < 4; j++ { for j := 1; j < 4; j++ {

4
internal/mahjong/helper/conver.go

@ -83,10 +83,10 @@ func mjPlayer2TfPlayer0(player *game.MjPlayer, curPlayerId string) *mahjong.MjPl
} }
// 碰杠 // 碰杠
for _, peng := range player.MjPeng { for _, peng := range player.MjPeng {
p.MjPeng = append(p.MjPeng, &mahjong.MjPlayer_Peng{Peng: SliceInt8To32(peng[:])}) p.MjPeng = append(p.MjPeng, &mahjong.MjPlayer_Peng{Tiles: SliceInt8To32(peng[:])})
} }
for _, gang := range player.MjGang { for _, gang := range player.MjGang {
p.MjGang = append(p.MjGang, &mahjong.MjPlayer_Gang{Gang: SliceInt8To32(gang[:])}) p.MjGang = append(p.MjGang, &mahjong.MjPlayer_Gang{Tiles: SliceInt8To32(gang[:])})
} }
if player.WinSettle != nil { if player.WinSettle != nil {
p.WinSettle = &mahjong.WinSettle{ p.WinSettle = &mahjong.WinSettle{

16
internal/mahjong/logic/mahjong_server.go

@ -203,7 +203,7 @@ func (mj *MahjongServer) JoinTable(ctx context.Context, req *mahjong.ReqJoinTabl
return return
} }
func (mj *MahjongServer) LeaveTable(ctx context.Context, _ *emptypb.Empty) (_ *emptypb.Empty, err error) { func (mj *MahjongServer) LeaveTable(ctx context.Context, _ *emptypb.Empty) (res *emptypb.Empty, err error) {
subject, err := session.GetSubject(ctx) subject, err := session.GetSubject(ctx)
if err != nil { if err != nil {
@ -253,10 +253,11 @@ func (mj *MahjongServer) LeaveTable(ctx context.Context, _ *emptypb.Empty) (_ *e
} }
} }
table.State2Broadcast() table.State2Broadcast()
//res = &emptypb.Empty{}
return return
} }
func (mj *MahjongServer) KickoutTable(ctx context.Context, req *mahjong.ReqKickoutTable) (_ *emptypb.Empty, err error) { func (mj *MahjongServer) KickoutTable(ctx context.Context, req *mahjong.ReqKickoutTable) (res *emptypb.Empty, err error) {
subject, err := session.GetSubject(ctx) subject, err := session.GetSubject(ctx)
if err != nil { if err != nil {
return return
@ -282,6 +283,7 @@ func (mj *MahjongServer) KickoutTable(ctx context.Context, req *mahjong.ReqKicko
return return
} }
table.State2Broadcast() table.State2Broadcast()
res = &emptypb.Empty{}
return return
} }
@ -337,7 +339,7 @@ func (mj *MahjongServer) CancelReady(ctx context.Context, _ *emptypb.Empty) (_ *
return return
} }
func (mj *MahjongServer) DismissTable(ctx context.Context, _ *emptypb.Empty) (_ *emptypb.Empty, err error) { func (mj *MahjongServer) DismissTable(ctx context.Context, _ *emptypb.Empty) (res *emptypb.Empty, err error) {
subject, err := session.GetSubject(ctx) subject, err := session.GetSubject(ctx)
if err != nil { if err != nil {
return return
@ -366,10 +368,11 @@ func (mj *MahjongServer) DismissTable(ctx context.Context, _ *emptypb.Empty) (_
mj.store.RemoveTable(table.TableId) mj.store.RemoveTable(table.TableId)
_, err = mj.deliver.DeliverBatch(ctx, &mahjong.NoticeDismissTable{}, receivers) _, err = mj.deliver.DeliverBatch(ctx, &mahjong.NoticeDismissTable{}, receivers)
res = &emptypb.Empty{}
return return
} }
func (mj *MahjongServer) GameStart(ctx context.Context, _ *emptypb.Empty) (_ *emptypb.Empty, err error) { func (mj *MahjongServer) GameStart(ctx context.Context, _ *emptypb.Empty) (res *emptypb.Empty, err error) {
subject, err := session.GetSubject(ctx) subject, err := session.GetSubject(ctx)
if err != nil { if err != nil {
return return
@ -439,11 +442,12 @@ func (mj *MahjongServer) GameStart(ctx context.Context, _ *emptypb.Empty) (_ *em
p.State2Assign(p.PlayerId) p.State2Assign(p.PlayerId)
} }
table.State2Broadcast() table.State2Broadcast()
res = &emptypb.Empty{}
return return
} }
func (mj *MahjongServer) PlayerAction(ctx context.Context, req *mahjong.ReqPlayerAction) (_ *emptypb.Empty, err error) { func (mj *MahjongServer) PlayerAction(ctx context.Context, req *mahjong.ReqPlayerAction) (res *emptypb.Empty, err error) {
res = &emptypb.Empty{}
subject, err := session.GetSubject(ctx) subject, err := session.GetSubject(ctx)
if err != nil { if err != nil {
return return

2
pkg/grpc/balancer/consistent_hash.go

@ -30,7 +30,7 @@ func newConsistentHashBuilder() balancer.Builder {
type consistentHashPickerBuilder struct{} type consistentHashPickerBuilder struct{}
func (b *consistentHashPickerBuilder) Build(buildInfo base.PickerBuildInfo) balancer.Picker { func (b *consistentHashPickerBuilder) Build(buildInfo base.PickerBuildInfo) balancer.Picker {
grpclog.Infof("consistentHashPicker: newPicker called with buildInfo: %v", buildInfo) // grpclog.Infof("consistentHashPicker: newPicker called with buildInfo: %v", buildInfo)
if len(buildInfo.ReadySCs) == 0 { if len(buildInfo.ReadySCs) == 0 {
return base.NewErrPicker(balancer.ErrNoSubConnAvailable) return base.NewErrPicker(balancer.ErrNoSubConnAvailable)
} }

33
pkg/grpc/discovery/etcd.go

@ -0,0 +1,33 @@
package discovery
import (
"context"
"fmt"
clientv3 "go.etcd.io/etcd/client/v3"
"go.etcd.io/etcd/client/v3/naming/endpoints"
)
func EtcdDialUrl(serviceName string) string {
return fmt.Sprintf("etcd:///%s", serviceName)
}
func EtcdRegistry(client *clientv3.Client, serviceName, addr string, attrs map[string]string) (err error) {
em, err := endpoints.NewManager(client, "Hello")
if err != nil {
return
}
ip, port, err := RegisterIpPort(addr)
if err != nil {
return
}
fmt.Println()
err = em.AddEndpoint(context.Background(),
fmt.Sprintf("%s/%s", serviceName, ip),
endpoints.Endpoint{
Addr: fmt.Sprintf("%s:%d", ip, port),
Metadata: attrs,
},
)
return
}

13
pkg/grpc/discovery/register.go

@ -16,12 +16,12 @@ import (
var DefaultRegisterTTL int64 = 30 var DefaultRegisterTTL int64 = 30
func RegisterAddress(addr string) (fullAddr string, err error) { func RegisterIpPort(addr string) (ip string, port int, err error) {
tcpAddr, err := net.ResolveTCPAddr("tcp", addr) tcpAddr, err := net.ResolveTCPAddr("tcp", addr)
if err != nil { if err != nil {
panic(err) return
} }
var ip string port = tcpAddr.Port
if tcpAddr.IP != nil { if tcpAddr.IP != nil {
ip = tcpAddr.IP.String() ip = tcpAddr.IP.String()
} else { } else {
@ -30,8 +30,11 @@ func RegisterAddress(addr string) (fullAddr string, err error) {
return return
} }
} }
return
fullAddr = fmt.Sprintf("%s:%d", ip, tcpAddr.Port) }
func RegisterAddress(addr string) (fullAddr string, err error) {
ip, port, err := RegisterIpPort(addr)
fullAddr = fmt.Sprintf("%s:%d", ip, port)
return return
} }

18
pkg/grpc/generic/generic_client.go

@ -14,6 +14,7 @@ import (
"sonet/pkg/grpc/generic/desc_source" "sonet/pkg/grpc/generic/desc_source"
"sonet/pkg/utils/logger" "sonet/pkg/utils/logger"
"sync" "sync"
"time"
) )
type GrpcGenericClient struct { type GrpcGenericClient struct {
@ -82,9 +83,6 @@ func (c *GrpcGenericClient) InvokeUnary(ctx context.Context, method string, reqB
return return
} }
} }
//else if empty, ok := reqMessage.(*emptypb.Empty); ok {
//
//}
return c.invokeUnary0(ctx, method, reqMessage, opts...) return c.invokeUnary0(ctx, method, reqMessage, opts...)
} }
@ -114,12 +112,22 @@ func (c *GrpcGenericClient) invokeUnary0(ctx context.Context, method string, req
if err != nil { if err != nil {
return return
} }
ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
defer cancel()
res, err := caller.Stub.InvokeRpc(ctx, caller.Mtd, request, opts...) res, err := caller.Stub.InvokeRpc(ctx, caller.Mtd, request, opts...)
if err != nil { if err != nil {
return return
} }
resp = res.(*dynamic.Message) if res == nil {
return
}
if r, ok := res.(*dynamic.Message); ok {
resp = r
return
}
//if _, ok := res.(*emptypb.Empty); ok {
// return
//}
return return
} }

7
pkg/grpc/interceptor/recover_interceptor.go

@ -5,6 +5,7 @@ import (
"errors" "errors"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/grpclog" "google.golang.org/grpc/grpclog"
"google.golang.org/protobuf/types/known/emptypb"
"runtime/debug" "runtime/debug"
) )
@ -23,6 +24,12 @@ func RecoverInterceptor(ctx context.Context, req any, _ *grpc.UnaryServerInfo, h
debug.PrintStack() debug.PrintStack()
} }
}() }()
resp, err = handler(ctx, req) resp, err = handler(ctx, req)
if err == nil {
if empty, ok := resp.(*emptypb.Empty); ok && empty == nil {
resp = &emptypb.Empty{} // grpc: error while marshaling: proto: Marshal called with nil
}
}
return return
} }

19
pkg/protocol/protocol.go

@ -90,16 +90,19 @@ func DecodeSo(bytes []byte) (payload *Payload, err error) {
func EncodeSo(payload *Payload) (bytes []byte, err error) { func EncodeSo(payload *Payload) (bytes []byte, err error) {
header := payload.Header header := payload.Header
headerLen := 16 headerLen, bodyLen := 8, 0
var svc, target []byte var svc, target []byte
var svcLen, targetLen, bodyLen int var svcLen, targetLen int
// 定位符为字符串,计算占用长度 // 定位符为字符串,计算占用长度
if header.Type != TypeError && header.UrlType == 1 { if header.Type != TypeError { // error头只8字节
svc = []byte(header.Svc) headerLen += 8
target = []byte(header.Target) if header.UrlType == 1 {
svcLen = len(svc) svc = []byte(header.Svc)
targetLen = len(target) target = []byte(header.Target)
headerLen += svcLen + targetLen svcLen = len(svc)
targetLen = len(target)
headerLen += svcLen + targetLen
}
} }
bodyLen = len(payload.Body) bodyLen = len(payload.Body)
bytes = make([]byte, headerLen+bodyLen) bytes = make([]byte, headerLen+bodyLen)

Loading…
Cancel
Save