question.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package microservice
  2. import (
  3. "time"
  4. "git.ali33.ru/fcg-xvii/go-tools/json"
  5. )
  6. func NewQuestion(data json.Map, timeout time.Duration) *Question {
  7. if timeout == 0 {
  8. timeout = time.Minute
  9. }
  10. q := &Question{
  11. data: data,
  12. timeout: timeout,
  13. wAnswer: make(chan json.Map, 1),
  14. }
  15. return q
  16. }
  17. // Request
  18. type Question struct {
  19. id int64
  20. data json.Map
  21. socket *Socket
  22. created time.Time
  23. timeout time.Duration
  24. wAnswer chan json.Map
  25. }
  26. func (s *Question) IsActual(t time.Time) bool {
  27. return s.created.Add(s.timeout).After(t)
  28. }
  29. func (s *Question) WaitAnswer() <-chan json.Map {
  30. return s.wAnswer
  31. }
  32. func (s *Question) Type() RequestType {
  33. return RequestQuestion
  34. }
  35. func (s *Question) JSONMap() json.Map {
  36. return json.Map{
  37. "id": s.id,
  38. "type": RequestQuestion,
  39. "data": s.data,
  40. }
  41. }
  42. func (s *Question) Answer(data json.Map) {
  43. if s.timeout > 0 {
  44. s.timeout = time.Minute
  45. }
  46. m := json.Map{
  47. "id": s.id,
  48. "type": RequestAnswer,
  49. "data": data,
  50. }
  51. s.socket.sendMap(m)
  52. }
  53. func (s *Question) Data() json.Map {
  54. return s.data
  55. }