From 7d3aa3968e52fda661265f0eeff303a8f34c3850 Mon Sep 17 00:00:00 2001 From: tangmingyou <234767776@qq.com> Date: Sat, 13 Jan 2024 23:58:06 +0800 Subject: [PATCH] deploy k8s --- api/mahjong.proto | 7 +- cmd/gateway_ws/config.toml | 6 +- cmd/mahjong/main.go | 4 +- deploy_k8s/auth.yaml | 23 +++ deploy_k8s/chat.yaml | 23 +++ deploy_k8s/etcd.yaml | 33 +++++ deploy_k8s/gateway_http.yaml | 39 ++++++ deploy_k8s/gateway_ws.yaml | 146 ++++++++++++++++++++ deploy_k8s/mahjong.yaml | 23 +++ deploy_k8s/nats.yaml | 32 +++++ deploy_k8s/redis.yaml | 28 ++++ go.mod | 26 +++- go.sum | 46 ++++++ internal/gateway_ws/server/http_server.go | 2 +- internal/gateway_ws/server/ws_server.go | 40 ++++-- internal/mahjong/game/mj_player.go | 1 + internal/mahjong/game/mj_table.go | 4 +- internal/mahjong/helper/conver.go | 4 +- internal/mahjong/logic/mahjong_server.go | 16 ++- pkg/grpc/balancer/consistent_hash.go | 2 +- pkg/grpc/discovery/etcd.go | 33 +++++ pkg/grpc/discovery/register.go | 13 +- pkg/grpc/generic/generic_client.go | 18 ++- pkg/grpc/interceptor/recover_interceptor.go | 7 + pkg/protocol/protocol.go | 19 +-- 25 files changed, 542 insertions(+), 53 deletions(-) create mode 100644 deploy_k8s/auth.yaml create mode 100644 deploy_k8s/chat.yaml create mode 100644 deploy_k8s/etcd.yaml create mode 100644 deploy_k8s/gateway_http.yaml create mode 100644 deploy_k8s/gateway_ws.yaml create mode 100644 deploy_k8s/mahjong.yaml create mode 100644 deploy_k8s/nats.yaml create mode 100644 deploy_k8s/redis.yaml create mode 100644 pkg/grpc/discovery/etcd.go diff --git a/api/mahjong.proto b/api/mahjong.proto index cd35d46..fc05f4b 100644 --- a/api/mahjong.proto +++ b/api/mahjong.proto @@ -69,6 +69,7 @@ message WinSettle { message MjPlayer { string playerId = 1; + int32 direct = 14; // 0东1南2西3北 string username = 2; string avatar = 3; int32 status = 4; @@ -78,11 +79,11 @@ message MjPlayer { repeated int32 mjHand = 8; // 手牌 int32 mjDraw = 9; // 摸牌 message Peng { - repeated int32 peng = 1; + repeated int32 tiles = 1; } - repeated Peng mjPeng = 10; // 碰 + repeated Peng mjPeng = 10; // 碰 message Gang { - repeated int32 gang = 1; + repeated int32 tiles = 1; } repeated Gang mjGang = 11; // 杠 repeated int32 opts = 12; // 可操作列表 diff --git a/cmd/gateway_ws/config.toml b/cmd/gateway_ws/config.toml index 462af5f..f8509b2 100644 --- a/cmd/gateway_ws/config.toml +++ b/cmd/gateway_ws/config.toml @@ -1,12 +1,12 @@ [app] -httpPort = 7002 -endpointAddress = "127.0.0.1:7002" +httpPort = 7001 +endpointAddress = "127.0.0.1:7001" subjectCacheTopic = "wsgate:subject:" subjectLrcExpiration = "10m" subjectLrcCleanupInterval = "5m" [grpc] -address = ":7012" +address = ":7011" maxSendMsgSize = "8Mi" maxRecvMsgSize = "8Mi" readBufferSize = "8Ki" diff --git a/cmd/mahjong/main.go b/cmd/mahjong/main.go index 7ca8e90..0f2ccb0 100644 --- a/cmd/mahjong/main.go +++ b/cmd/mahjong/main.go @@ -6,7 +6,7 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" "sonet/api/gen/auth" - "sonet/api/gen/chat" + "sonet/api/gen/mahjong" "sonet/internal/mahjong/logic" "sonet/internal/mahjong/store" "sonet/pkg/config" @@ -29,7 +29,7 @@ func main() { // init deliver 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 { panic(err) } diff --git a/deploy_k8s/auth.yaml b/deploy_k8s/auth.yaml new file mode 100644 index 0000000..7e0262a --- /dev/null +++ b/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 diff --git a/deploy_k8s/chat.yaml b/deploy_k8s/chat.yaml new file mode 100644 index 0000000..ed642e1 --- /dev/null +++ b/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 diff --git a/deploy_k8s/etcd.yaml b/deploy_k8s/etcd.yaml new file mode 100644 index 0000000..56a95eb --- /dev/null +++ b/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 diff --git a/deploy_k8s/gateway_http.yaml b/deploy_k8s/gateway_http.yaml new file mode 100644 index 0000000..6458ef8 --- /dev/null +++ b/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 diff --git a/deploy_k8s/gateway_ws.yaml b/deploy_k8s/gateway_ws.yaml new file mode 100644 index 0000000..0b7ec5c --- /dev/null +++ b/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 diff --git a/deploy_k8s/mahjong.yaml b/deploy_k8s/mahjong.yaml new file mode 100644 index 0000000..bd7e510 --- /dev/null +++ b/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 diff --git a/deploy_k8s/nats.yaml b/deploy_k8s/nats.yaml new file mode 100644 index 0000000..9db0afb --- /dev/null +++ b/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 diff --git a/deploy_k8s/redis.yaml b/deploy_k8s/redis.yaml new file mode 100644 index 0000000..73cce09 --- /dev/null +++ b/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 diff --git a/go.mod b/go.mod index b129c00..60f3989 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,7 @@ require ( github.com/redis/go-redis/v9 v9.4.0 github.com/sirupsen/logrus v1.9.3 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 google.golang.org/grpc v1.60.1 google.golang.org/protobuf v1.32.0 @@ -27,19 +28,29 @@ require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // 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-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/fsnotify/fsnotify v1.7.0 // indirect github.com/gabriel-vasile/mimetype v1.4.2 // 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/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.14.0 // indirect github.com/go-sql-driver/mysql v1.7.0 // indirect github.com/goccy/go-json v0.10.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/inconshreveable/mousetrap v1.1.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // 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/leodido/go-urn v1.2.4 // 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/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/nats-io/nkeys v0.4.7 // indirect github.com/nats-io/nuid v1.0.1 // 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/slog-shim v0.1.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.11.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/subosito/gotenv v1.6.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // 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.starlark.net v0.0.0-20231121155337-90ade8b19d09 // indirect go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.9.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/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/sync v0.5.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/rpc v0.0.0-20231120223509-83a465c0220f // 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 ) diff --git a/go.sum b/go.sum index 41ac8e6..9c66e6c 100644 --- a/go.sum +++ b/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.1 h1:tUHQJXo3NhBqw6s33wkGn9SP3bvrWLdlVIJ3hQBL7P0= 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/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/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.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= 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-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= 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/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= 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.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 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/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= 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/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/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/go.mod h1:2B+zwrnMY3TTIqEK01OG/d3pyUycQBfDf+bx8fE2DNg= 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/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= 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/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/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= 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/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/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/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/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= 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/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= 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/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= 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/v3 v3.5.11 h1:ajWtgoNSZJ1gmS8k+icvPtqsqEav+iUorF7b0qozgUU= 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.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= 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.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= 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-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 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/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-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/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.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-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 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-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-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-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.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= 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/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/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-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/internal/gateway_ws/server/http_server.go b/internal/gateway_ws/server/http_server.go index e93224e..c0e54d5 100644 --- a/internal/gateway_ws/server/http_server.go +++ b/internal/gateway_ws/server/http_server.go @@ -31,7 +31,7 @@ func (s *HttpServer) Run(port int) error { var ( HandshakeTimeout = 3 * time.Second - ReadDeadline = 5 * time.Second + ReadDeadline = 60 * time.Second WriteDeadline = 5 * time.Second // PongWait Time allowed to read the next pong message from the peer. PongWait = 60 * time.Second diff --git a/internal/gateway_ws/server/ws_server.go b/internal/gateway_ws/server/ws_server.go index 2287b17..a466672 100644 --- a/internal/gateway_ws/server/ws_server.go +++ b/internal/gateway_ws/server/ws_server.go @@ -2,8 +2,10 @@ package server import ( "context" + "fmt" "github.com/gorilla/websocket" "google.golang.org/protobuf/proto" + "regexp" "runtime/debug" "sonet/api/gen/auth" "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) 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()) continue } // grpc generic call ctx := context.Background() - grpcClient, err := c.grpcFactory.GetClient(ctx, header.Svc) + grpcClient, err := c.grpcFactory.GetClient(ctx, service) if err != nil { logger.Error("get grpc generic client error: ", err) + writeError(client, header.SeqId, fmt.Sprintf("service %s not avaliable: %s", header.Svc, err.Error())) continue } // put session @@ -103,21 +107,26 @@ func (c *ConnHandler) handleConn(conn *websocket.Conn) { resp, err := grpcClient.InvokeUnary(ctx, header.Target, payload.Body) if err != nil { // 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) continue } // write response - payload.Body, err = resp.Marshal() - if err != nil { - logger.Error("generic call response marshal error: ", err) - writeError(client, header.SeqId, "server error") - continue + if resp == nil { // proto.Empty + header.Target = "" + } else { + payload.Body, err = resp.Marshal() + 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 - if header.Svc == "Auth" && header.Target == "Verify" { + if service == "Auth" && method == "Verify" { err = c.extractAuthVerify(client, payload.Body) if err != nil { logger.Error("extractAuthVerify error: ", err) @@ -127,7 +136,6 @@ func (c *ConnHandler) handleConn(conn *websocket.Conn) { } header.Type = protocol.TypeResponse - header.Target = resp.XXX_MessageName() resMessage, err := protocol.EncodeSo(payload) if err != nil { logger.Error("grpc generic call error: ", err) @@ -169,6 +177,16 @@ func (c *ConnHandler) extractAuthVerify(netClient *session.NetClient, resp []byt 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) { header := &protocol.Header{} payload := &protocol.Payload{Header: header} diff --git a/internal/mahjong/game/mj_player.go b/internal/mahjong/game/mj_player.go index 1646ae8..1a2d613 100644 --- a/internal/mahjong/game/mj_player.go +++ b/internal/mahjong/game/mj_player.go @@ -16,6 +16,7 @@ type MjPlayer struct { PlayerId string `json:"playerId"` Username string `json:"username"` Avatar string `json:"avatar"` + Direct int `json:"direct"` Status int8 `json:"status"` // 1.未准备 2.已准备 3.赢 4.结算阶段 TileLack int8 `json:"tileLack"` // 定缺: 0万 1条 2筒 Coin int64 `json:"coin"` diff --git a/internal/mahjong/game/mj_table.go b/internal/mahjong/game/mj_table.go index 538f140..fa61cc2 100644 --- a/internal/mahjong/game/mj_table.go +++ b/internal/mahjong/game/mj_table.go @@ -80,8 +80,8 @@ func (t *MjTable) GetEastPlayerIndex() int { // EastPlayerSit 东玩家(为nil则顺时针最近玩家)索引位置 func (t *MjTable) EastPlayerSit() int { for i, direct := range t.PlayerDirects { - if direct == 0 { - if t.Players[direct] != nil { + if direct == 0 { // 东 + if t.Players[i] != nil { return i } else { for j := 1; j < 4; j++ { diff --git a/internal/mahjong/helper/conver.go b/internal/mahjong/helper/conver.go index d827970..b995365 100644 --- a/internal/mahjong/helper/conver.go +++ b/internal/mahjong/helper/conver.go @@ -83,10 +83,10 @@ func mjPlayer2TfPlayer0(player *game.MjPlayer, curPlayerId string) *mahjong.MjPl } // 碰杠 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 { - 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 { p.WinSettle = &mahjong.WinSettle{ diff --git a/internal/mahjong/logic/mahjong_server.go b/internal/mahjong/logic/mahjong_server.go index c16947a..67859e8 100644 --- a/internal/mahjong/logic/mahjong_server.go +++ b/internal/mahjong/logic/mahjong_server.go @@ -203,7 +203,7 @@ func (mj *MahjongServer) JoinTable(ctx context.Context, req *mahjong.ReqJoinTabl 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) if err != nil { @@ -253,10 +253,11 @@ func (mj *MahjongServer) LeaveTable(ctx context.Context, _ *emptypb.Empty) (_ *e } } table.State2Broadcast() + //res = &emptypb.Empty{} 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) if err != nil { return @@ -282,6 +283,7 @@ func (mj *MahjongServer) KickoutTable(ctx context.Context, req *mahjong.ReqKicko return } table.State2Broadcast() + res = &emptypb.Empty{} return } @@ -337,7 +339,7 @@ func (mj *MahjongServer) CancelReady(ctx context.Context, _ *emptypb.Empty) (_ * 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) if err != nil { return @@ -366,10 +368,11 @@ func (mj *MahjongServer) DismissTable(ctx context.Context, _ *emptypb.Empty) (_ mj.store.RemoveTable(table.TableId) _, err = mj.deliver.DeliverBatch(ctx, &mahjong.NoticeDismissTable{}, receivers) + res = &emptypb.Empty{} 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) if err != nil { return @@ -439,11 +442,12 @@ func (mj *MahjongServer) GameStart(ctx context.Context, _ *emptypb.Empty) (_ *em p.State2Assign(p.PlayerId) } table.State2Broadcast() + res = &emptypb.Empty{} 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) if err != nil { return diff --git a/pkg/grpc/balancer/consistent_hash.go b/pkg/grpc/balancer/consistent_hash.go index 28a939d..478daf9 100644 --- a/pkg/grpc/balancer/consistent_hash.go +++ b/pkg/grpc/balancer/consistent_hash.go @@ -30,7 +30,7 @@ func newConsistentHashBuilder() balancer.Builder { type consistentHashPickerBuilder struct{} 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 { return base.NewErrPicker(balancer.ErrNoSubConnAvailable) } diff --git a/pkg/grpc/discovery/etcd.go b/pkg/grpc/discovery/etcd.go new file mode 100644 index 0000000..ae33e26 --- /dev/null +++ b/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 +} diff --git a/pkg/grpc/discovery/register.go b/pkg/grpc/discovery/register.go index cc07778..6eefa55 100644 --- a/pkg/grpc/discovery/register.go +++ b/pkg/grpc/discovery/register.go @@ -16,12 +16,12 @@ import ( 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) if err != nil { - panic(err) + return } - var ip string + port = tcpAddr.Port if tcpAddr.IP != nil { ip = tcpAddr.IP.String() } else { @@ -30,8 +30,11 @@ func RegisterAddress(addr string) (fullAddr string, err error) { return } } - - fullAddr = fmt.Sprintf("%s:%d", ip, tcpAddr.Port) + return +} +func RegisterAddress(addr string) (fullAddr string, err error) { + ip, port, err := RegisterIpPort(addr) + fullAddr = fmt.Sprintf("%s:%d", ip, port) return } diff --git a/pkg/grpc/generic/generic_client.go b/pkg/grpc/generic/generic_client.go index 2038109..d541fe2 100644 --- a/pkg/grpc/generic/generic_client.go +++ b/pkg/grpc/generic/generic_client.go @@ -14,6 +14,7 @@ import ( "sonet/pkg/grpc/generic/desc_source" "sonet/pkg/utils/logger" "sync" + "time" ) type GrpcGenericClient struct { @@ -82,9 +83,6 @@ func (c *GrpcGenericClient) InvokeUnary(ctx context.Context, method string, reqB return } } - //else if empty, ok := reqMessage.(*emptypb.Empty); ok { - // - //} return c.invokeUnary0(ctx, method, reqMessage, opts...) } @@ -114,12 +112,22 @@ func (c *GrpcGenericClient) invokeUnary0(ctx context.Context, method string, req if err != nil { return } - + ctx, cancel := context.WithTimeout(ctx, 10*time.Second) + defer cancel() res, err := caller.Stub.InvokeRpc(ctx, caller.Mtd, request, opts...) if err != nil { 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 } diff --git a/pkg/grpc/interceptor/recover_interceptor.go b/pkg/grpc/interceptor/recover_interceptor.go index 844d01e..f34c777 100644 --- a/pkg/grpc/interceptor/recover_interceptor.go +++ b/pkg/grpc/interceptor/recover_interceptor.go @@ -5,6 +5,7 @@ import ( "errors" "google.golang.org/grpc" "google.golang.org/grpc/grpclog" + "google.golang.org/protobuf/types/known/emptypb" "runtime/debug" ) @@ -23,6 +24,12 @@ func RecoverInterceptor(ctx context.Context, req any, _ *grpc.UnaryServerInfo, h debug.PrintStack() } }() + 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 } diff --git a/pkg/protocol/protocol.go b/pkg/protocol/protocol.go index ca5e1e6..cd93d2d 100644 --- a/pkg/protocol/protocol.go +++ b/pkg/protocol/protocol.go @@ -90,16 +90,19 @@ func DecodeSo(bytes []byte) (payload *Payload, err error) { func EncodeSo(payload *Payload) (bytes []byte, err error) { header := payload.Header - headerLen := 16 + headerLen, bodyLen := 8, 0 var svc, target []byte - var svcLen, targetLen, bodyLen int + var svcLen, targetLen int // 定位符为字符串,计算占用长度 - if header.Type != TypeError && header.UrlType == 1 { - svc = []byte(header.Svc) - target = []byte(header.Target) - svcLen = len(svc) - targetLen = len(target) - headerLen += svcLen + targetLen + if header.Type != TypeError { // error头只8字节 + headerLen += 8 + if header.UrlType == 1 { + svc = []byte(header.Svc) + target = []byte(header.Target) + svcLen = len(svc) + targetLen = len(target) + headerLen += svcLen + targetLen + } } bodyLen = len(payload.Body) bytes = make([]byte, headerLen+bodyLen)