handlerManager.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package iot
  2. import (
  3. "encoding/json"
  4. "log"
  5. "net/http"
  6. )
  7. /*
  8. IoT Handler Manager
  9. Author: tobychui
  10. This manager mange all the existsing / registered ioT Manager.
  11. This allow a much more abstract usage in the main code
  12. */
  13. type Manager struct {
  14. RegisteredHandler []ProtocolHandler
  15. }
  16. func NewIoTManager() *Manager {
  17. return &Manager{
  18. RegisteredHandler: []ProtocolHandler{},
  19. }
  20. }
  21. //Register the handler as one of the IoT Protocol Handler.
  22. func (m *Manager) RegisterHandler(h ProtocolHandler) error {
  23. //Try to start the handler
  24. err := h.Start()
  25. if err != nil {
  26. //Handler startup failed
  27. log.Println("*IoT* Protocol Handler Startup Failed: ", err.Error())
  28. return err
  29. }
  30. //Add it to the handlers
  31. m.RegisteredHandler = append(m.RegisteredHandler, h)
  32. return nil
  33. }
  34. //Handle listing of all avaible scanner and its stats
  35. func (m *Manager) HandleScannerList(w http.ResponseWriter, r *http.Request) {
  36. stats := []Stats{}
  37. for _, scanner := range m.RegisteredHandler {
  38. thisScannerStat := scanner.Stats()
  39. stats = append(stats, thisScannerStat)
  40. }
  41. js, _ := json.Marshal(stats)
  42. sendJSONResponse(w, string(js))
  43. }
  44. //Handle IoT Scanning Request
  45. func (m *Manager) HandleScanning(w http.ResponseWriter, r *http.Request) {
  46. scannedDevices := []*Device{}
  47. for _, ph := range m.RegisteredHandler {
  48. //Scan devices using this handler
  49. thisProtcolDeviceList, err := ph.Scan()
  50. if err != nil {
  51. continue
  52. }
  53. //Append it to list
  54. for _, dev := range thisProtcolDeviceList {
  55. scannedDevices = append(scannedDevices, dev)
  56. }
  57. }
  58. js, _ := json.Marshal(scannedDevices)
  59. sendJSONResponse(w, string(js))
  60. }
  61. //Handle IoT Listing Request
  62. func (m *Manager) HandleListing(w http.ResponseWriter, r *http.Request) {
  63. listedDevices := []*Device{}
  64. for _, ph := range m.RegisteredHandler {
  65. //Scan devices using this handler
  66. thisProtcolDeviceList, err := ph.List()
  67. if err != nil {
  68. continue
  69. }
  70. //Append it to list
  71. for _, dev := range thisProtcolDeviceList {
  72. listedDevices = append(listedDevices, dev)
  73. }
  74. }
  75. js, _ := json.Marshal(listedDevices)
  76. sendJSONResponse(w, string(js))
  77. }