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

@@ -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 {
panic(err)
}

View File

@@ -5,6 +5,7 @@ import (
"context"
"encoding/binary"
"strconv"
"strings"
"sync"
"sync/atomic"
"time"
@@ -96,7 +97,13 @@ func (k *KcpConnectManager) run() {
}
regionEc2b := random.NewEc2b()
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
port := strconv.Itoa(int(config.GetConfig().Hk4e.KcpPort))
listener, err := kcp.ListenWithOptions("0.0.0.0:" + port)
@@ -117,6 +124,22 @@ func (k *KcpConnectManager) Close() {
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() {
ticker := time.NewTicker(time.Second * 60)
kcpErrorCount := uint64(0)
@@ -313,7 +336,7 @@ func (k *KcpConnectManager) recvHandle(session *Session) {
}
recvData := recvBuf[:recvLen]
kcpMsgList := make([]*KcpMsg, 0)
DecodeBinToPayload(recvData, convId, &kcpMsgList, session.xorKey)
DecodeBinToPayload(recvData, session, &kcpMsgList, session.xorKey)
for _, v := range kcpMsgList {
protoMsgList := ProtoDecode(v, k.serverCmdProtoMap, k.clientCmdProtoMap)
for _, vv := range protoMsgList {

View File

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