gate兼容3.7

This commit is contained in:
UnKownOwO
2023-06-01 00:06:34 +08:00
parent 3efbad274d
commit 17dbf5aa8a
4 changed files with 31 additions and 8 deletions

View File

@@ -106,9 +106,9 @@ gen_proto:
gen_client_proto: gen_client_proto:
cd gate/client_proto && \ cd gate/client_proto && \
rm -rf client_proto_gen.go && \ rm -rf client_proto_gen.go && \
go test -count=1 -v -run TestClientProtoGen . && \
rm -rf proto/*.pb.go && \ rm -rf proto/*.pb.go && \
find proto -name '*.proto' | xargs -n 1000 protoc --proto_path=proto --go_out=proto && \ find proto -name '*.proto' | xargs -n 1000 protoc --proto_path=proto --go_out=proto
go test -count=1 -v -run TestClientProtoGen .
.PHONY: test .PHONY: test
test: test:

View File

@@ -79,7 +79,7 @@ func (c *ClientCmdProtoMap) GetClientProtoObjByName(protoObjName string) any {
} }
} }
`) `)
err = os.WriteFile("./client_proto_gen.go", []byte(fileDataBuffer.String()), 0644) err = os.WriteFile("./client_proto_gen.go", fileDataBuffer.Bytes(), 0644)
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@@ -5,6 +5,7 @@ import (
"context" "context"
"encoding/binary" "encoding/binary"
"strconv" "strconv"
"strings"
"sync" "sync"
"sync/atomic" "sync/atomic"
"time" "time"
@@ -96,7 +97,13 @@ func (k *KcpConnectManager) run() {
} }
regionEc2b := random.NewEc2b() regionEc2b := random.NewEc2b()
regionEc2b.SetSeed(ec2b.Seed()) regionEc2b.SetSeed(ec2b.Seed())
k.dispatchKey = regionEc2b.XorKey() // 3.7的时候修改了xor 首包无需使用加密密钥
if k.getGateMaxVersion() < 3.7 {
k.dispatchKey = regionEc2b.XorKey()
} else {
// 全部填充为0 不然会出问题
k.dispatchKey = make([]byte, 4096)
}
// kcp // kcp
port := strconv.Itoa(int(config.GetConfig().Hk4e.KcpPort)) port := strconv.Itoa(int(config.GetConfig().Hk4e.KcpPort))
listener, err := kcp.ListenWithOptions("0.0.0.0:" + port) listener, err := kcp.ListenWithOptions("0.0.0.0:" + port)
@@ -117,6 +124,22 @@ func (k *KcpConnectManager) Close() {
k.closeAllKcpConn() k.closeAllKcpConn()
} }
// getGateMaxVersion 获取gate最大可兼容的版本
func (k *KcpConnectManager) getGateMaxVersion() (maxVersion float64) {
versionSplit := strings.Split(config.GetConfig().Hk4e.Version, ",")
for _, verStr := range versionSplit {
version, err := strconv.ParseFloat(verStr, 64)
if err != nil {
logger.Error("version a to i error: %v", err)
return
}
if version > maxVersion {
maxVersion = version
}
}
return
}
func (k *KcpConnectManager) gateNetInfo() { func (k *KcpConnectManager) gateNetInfo() {
ticker := time.NewTicker(time.Second * 60) ticker := time.NewTicker(time.Second * 60)
kcpErrorCount := uint64(0) kcpErrorCount := uint64(0)
@@ -313,7 +336,7 @@ func (k *KcpConnectManager) recvHandle(session *Session) {
} }
recvData := recvBuf[:recvLen] recvData := recvBuf[:recvLen]
kcpMsgList := make([]*KcpMsg, 0) kcpMsgList := make([]*KcpMsg, 0)
DecodeBinToPayload(recvData, convId, &kcpMsgList, session.xorKey) DecodeBinToPayload(recvData, session, &kcpMsgList, session.xorKey)
for _, v := range kcpMsgList { for _, v := range kcpMsgList {
protoMsgList := ProtoDecode(v, k.serverCmdProtoMap, k.clientCmdProtoMap) protoMsgList := ProtoDecode(v, k.serverCmdProtoMap, k.clientCmdProtoMap)
for _, vv := range protoMsgList { for _, vv := range protoMsgList {

View File

@@ -2,7 +2,6 @@ package net
import ( import (
"encoding/binary" "encoding/binary"
"hk4e/pkg/endec" "hk4e/pkg/endec"
"hk4e/pkg/logger" "hk4e/pkg/logger"
) )
@@ -32,10 +31,11 @@ type KcpMsg struct {
ProtoData []byte ProtoData []byte
} }
func DecodeBinToPayload(data []byte, convId uint64, kcpMsgList *[]*KcpMsg, xorKey []byte) { func DecodeBinToPayload(data []byte, session *Session, kcpMsgList *[]*KcpMsg, xorKey []byte) {
// xor解密 // xor解密
endec.Xor(data, xorKey) endec.Xor(data, xorKey)
DecodeLoop(data, convId, kcpMsgList) DecodeLoop(data, session.conn.GetConv(), kcpMsgList)
return
} }
func DecodeLoop(data []byte, convId uint64, kcpMsgList *[]*KcpMsg) { func DecodeLoop(data []byte, convId uint64, kcpMsgList *[]*KcpMsg) {