mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-02-15 20:02:26 +08:00
完善机器人
This commit is contained in:
@@ -903,39 +903,33 @@ func DialWithOptions(raddr string) (*UDPSession, error) {
|
||||
network = "udp"
|
||||
}
|
||||
|
||||
conn, err := net.ListenUDP(network, nil)
|
||||
conn, err := net.DialUDP(network, nil, udpaddr)
|
||||
if err != nil {
|
||||
return nil, errors.WithStack(err)
|
||||
}
|
||||
|
||||
hsconn, err := net.DialUDP(network, nil, udpaddr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
enet := &Enet{
|
||||
Addr: raddr,
|
||||
Addr: udpaddr.String(),
|
||||
ConvId: 0,
|
||||
ConnType: ConnEnetSyn,
|
||||
EnetType: EnetClientConnectKey,
|
||||
}
|
||||
data := BuildEnet(enet.ConnType, enet.EnetType, enet.ConvId)
|
||||
_, err = hsconn.Write(data)
|
||||
_, err = conn.Write(data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.WithStack(err)
|
||||
}
|
||||
buf := make([]byte, mtuLimit)
|
||||
n, addr, err := hsconn.ReadFrom(buf)
|
||||
n, addr, err := conn.ReadFrom(buf)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, errors.WithStack(err)
|
||||
}
|
||||
if addr.String() != raddr {
|
||||
// TODO 本质是为了安全考虑 但是用域名连接会出现这种情况看之后找个方法解决一下
|
||||
// return nil, errors.New("recv packet remote addr not match")
|
||||
if addr.String() != udpaddr.String() {
|
||||
return nil, errors.WithStack(errors.New("recv packet remote addr not match"))
|
||||
}
|
||||
udpPayload := buf[:n]
|
||||
connType, enetType, conv, err := ParseEnet(udpPayload)
|
||||
if err != nil || connType != ConnEnetEst || enetType != EnetClientConnectKey {
|
||||
return nil, errors.New("recv packet format error")
|
||||
return nil, errors.WithStack(errors.New("recv packet format error"))
|
||||
}
|
||||
|
||||
return newUDPSession(conv, nil, conn, true, udpaddr), nil
|
||||
|
||||
@@ -150,6 +150,7 @@ func (k *KcpConnectManager) acceptHandle(listener *kcp.Listener) {
|
||||
}
|
||||
conn.SetACKNoDelay(true)
|
||||
conn.SetWriteDelay(false)
|
||||
conn.SetWindowSize(255, 255)
|
||||
atomic.AddInt32(&CLIENT_CONN_NUM, 1)
|
||||
logger.Info("client connect, convId: %v", convId)
|
||||
kcpRawSendChan := make(chan *ProtoMsg, 1000)
|
||||
|
||||
@@ -94,7 +94,13 @@ func EncodePayloadToBin(kcpMsg *KcpMsg, xorKey []byte) (bin []byte) {
|
||||
if kcpMsg.ProtoData == nil {
|
||||
kcpMsg.ProtoData = make([]byte, 0)
|
||||
}
|
||||
bin = make([]byte, len(kcpMsg.HeadData)+len(kcpMsg.ProtoData)+12)
|
||||
// 检查长度
|
||||
packetLen := len(kcpMsg.HeadData) + len(kcpMsg.ProtoData) + 12
|
||||
if packetLen > PacketMaxLen {
|
||||
logger.Error("packet len too long")
|
||||
return make([]byte, 0)
|
||||
}
|
||||
bin = make([]byte, packetLen)
|
||||
// 头部幻数
|
||||
bin[0] = 0x45
|
||||
bin[1] = 0x67
|
||||
|
||||
Reference in New Issue
Block a user