Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 

99 Zeilen
1.9 KiB

  1. package gearman
  2. import (
  3. "os"
  4. )
  5. const (
  6. TCP = "tcp4"
  7. WORKER_SERVER_CAP = 32
  8. WORKER_FUNCTION_CAP = 512
  9. QUEUE_CAP = 512
  10. // \x00REQ
  11. REQ = 5391697
  12. // \x00RES
  13. RES = 5391699
  14. CAN_DO = 1
  15. CANT_DO = 2
  16. RESET_ABILITIES = 3
  17. PRE_SLEEP = 4
  18. NOOP = 6
  19. GRAB_JOB = 9
  20. NO_JOB = 10
  21. JOB_ASSIGN = 11
  22. WORK_STATUS = 12
  23. WORK_COMPLETE = 13
  24. WORK_FAIL = 14
  25. ECHO_REQ = 16
  26. ECHO_RES = 17
  27. ERROR = 19
  28. SET_CLIENT_ID = 22
  29. CAN_DO_TIMEOUT = 23
  30. WORK_EXCEPTION = 25
  31. WORK_DATA = 28
  32. WORK_WARNING = 29
  33. GRAB_JOB_UNIQ = 30
  34. JOB_ASSIGN_UNIQ = 31
  35. SUBMIT_JOB = 7
  36. SUBMIT_JOB_BG = 18
  37. SUBMIT_JOB_HIGH = 21
  38. SUBMIT_JOB_HIGH_BG = 32
  39. SUBMIT_JOB_LOW = 33
  40. SUBMIT_JOB_LOW_BG = 34
  41. JOB_NORMAL = 0
  42. JOB_BG = 1
  43. JOB_LOW = 2
  44. JOB_HIGH = 4
  45. )
  46. type Job interface {
  47. Encode() []byte
  48. }
  49. func splitByteArray(slice []byte, spot byte) (data [][]byte){
  50. data = make([][]byte, 0, 10)
  51. start, end := 0, 0
  52. for i, v := range slice {
  53. if v == spot {
  54. if start != end {
  55. data = append(data, slice[start:end])
  56. }
  57. start, end = i + 1, i + 1
  58. } else {
  59. end ++
  60. }
  61. }
  62. data = append(data, slice[start:])
  63. return
  64. }
  65. func getError(data []byte) (eno os.Errno, err os.Error) {
  66. rel := splitByteArray(data, '\x00')
  67. if len(rel) != 2 {
  68. err = os.NewError("The input is not a error data.")
  69. return
  70. }
  71. eno, err = rel[0], rel[1]
  72. return
  73. }
  74. func byteToUint32(buf [4]byte) uint32 {
  75. return uint32(buf[0]) << 24 +
  76. uint32(buf[1]) << 16 +
  77. uint32(buf[2]) << 8 +
  78. uint32(buf[3])
  79. }
  80. func uint32ToByte(i uint32) (data [4]byte) {
  81. data[0] = byte((i >> 24) & 0xff)
  82. data[1] = byte((i >> 16) & 0xff)
  83. data[2] = byte((i >> 8) & 0xff)
  84. data[3] = byte(i & 0xff)
  85. return
  86. }