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.
 
 
 

48 lines
958 B

  1. package worker
  2. import (
  3. "encoding/binary"
  4. )
  5. // Worker side job
  6. type outPack struct {
  7. dataType uint32
  8. data []byte
  9. handle string
  10. }
  11. func getOutPack() (outpack *outPack) {
  12. // TODO pool
  13. return &outPack{}
  14. }
  15. // Encode a job to byte slice
  16. func (outpack *outPack) Encode() (data []byte) {
  17. var l int
  18. if outpack.dataType == dtWorkFail {
  19. l = len(outpack.handle)
  20. } else {
  21. l = len(outpack.data)
  22. if outpack.handle != "" {
  23. l += len(outpack.handle) + 1
  24. }
  25. }
  26. data = getBuffer(l + minPacketLength)
  27. binary.BigEndian.PutUint32(data[:4], req)
  28. binary.BigEndian.PutUint32(data[4:8], outpack.dataType)
  29. binary.BigEndian.PutUint32(data[8:minPacketLength], uint32(l))
  30. i := minPacketLength
  31. if outpack.handle != "" {
  32. hi := len(outpack.handle) + i
  33. copy(data[i:hi], []byte(outpack.handle))
  34. if outpack.dataType != dtWorkFail {
  35. data[hi] = '\x00'
  36. }
  37. i = hi + 1
  38. }
  39. if outpack.dataType != dtWorkFail {
  40. copy(data[i:], outpack.data)
  41. }
  42. return
  43. }