mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-03-01 00:35:36 +08:00
gate兼容3.7
This commit is contained in:
4
Makefile
4
Makefile
@@ -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:
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user