Просмотр исходного кода

Post notifications when new network requests are recorded and when requests are updated.

This will allow any UI which is displaying the requests to update appropriately.
Ryan Olson лет назад: 11
Родитель
Сommit
fad33ddf7a
2 измененных файлов с 26 добавлено и 0 удалено
  1. 5 0
      Classes/Network/FLEXNetworkRecorder.h
  2. 21 0
      Classes/Network/FLEXNetworkRecorder.m

+ 5 - 0
Classes/Network/FLEXNetworkRecorder.h

@@ -8,6 +8,11 @@
 
 #import <Foundation/Foundation.h>
 
+// Notifications posted when the record is updated
+extern NSString *const kFLEXNetworkRecorderNewTransactionNotification;
+extern NSString *const kFLEXNetworkRecorderTransactionUpdatedNotification;
+extern NSString *const kFLEXNetworkRecorderUserInfoTransactionKey;
+
 @class FLEXNetworkTransaction;
 
 @interface FLEXNetworkRecorder : NSObject

+ 21 - 0
Classes/Network/FLEXNetworkRecorder.m

@@ -9,6 +9,10 @@
 #import "FLEXNetworkRecorder.h"
 #import "FLEXNetworkTransaction.h"
 
+NSString *const kFLEXNetworkRecorderNewTransactionNotification = @"kFLEXNetworkRecorderNewTransactionNotification";
+NSString *const kFLEXNetworkRecorderTransactionUpdatedNotification = @"kFLEXNetworkRecorderTransactionUpdatedNotification";
+NSString *const kFLEXNetworkRecorderUserInfoTransactionKey = @"transaction";
+
 @interface FLEXNetworkRecorder ()
 
 @property (nonatomic, strong) NSCache *responseCache;
@@ -66,6 +70,9 @@
 
     [self.orderedTransactions addObject:transaction];
     [self.networkTransactionsForRequestIdentifiers setObject:transaction forKey:requestId];
+
+    NSDictionary *userInfo = @{ kFLEXNetworkRecorderUserInfoTransactionKey : transaction };
+    [[NSNotificationCenter defaultCenter] postNotificationName:kFLEXNetworkRecorderNewTransactionNotification object:self userInfo:userInfo];
 }
 
 - (void)recordResponseReceivedWithRequestId:(NSString *)requestId response:(NSURLResponse *)response
@@ -74,12 +81,16 @@
     transaction.response = response;
     transaction.transactionState = FLEXNetworkTransactionStateReceivingData;
     transaction.latency = -[transaction.startTime timeIntervalSinceNow];
+
+    [self postUpdateNotificationForTransaction:transaction];
 }
 
 - (void)recordDataReceivedWithRequestId:(NSString *)requestId dataLength:(int64_t)dataLength
 {
     FLEXNetworkTransaction *transaction = [self.networkTransactionsForRequestIdentifiers objectForKey:requestId];
     transaction.receivedDataLength += dataLength;
+
+    [self postUpdateNotificationForTransaction:transaction];
 }
 
 - (void)recordLoadingFinishedWithRequestId:(NSString *)requestId responseBody:(NSData *)responseBody
@@ -89,6 +100,8 @@
     transaction.duration = -[transaction.startTime timeIntervalSinceNow];
 
     [self.responseCache setObject:responseBody forKey:requestId cost:[responseBody length]];
+
+    [self postUpdateNotificationForTransaction:transaction];
 }
 
 - (void)recordLoadingFailedWithRequestId:(NSString *)requestId error:(NSError *)error
@@ -97,6 +110,14 @@
     transaction.transactionState = FLEXNetworkTransactionStateFailed;
     transaction.duration = [transaction.startTime timeIntervalSinceNow];
     transaction.error = error;
+
+    [self postUpdateNotificationForTransaction:transaction];
+}
+
+- (void)postUpdateNotificationForTransaction:(FLEXNetworkTransaction *)transaction
+{
+    NSDictionary *userInfo = @{ kFLEXNetworkRecorderUserInfoTransactionKey : transaction };
+    [[NSNotificationCenter defaultCenter] postNotificationName:kFLEXNetworkRecorderTransactionUpdatedNotification object:self userInfo:userInfo];
 }
 
 @end