"fmt"
"io"
"net"
+ "sync"
"github.com/dragonfireclient/mt/rudp"
)
*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()
return false
}
+ wg.Add(1)
go func() (err error) {
+ defer wg.Done()
// defer w.CloseWithError(err)
defer w.Close()
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()
}