Browse Source

[Database] Add one-time retry when sending socket message

Nick Cooke 1 year ago
parent
commit
06ed6f1787
1 changed files with 14 additions and 3 deletions
  1. 14 3
      FirebaseDatabase/Sources/Realtime/FWebSocketConnection.m

+ 14 - 3
FirebaseDatabase/Sources/Realtime/FWebSocketConnection.m

@@ -366,13 +366,24 @@ static NSString *const kGoogleAppIDHeader = @"X-Firebase-GMPID";
     if (@available(iOS 13.0, macOS 10.15, macCatalyst 13.1, tvOS 13.0,
                    watchOS 6.0, *)) {
         // Use built-in URLSessionWebSocket functionality.
+        NSURLSessionWebSocketMessage *message =
+            [[NSURLSessionWebSocketMessage alloc] initWithString:string];
         [self.webSocketTask
-                  sendMessage:[[NSURLSessionWebSocketMessage alloc]
-                                  initWithString:string]
+                  sendMessage:message
             completionHandler:^(NSError *_Nullable error) {
               if (error) {
-                  FFWarn(@"I-RDB083016", @"Error sending web socket data: %@.",
+                  FFWarn(@"I-RDB083016",
+                         @"Error sending web socket data: %@. Retrying once.",
                          error);
+                  [self.webSocketTask
+                            sendMessage:message
+                      completionHandler:^(NSError *_Nullable error) {
+                        if (error) {
+                            FFWarn(@"I-RDB083016",
+                                   @"Error sending web socket data: %@.",
+                                   error);
+                        }
+                      }];
                   return;
               }
             }];