Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

43 строки
874 B

  1. package client
  2. import (
  3. "encoding/binary"
  4. )
  5. // Request from client
  6. type request struct {
  7. DataType uint32
  8. Data []byte
  9. }
  10. // Encode a Request to byte slice
  11. func (req *request) Encode() (data []byte) {
  12. l := len(req.Data) // length of data
  13. tl := l + minPacketLength // add 12 bytes head
  14. data = getBuffer(tl)
  15. copy(data[:4], reqStr)
  16. binary.BigEndian.PutUint32(data[4:8], req.DataType)
  17. binary.BigEndian.PutUint32(data[8:12], uint32(l))
  18. copy(data[minPacketLength:], req.Data)
  19. return
  20. }
  21. func getRequest() (req *request) {
  22. // TODO add a pool
  23. req = &request{}
  24. return
  25. }
  26. func getJob(id string, funcname, data []byte) (req *request) {
  27. req = getRequest()
  28. a := len(funcname)
  29. b := len(id)
  30. c := len(data)
  31. l := a + b + c + 2
  32. req.Data = getBuffer(l)
  33. copy(req.Data[0:a], funcname)
  34. copy(req.Data[a+1:a+b+1], []byte(id))
  35. copy(req.Data[a+b+2:], data)
  36. return
  37. }