ViewController.swift 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. //
  2. // ViewController.swift
  3. // Autobahn
  4. //
  5. // Created by Dalton Cherry on 7/24/15.
  6. // Copyright (c) 2015 vluxe. All rights reserved.
  7. //
  8. import UIKit
  9. import Starscream
  10. class ViewController: UIViewController {
  11. let host = "localhost:9001"
  12. var socketArray = [WebSocket]()
  13. var caseCount = 300 //starting cases
  14. override func viewDidLoad() {
  15. super.viewDidLoad()
  16. getCaseCount()
  17. //getTestInfo(1)
  18. //runTest(304)
  19. }
  20. func removeSocket(_ s: WebSocket?) {
  21. guard let s = s else {return}
  22. socketArray = socketArray.filter{$0 !== s}
  23. }
  24. func getCaseCount() {
  25. let req = URLRequest(url: URL(string: "ws://\(host)/getCaseCount")!)
  26. let s = WebSocket(request: req)
  27. socketArray.append(s)
  28. s.onEvent = { [weak self] event in
  29. switch event {
  30. case .text(let string):
  31. if let c = Int(string) {
  32. print("number of cases is: \(c)")
  33. self?.caseCount = c
  34. }
  35. case .disconnected(_, _):
  36. self?.runTest(1)
  37. self?.removeSocket(s)
  38. default:
  39. break
  40. }
  41. }
  42. s.connect()
  43. }
  44. func getTestInfo(_ caseNum: Int) {
  45. let s = createSocket("getCaseInfo",caseNum)
  46. socketArray.append(s)
  47. // s.onText = { (text: String) in
  48. // let data = text.dataUsingEncoding(NSUTF8StringEncoding)
  49. // do {
  50. // let resp: AnyObject? = try NSJSONSerialization.JSONObjectWithData(data!,
  51. // options: NSJSONReadingOptions())
  52. // if let dict = resp as? Dictionary<String,String> {
  53. // let num = dict["id"]
  54. // let summary = dict["description"]
  55. // if let n = num, let sum = summary {
  56. // print("running case:\(caseNum) id:\(n) summary: \(sum)")
  57. // }
  58. // }
  59. // } catch {
  60. // print("error parsing the json")
  61. // }
  62. // }
  63. var once = false
  64. s.onEvent = { [weak self] event in
  65. switch event {
  66. case .disconnected(_, _), .error(_):
  67. if !once {
  68. once = true
  69. self?.runTest(caseNum)
  70. }
  71. self?.removeSocket(s)
  72. default:
  73. break
  74. }
  75. }
  76. s.connect()
  77. }
  78. func runTest(_ caseNum: Int) {
  79. let s = createSocket("runCase",caseNum)
  80. self.socketArray.append(s)
  81. var once = false
  82. s.onEvent = { [weak self, weak s] event in
  83. switch event {
  84. case .disconnected(_, _), .error(_):
  85. if !once {
  86. once = true
  87. print("case:\(caseNum) finished")
  88. //self?.verifyTest(caseNum) //disabled since it slows down the tests
  89. let nextCase = caseNum+1
  90. if nextCase <= (self?.caseCount)! {
  91. self?.runTest(nextCase)
  92. //self?.getTestInfo(nextCase) //disabled since it slows down the tests
  93. } else {
  94. self?.finishReports()
  95. }
  96. self?.removeSocket(s)
  97. }
  98. self?.removeSocket(s)
  99. case .text(let string):
  100. s?.write(string: string)
  101. case .binary(let data):
  102. s?.write(data: data)
  103. // case .error(let error):
  104. // print("got an error: \(error)")
  105. default:
  106. break
  107. }
  108. }
  109. s.connect()
  110. }
  111. // func verifyTest(_ caseNum: Int) {
  112. // let s = createSocket("getCaseStatus",caseNum)
  113. // self.socketArray.append(s)
  114. // s.onText = { (text: String) in
  115. // let data = text.data(using: String.Encoding.utf8)
  116. // do {
  117. // let resp: Any? = try JSONSerialization.jsonObject(with: data!,
  118. // options: JSONSerialization.ReadingOptions())
  119. // if let dict = resp as? Dictionary<String,String> {
  120. // if let status = dict["behavior"] {
  121. // if status == "OK" {
  122. // print("SUCCESS: \(caseNum)")
  123. // return
  124. // }
  125. // }
  126. // print("FAILURE: \(caseNum)")
  127. // }
  128. // } catch {
  129. // print("error parsing the json")
  130. // }
  131. // }
  132. // var once = false
  133. // s.onDisconnect = { [weak self, weak s] (error: Error?) in
  134. // if !once {
  135. // once = true
  136. // let nextCase = caseNum+1
  137. // print("next test is: \(nextCase)")
  138. // if nextCase <= (self?.caseCount)! {
  139. // self?.getTestInfo(nextCase)
  140. // } else {
  141. // self?.finishReports()
  142. // }
  143. // }
  144. // self?.removeSocket(s)
  145. // }
  146. // s.connect()
  147. // }
  148. func finishReports() {
  149. let s = createSocket("updateReports",0)
  150. self.socketArray.append(s)
  151. s.onEvent = { [weak self, weak s] event in
  152. switch event {
  153. case .disconnected(_, _):
  154. print("finished all the tests!")
  155. self?.removeSocket(s)
  156. default:
  157. break
  158. }
  159. }
  160. s.connect()
  161. }
  162. func createSocket(_ cmd: String, _ caseNum: Int) -> WebSocket {
  163. let req = URLRequest(url: URL(string: "ws://\(host)\(buildPath(cmd,caseNum))")!)
  164. //return WebSocket(request: req, compressionHandler: WSCompression())
  165. return WebSocket(request: req)
  166. }
  167. func buildPath(_ cmd: String, _ caseNum: Int) -> String {
  168. return "/\(cmd)?case=\(caseNum)&agent=Starscream"
  169. }
  170. }