diff --git a/process.go b/process.go index 5208c97..401d3cb 100644 --- a/process.go +++ b/process.go @@ -13,6 +13,15 @@ import ( func (cc *ClientConn) process(pkt mt.Pkt) { srv := cc.server() + forward := func(pkt mt.Pkt) { + if srv == nil { + cc.Log("->", "no server") + return + } + + srv.Send(pkt) + } + switch cmd := pkt.Cmd.(type) { case *mt.ToSrvNil: return @@ -23,8 +32,8 @@ func (cc *ClientConn) process(pkt mt.Pkt) { } cc.setState(csInit) - if cmd.SerializeVer != latestSerializeVer { - cc.Log("<-", "invalid serializeVer") + if cmd.SerializeVer <= latestSerializeVer { + cc.Log("<-", "invalid serializeVer", cmd.SerializeVer) ack, _ := cc.SendCmd(&mt.ToCltKick{Reason: mt.UnsupportedVer}) select { @@ -36,8 +45,8 @@ func (cc *ClientConn) process(pkt mt.Pkt) { return } - if cmd.MaxProtoVer < latestProtoVer { - cc.Log("<-", "invalid protoVer") + if cmd.MaxProtoVer <= latestProtoVer { + cc.Log("<-", "invalid protoVer", cmd.MaxProtoVer) ack, _ := cc.SendCmd(&mt.ToCltKick{Reason: mt.UnsupportedVer}) select { @@ -432,22 +441,19 @@ func (cc *ClientConn) process(pkt mt.Pkt) { srv.swapAOID(&cmd.Pointed.(*mt.PointedAO).ID) } case *mt.ToSrvChatMsg: - result, isCmd := onChatMsg(cc, cmd) - if !isCmd { - break - } else if result != "" { - cc.SendChatMsg(result) - } - - return - } + go func() { + result, isCmd := onChatMsg(cc, cmd) + if !isCmd { + forward(pkt) + } else if result != "" { + cc.SendChatMsg(result) + } + }() - if srv == nil { - cc.Log("->", "no server") return } - srv.Send(pkt) + forward(pkt) } func (sc *ServerConn) process(pkt mt.Pkt) { diff --git a/proxy.go b/proxy.go index 1375e1d..e9ad2c4 100644 --- a/proxy.go +++ b/proxy.go @@ -16,7 +16,7 @@ import ( const ( latestSerializeVer = 28 latestProtoVer = 39 - versionString = "5.5.0-dev-83a7b48bb" + versionString = "5.4.1-dev-b2596eda3" maxPlayerNameLen = 20 bytesPerMediaBunch = 5000 )