Guest User

Untitled

a guest
Dec 10th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. private let queue = DispatchQueue(label: "gcdwebserver_queue")
  2.  
  3. private func setupServer(){
  4.  
  5. webServer.delegate = self
  6. webServer.addDefaultHandler(forMethod: "GET", request: GCDWebServerRequest.self) { (req, completion) in
  7.  
  8. if let resp = self.response(for: req) {
  9. return completion(resp)
  10. }
  11. }
  12.  
  13. queue.async {
  14. self.webServer.start(withPort: 8521, bonjourName: "GCD Web Server")
  15. }
  16.  
  17. }
  18.  
  19. private let modbusQueue = DispatchQueue(label: "modbus_queue")
  20. private func initiateTimer() {
  21. polling()
  22.  
  23. timer?.invalidate()
  24. if #available(OSX 10.12, *) {
  25. timer = Timer.scheduledTimer(withTimeInterval: pollingInterval, repeats: true) { (_) in
  26. self.polling()
  27. }
  28. } else {
  29. timer = Timer.scheduledTimer(timeInterval: pollingInterval, target: self, selector: #selector(polling), userInfo: nil, repeats: true)
  30. }
  31. }
  32.  
  33. @objc private func polling() {
  34.  
  35. for device in self.devices {
  36.  
  37. if !device.isInProcess && device.isEnabled {
  38. self.modbusQueue.async {
  39. self.connectAndReadValues(device: device)
  40. }
  41. }
  42.  
  43. }
  44. }
  45.  
  46. private func connectAndReadValues(device: Device) {
  47.  
  48. device.isInProcess = true
  49.  
  50. let connect = device.modbus.connect()
  51. //handling connection status
  52. //...
  53.  
  54. readValues(forDevice: device)
  55. }
  56.  
  57. private func readValues(forDevice device: Device){
  58. //some constants
  59.  
  60. do {
  61.  
  62. let registers = try device.modbus.readRegisters(from: startAddress, count: registersCount)
  63. device.readState = .success
  64. device.modbus.close()
  65. //parse and save data to the app memory just as a dictionary. It saves only one small dictionary per device
  66. parseRegisters(controllerIP: device.modbus.host, vendor: vendor, registers: registers, startAdd: startAddress)
  67. } catch let error {
  68. //handling errors
  69. }
  70.  
  71. //refreshing interface in the main queue
  72. }
Add Comment
Please, Sign In to add comment