You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

42 lines
840 B

4 years ago
  1. package wdclient
  2. import (
  3. "github.com/chrislusf/seaweedfs/weed/pb"
  4. "github.com/pin/tftp"
  5. "io"
  6. )
  7. // VolumeTcpClient put/get/delete file chunks directly on volume servers without replication
  8. type VolumeUdpClient struct {
  9. udpClient *tftp.Client
  10. }
  11. func NewVolumeUdpClient() *VolumeUdpClient {
  12. return &VolumeUdpClient{
  13. }
  14. }
  15. func (c *VolumeUdpClient) PutFileChunk(volumeServerAddress string, fileId string, fileSize uint32, fileReader io.Reader) (err error) {
  16. udpAddress, parseErr := pb.ParseServerAddress(volumeServerAddress, 20001)
  17. if parseErr != nil {
  18. return parseErr
  19. }
  20. if c.udpClient == nil {
  21. c.udpClient, err = tftp.NewClient(udpAddress)
  22. if err != nil {
  23. return
  24. }
  25. }
  26. rf, err := c.udpClient.Send(fileId, "octet")
  27. if err != nil {
  28. return
  29. }
  30. _, err = rf.ReadFrom(fileReader)
  31. if err != nil {
  32. return
  33. }
  34. return
  35. }