diff options
author | Lizzy Fleckenstein <eliasfleckenstein@web.de> | 2023-02-12 20:08:52 +0100 |
---|---|---|
committer | Lizzy Fleckenstein <eliasfleckenstein@web.de> | 2023-02-12 20:08:52 +0100 |
commit | 7d9e314903cba08b8a3a30533dab51ad25fd5cac (patch) | |
tree | 4035fa2de1261db1e0880064bc58072c539582cb /proto.go | |
parent | e1bfd543b068fd64d7e12f6ea4f5a8a013085f74 (diff) | |
download | mt-7d9e314903cba08b8a3a30533dab51ad25fd5cac.tar.xz |
Diffstat (limited to 'proto.go')
-rw-r--r-- | proto.go | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -4,6 +4,7 @@ import ( "fmt" "io" "net" + "sync" "github.com/dragonfireclient/mt/rudp" ) @@ -19,7 +20,7 @@ type Peer struct { *rudp.Conn } -func SerializePkt(pkt Cmd, w io.WriteCloser, toSrv bool) bool { +func SerializePkt(pkt Cmd, w io.WriteCloser, toSrv bool, wg *sync.WaitGroup) bool { var cmdNo uint16 if toSrv { cmdNo = pkt.(ToSrvCmd).toSrvCmdNo() @@ -31,7 +32,9 @@ func SerializePkt(pkt Cmd, w io.WriteCloser, toSrv bool) bool { return false } + wg.Add(1) go func() (err error) { + defer wg.Done() // defer w.CloseWithError(err) defer w.Close() @@ -48,7 +51,7 @@ func SerializePkt(pkt Cmd, w io.WriteCloser, toSrv bool) bool { func (p Peer) Send(pkt Pkt) (ack <-chan struct{}, err error) { r, w := io.Pipe() - if !SerializePkt(pkt.Cmd, w, p.IsSrv()) { + if !SerializePkt(pkt.Cmd, w, p.IsSrv(), &sync.WaitGroup{}) { return nil, p.Close() } |