Procházet zdrojové kódy

Added some error management on http update

Thomas Chef před 3 roky
rodič
revize
c7376132d3

+ 18 - 3
JourneyGPSTracker/Base.lproj/Main.storyboard

@@ -56,6 +56,13 @@
                                 <nil key="textColor"/>
                                 <nil key="highlightedColor"/>
                             </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="-" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="EhI-Pa-ZNA" userLabel="LatestTSSent">
+                                <rect key="frame" x="166" y="400" width="186" height="21"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                <nil key="textColor"/>
+                                <nil key="highlightedColor"/>
+                            </label>
                             <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="No of received GPS Pos:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mF0-kp-IPL">
                                 <rect key="frame" x="34" y="313" width="186" height="21"/>
                                 <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
@@ -71,14 +78,21 @@
                                 <nil key="highlightedColor"/>
                             </label>
                             <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Latest TS sent:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="y63-gU-mRJ">
-                                <rect key="frame" x="34" y="354" width="115" height="21"/>
+                                <rect key="frame" x="34" y="400" width="115" height="21"/>
                                 <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                 <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                 <nil key="textColor"/>
                                 <nil key="highlightedColor"/>
                             </label>
-                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="-" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="EhI-Pa-ZNA" userLabel="LatestTSSent">
-                                <rect key="frame" x="166" y="354" width="186" height="21"/>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="0" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TFS-6S-Reu" userLabel="Failed updates">
+                                <rect key="frame" x="287" y="379" width="65" height="21"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                <nil key="textColor"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Failed back-end updates:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2C5-0g-27u">
+                                <rect key="frame" x="34" y="379" width="193" height="21"/>
                                 <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                 <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                 <nil key="textColor"/>
@@ -90,6 +104,7 @@
                     </view>
                     <connections>
                         <outlet property="latestTSSent" destination="EhI-Pa-ZNA" id="aGH-ln-pi5"/>
+                        <outlet property="noOfFailedUpdatesUI" destination="TFS-6S-Reu" id="60c-nc-uJ5"/>
                         <outlet property="noOfRxGPSPos" destination="gjP-2D-NvA" id="7hy-Mg-Vvj"/>
                         <outlet property="noOfSentGPSToServer" destination="yVZ-Xq-Fgc" id="LkD-uQ-QI7"/>
                         <outlet property="pauseSwitch" destination="1zW-3R-nTk" id="z9y-HB-zSj"/>

+ 39 - 20
JourneyGPSTracker/ViewController.swift

@@ -19,6 +19,7 @@ class ViewController: UIViewController {
     }
    
     
+    @IBOutlet weak var noOfFailedUpdatesUI: UILabel!
     @IBOutlet weak var latestTSSent: UILabel!
     @IBOutlet weak var noOfRxGPSPos: UILabel!
     @IBOutlet weak var noOfSentGPSToServer: UILabel!
@@ -30,6 +31,7 @@ class ViewController: UIViewController {
     
     var noOfSentPos: Int = 0
     var noOfSentToServer: Int = 0
+    var noOfFailedUpdates: Int = 0
     
     var gpsLogData: [NSManagedObject] = []
     
@@ -104,6 +106,10 @@ class ViewController: UIViewController {
         }
     }
     
+    enum MyError: Error {
+        case DataIsNil
+        case BadJSONResponse
+    }
     func sendToHttpServer(gpsPosLog: [GPS_POS_LOG], latestDate: Date) {
 
         let jsonEncoder = JSONEncoder()
@@ -124,29 +130,40 @@ class ViewController: UIViewController {
         request.httpMethod = "POST"
         
         let task = URLSession.shared.uploadTask(with: request, from: uploadData) { data, response, error in
-            if let error = error {
-                print ("HTTP: error: \(error)")
-                return
-            }
-            guard let response = response as? HTTPURLResponse,
-                (200...299).contains(response.statusCode) else {
-                print ("HTTP: 200-299 server error")
-                return
-            }
-            if let mimeType = response.mimeType,
-                mimeType == "text/html",
-                let data = data,
-                let dataString = String(data: data, encoding: .utf8) {
-                print ("HTTP: got data: \(dataString)")
-                print ("HTTP: Latest date sent: " + self.convertStartDate(StartDate: latestDate))
-                //self.latestTSSent.text = self.convertStartDate(StartDate: latestDate)
-                self.latestDateSuccSent = latestDate
-            }
-            else {
-                print("HTTP: KALLE:" + String(response.mimeType!))
+            do {
+                if let error = error {
+                    print ("HTTP: error: ") //\(error)")
+                    throw error
+                }
+                guard let response = response as? HTTPURLResponse,
+                    (200...299).contains(response.statusCode) else {
+                    print ("HTTP: 200-299 server error")
+                    
+                    throw MyError.DataIsNil
+                }
+                if let mimeType = response.mimeType,
+                    mimeType == "text/html",
+                    let data = data,
+                    let dataString = String(data: data, encoding: .utf8) {
+                    print ("HTTP: got data: \(dataString)")
+                    print ("HTTP: Latest date sent: " + self.convertStartDate(StartDate: latestDate))
+                    //self.latestTSSent.text = self.convertStartDate(StartDate: latestDate)
+                    self.latestDateSuccSent = latestDate
+                }
+                else {
+                    print("HTTP: KALLE:" + String(response.mimeType!))
+                    throw MyError.DataIsNil
+                    //self.noOfFailedUpdates += 1
+                }
+            } catch  {
+                self.noOfFailedUpdates += 1
+                //self.noOfFailedUpdatesUI.text = String(self.noOfFailedUpdates)
+                print("CATCH ERROR !!!")
             }
         }
         task.resume()
+        print("Resume.....")
+        self.noOfFailedUpdatesUI.text = String(noOfFailedUpdates)
 
     }
    
@@ -180,6 +197,8 @@ class ViewController: UIViewController {
             pauseSwitch.isEnabled = true
             noOfSentPos = 0
             noOfSentToServer = 0
+            noOfFailedUpdates = 0
+            noOfFailedUpdatesUI.text = String(noOfFailedUpdates)
             noOfRxGPSPos.text = String(noOfSentPos)
             noOfSentGPSToServer.text = String(noOfSentToServer)
             latestTSSent.text = "-"