func()

in session.go [417:450]


func (s *session) WriteBytes(pkg []byte) (int, error) {
	if s.IsClosed() {
		return 0, ErrSessionClosed
	}

	leftPackageSize, totalSize, writeSize := len(pkg), len(pkg), 0
	if leftPackageSize > maxPacketLen {
		s.packetLock.Lock()
		defer s.packetLock.Unlock()
	} else {
		s.packetLock.RLock()
		defer s.packetLock.RUnlock()
	}

	for leftPackageSize > maxPacketLen {
		_, err := s.Connection.Send(pkg[writeSize:(writeSize + maxPacketLen)])
		if err != nil {
			return writeSize, perrors.Wrapf(err, "s.Connection.Write(pkg len:%d)", len(pkg))
		}
		leftPackageSize -= maxPacketLen
		writeSize += maxPacketLen
	}

	if leftPackageSize == 0 {
		return writeSize, nil
	}

	_, err := s.Connection.Send(pkg[writeSize:])
	if err != nil {
		return writeSize, perrors.Wrapf(err, "s.Connection.Write(pkg len:%d)", len(pkg))
	}

	return totalSize, nil
}