response.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package rest_websocket
  2. import (
  3. "log"
  4. "time"
  5. "git.ali33.ru/fcg-xvii/go-tools/json"
  6. "git.ali33.ru/fcg-xvii/rest"
  7. )
  8. /*
  9. type IResponse interface {
  10. IsError() bool
  11. KeySet(key string, val any)
  12. FileSet(name string, file IReadCloserLen)
  13. Close()
  14. Send(writer any) IErrorArgs
  15. }
  16. */
  17. type Response struct {
  18. mes *Message
  19. err rest.IErrorArgs
  20. data json.Map
  21. files map[string]rest.IReadCloserLen
  22. }
  23. func (s *Response) IsError() bool {
  24. return s.err != nil
  25. }
  26. func (s *Response) KeySet(key string, val any) {
  27. s.data[key] = val
  28. }
  29. func (s *Response) FileSet(name string, file rest.IReadCloserLen) {
  30. s.files[name] = file
  31. }
  32. func (s *Response) Close() {
  33. for _, file := range s.files {
  34. file.Close()
  35. }
  36. s.files = nil
  37. }
  38. func (s *Response) Send(writer any) rest.IErrorArgs {
  39. if s.IsError() {
  40. log.Println("ERRRRRRRRRRRRRRRRRRR")
  41. s.Close()
  42. s.data = s.err.Map()
  43. s.data["error"] = true
  44. }
  45. mes := &Message{
  46. id: s.mes.id,
  47. command: s.mes.command,
  48. mType: rest.RequestTypeAnswer,
  49. timeout: time.Now(),
  50. data: s.data,
  51. files: s.files,
  52. }
  53. log.Println("AAA", mes)
  54. err := s.mes.owner.sendMessage(mes)
  55. mes.Close()
  56. return err
  57. }