reader_interface.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package uhf
  2. import (
  3. "errors"
  4. "wails-app/internal/dao"
  5. )
  6. // UHFReaderConn 统一的设备连接接口(适配多设备+消息收发)
  7. type UHFReaderConn interface {
  8. Connect() error // 建立连接
  9. Disconnect() error // 断开连接
  10. IsConnected() bool // 检查连接状态
  11. SendData(data []byte) error // 发送数据(仅发送,无返回)
  12. ReadData() ([]byte, error) // 读取数据(阻塞式)
  13. SendAndRecv(data []byte) ([]byte, error) // 发送并等待响应(一问一答)
  14. }
  15. // NewReaderConn 批量创建连接(多设备扩展)
  16. func NewReaderConn(device *dao.UHFReader) (UHFReaderConn, error) {
  17. switch device.ConnectType {
  18. case "tcp":
  19. return &TCPReader{
  20. IP: device.IPAddress,
  21. Port: device.Port,
  22. }, nil
  23. case "serial":
  24. return &SerialReader{
  25. COMPort: device.COMPort,
  26. BaudRate: device.BaudRate,
  27. }, nil
  28. default:
  29. return nil, errors.New("不支持的连接类型:" + device.ConnectType)
  30. }
  31. }
  32. // BatchConnect 批量连接设备(多设备初始化)
  33. func BatchConnect(devices []*dao.UHFReader) map[string]error {
  34. result := make(map[string]error)
  35. for _, device := range devices {
  36. conn, err := NewReaderConn(device)
  37. if err != nil {
  38. result[device.DeviceCode] = err
  39. continue
  40. }
  41. if err := conn.Connect(); err != nil {
  42. result[device.DeviceCode] = err
  43. continue
  44. }
  45. // 加入连接池
  46. ConnManager.AddConn(device.DeviceCode, conn)
  47. }
  48. return result
  49. }