Api.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package drviers
  2. type IDriver interface {
  3. Name() string
  4. Probe(name string, param interface{})
  5. CreateDevice(model interface{}, filterGwId string) (int, []IDevice)
  6. GetModel() interface{}
  7. GetDevice(id string) IDevice
  8. GetDeviceList() map[string]IDevice
  9. Uninstall()
  10. }
  11. type baseDriver struct {
  12. DrvName string
  13. DevList map[string]IDevice
  14. }
  15. func (drv *baseDriver) Name() string {
  16. return drv.DrvName
  17. }
  18. func (drv *baseDriver) Probe(name string, param interface{}) {
  19. drv.DrvName = name
  20. drv.DevList = make(map[string]IDevice)
  21. }
  22. func (drv *baseDriver) CreateDevice(model interface{}, filterGwId string) (int, []IDevice) {
  23. dev := make([]IDevice, len(drv.DevList))
  24. i := 0
  25. for _, v := range drv.DevList {
  26. dev[i] = v
  27. i++
  28. }
  29. return i, dev
  30. }
  31. func (drv *baseDriver) GetModel() interface{} {
  32. return nil
  33. }
  34. func (drv *baseDriver) GetDevice(id string) IDevice {
  35. if dev, has := drv.DevList[id]; has {
  36. return dev
  37. }
  38. return nil
  39. }
  40. func (drv *baseDriver) GetDeviceList() map[string]IDevice {
  41. return drv.DevList
  42. }
  43. func (drv *baseDriver) Uninstall() {
  44. for _, dev := range drv.DevList {
  45. dev.Close()
  46. }
  47. drv.DevList = nil
  48. }
  49. type funcRegDriver func(interface{}) IDriver
  50. var driverReg map[string]funcRegDriver
  51. var driverList map[string]IDriver
  52. func Shutdown() {
  53. for _, drv := range driverList {
  54. drv.Uninstall()
  55. }
  56. }
  57. func Install(name string, param interface{}) IDriver {
  58. if p, has := driverList[name]; has && p != nil {
  59. return p
  60. }
  61. if f, has := driverReg[name]; has && f != nil {
  62. drv := f(param)
  63. drv.Probe(name, param)
  64. return drv
  65. }
  66. return nil
  67. }
  68. func init() {
  69. driverList = make(map[string]IDriver)
  70. driverReg = make(map[string]funcRegDriver)
  71. }