review changes

This commit is contained in:
Suresh, Kamlesh 2021-01-15 16:32:36 -05:00
parent 2426b626fe
commit 2eb640e8fa
6 changed files with 33 additions and 45 deletions

View File

@ -10,7 +10,7 @@ import Foundation
public extension MVMCoreActionHandler { public extension MVMCoreActionHandler {
@objc func setClientParameter(with actionMap: [String: Any]?, completionHandler: @escaping ([String : Any]?) -> ()) { @objc func setClientParameter(with actionMap: [String: Any]?, completionHandler: @escaping ([String : Any]?) -> ()) throws {
guard let clientParameters = actionMap?.optionalDictionaryForKey("clientParameters") else { guard let clientParameters = actionMap?.optionalDictionaryForKey("clientParameters") else {
completionHandler(actionMap) completionHandler(actionMap)
@ -29,7 +29,7 @@ public extension MVMCoreActionHandler {
} }
} }
ClientParameterRegistry.injectParameters(with: clientParameters) { (clientParams) in try ClientParameterRegistry.injectParameters(with: clientParameters) { (clientParams) in
guard let clientParams = clientParams else { guard let clientParams = clientParams else {
stopLoadingOverlay() stopLoadingOverlay()
completionHandler(actionMap) completionHandler(actionMap)

View File

@ -449,10 +449,18 @@ NSString * const KeyActionTypeOpen = @"openPage";
- (void)preprocessRequest:(nullable NSDictionary *)actionInformation actionBlock:(nullable void (^)(NSDictionary*))actionBlock { - (void)preprocessRequest:(nullable NSDictionary *)actionInformation actionBlock:(nullable void (^)(NSDictionary*))actionBlock {
// Check for client params and fetch the parameters // Check for client params and fetch the parameters
if ([actionInformation dict:@"clientParameters"]) { if ([actionInformation dict:@"clientParameters"]) {
[self setClientParameterWith:actionInformation
completionHandler:^(NSDictionary<NSString *,id> * _Nullable actionDict) { NSError *error = nil;
[self setClientParameterWith:actionInformation error:&error completionHandler:^(NSDictionary<NSString *,id> * _Nullable actionDict) {
actionBlock(actionDict); actionBlock(actionDict);
}]; }];
if (error) {
//MVMCoreLoggingHandler.logDebugMessage(withDelegate: "JS function reult: \(String(describing: result))")
MVMCoreLog(@"Error clientParamters %@", error);
actionBlock(actionInformation);
}
} else { } else {
actionBlock(actionInformation); actionBlock(actionInformation);
} }

View File

@ -13,17 +13,3 @@ public protocol ClientParameterProtocol {
static var name: String { get } static var name: String { get }
func fetchClientParameters(for paramModel: ClientParameterModelProtocol, timingOutIn timeout: Double, completionHandler:@escaping ([String: Any]?) -> ()) func fetchClientParameters(for paramModel: ClientParameterModelProtocol, timingOutIn timeout: Double, completionHandler:@escaping ([String: Any]?) -> ())
} }
extension ClientParameterProtocol {
/// Handle encoding and errors
public func getJSON(with paramModel: ClientParameterModelProtocol?) -> JSONDictionary? {
guard let dataModel = paramModel,
let json = dataModel.toJSON() else {
// JSON parsing failed
MVMCoreLoggingHandler.logDebugMessage(withDelegate: "ClientParameterProtocol JSON parsing failed")
return nil
}
return json
}
}

View File

@ -9,9 +9,9 @@
import Foundation import Foundation
@objcMembers open class ClientParameterRegistry: NSObject { @objcMembers public class ClientParameterRegistry: NSObject {
public static let shared = ClientParameterRegistry()
private var mapping: [String: ClientParameterProtocol.Type] = [:] private var mapping: [String: ClientParameterProtocol.Type] = [:]
public func register<T:ClientParameterProtocol>(_ handler: T.Type) { public func register<T:ClientParameterProtocol>(_ handler: T.Type) {
@ -23,22 +23,16 @@ import Foundation
return parameterType.init() return parameterType.init()
} }
static func getClientParameterModel(_ clientParameters: [String: Any]) -> ClientParameterModel? { static func getClientParameterModel(_ clientParameters: [String: Any]) throws -> ClientParameterModel? {
do { let data = try JSONSerialization.data(withJSONObject: clientParameters)
let data = try JSONSerialization.data(withJSONObject: clientParameters) return try JSONDecoder().decode(ClientParameterModel.self, from: data)
return try JSONDecoder().decode(ClientParameterModel.self, from: data)
} catch {
MVMCoreLoggingHandler.logDebugMessage(withDelegate: "Error parsing getClientParameterModel: \(error)")
return nil
}
} }
static func injectParameters(with clientParameters: [String: Any], static func injectParameters(with clientParameters: [String: Any], completionHandler:@escaping ([String: Any]?) -> ()) throws {
completionHandler:@escaping ([String: Any]?) -> ()) {
let clientParameterRegistry = ClientParameterRegistry.shared let clientParameterRegistry = MVMCoreObject.sharedInstance()?.clientParameterRegistry
guard let clientParameterModel = ClientParameterRegistry.getClientParameterModel(clientParameters) else { guard let clientParameterModel = try ClientParameterRegistry.getClientParameterModel(clientParameters) else {
completionHandler(nil) completionHandler(nil)
return return
} }
@ -48,7 +42,7 @@ import Foundation
let parametersWorkQueue = DispatchQueue(label: "com.mva.clientparameter") let parametersWorkQueue = DispatchQueue(label: "com.mva.clientparameter")
let group = DispatchGroup() let group = DispatchGroup()
let defaultErrorString = "Failed to collect." let defaultErrorString = "failed_to_collect."
// Dispatch setup on queue to ensure setup is complete before completion callbacks. // Dispatch setup on queue to ensure setup is complete before completion callbacks.
parametersWorkQueue.async(group: group, qos: .userInitiated) { parametersWorkQueue.async(group: group, qos: .userInitiated) {
@ -75,25 +69,25 @@ import Foundation
parametersList[parameterModel.type] = ["error": defaultErrorString] parametersList[parameterModel.type] = ["error": defaultErrorString]
group.enter() group.enter()
// Dispatch asynchronous injection. // Dispatch asynchronous injection.
clientParameterRegistry.injectParameter(parameterModel, before: timeout) { (clientParam) in clientParameterRegistry?.injectParameter(parameterModel, before: timeout) { (clientParam) in
// Queue the results for merge. // Queue the results for merge.
parametersWorkQueue.async { parametersWorkQueue.async {
if let clientParam = clientParam { if let clientParam = clientParam {
parametersList[parameterModel.type] = clientParam parametersList.merge(clientParam) { (_, new) in new }
//parametersList[parameterModel.type] = clientParam
} }
group.leave() // Leaving is only done after setup (barriered). group.leave() // Leaving is only done after setup (barriered).
} }
} }
} }
// Callback when all parameters have been merged. // Callback when all parameters have been merged.
group.notify(queue: parametersWorkQueue, work: completionWorkItem); group.notify(queue: parametersWorkQueue, work: completionWorkItem);
} }
} }
func injectParameter( _ parameterModel: ClientParameterModelProtocol, before timeout: Double, completionHandler:@escaping ([String: Any]?) -> ()) { func injectParameter( _ parameterModel: ClientParameterModelProtocol, before timeout: Double, completionHandler:@escaping ([String: Any]?) -> ()) {
guard let parammeterHandler = ClientParameterRegistry.shared.createParametersHandler(parameterModel.type) else { guard let parammeterHandler = createParametersHandler(parameterModel.type) else {
return completionHandler(nil) return completionHandler(nil)
} }
parammeterHandler.fetchClientParameters(for: parameterModel, timingOutIn: timeout, completionHandler: completionHandler) parammeterHandler.fetchClientParameters(for: parameterModel, timingOutIn: timeout, completionHandler: completionHandler)
@ -103,13 +97,8 @@ import Foundation
public static func registerParameters() { } public static func registerParameters() { }
/// Register Default Core Bridge Objects /// Register Default Core Bridge Objects
public static func register<T:ClientParameterProtocol, M: ModelProtocol>(handler: T.Type, for model: M.Type) { public static func register<T:ClientParameterProtocol, M: ModelProtocol>(handler: T.Type, for model: M.Type) throws {
try ModelRegistry.register(model)
do { MVMCoreObject.sharedInstance()?.clientParameterRegistry?.register(handler)
try ModelRegistry.register(model)
} catch {
MVMCoreLoggingHandler.logDebugMessage(withDelegate: "Error registering: \(error)")
}
ClientParameterRegistry.shared.register(handler)
} }
} }

View File

@ -18,6 +18,8 @@
#import <MVMCore/MVMCoreLoggingHandler.h> #import <MVMCore/MVMCoreLoggingHandler.h>
#import <MVMCore/MVMCoreLoadHandler.h> #import <MVMCore/MVMCoreLoadHandler.h>
@class ClientParameterRegistry;
@interface MVMCoreObject : NSObject @interface MVMCoreObject : NSObject
@property (nullable, strong, nonatomic) MVMCoreSessionObject *session; @property (nullable, strong, nonatomic) MVMCoreSessionObject *session;
@ -26,6 +28,7 @@
@property (nullable, strong, nonatomic) MVMCoreActionHandler *actionHandler; @property (nullable, strong, nonatomic) MVMCoreActionHandler *actionHandler;
@property (nullable, strong, nonatomic) MVMCoreSessionTimeHandler *sessionHandler; @property (nullable, strong, nonatomic) MVMCoreSessionTimeHandler *sessionHandler;
@property (nullable, strong, nonatomic) MVMCoreLoadHandler *loadHandler; @property (nullable, strong, nonatomic) MVMCoreLoadHandler *loadHandler;
@property (nullable, strong, nonatomic) ClientParameterRegistry *clientParameterRegistry;
// The delegates // The delegates
@property (nullable, strong, nonatomic) id <MVMCoreGlobalLoadProtocol> globalLoadDelegate; @property (nullable, strong, nonatomic) id <MVMCoreGlobalLoadProtocol> globalLoadDelegate;

View File

@ -7,6 +7,7 @@
// //
#import "MVMCoreObject.h" #import "MVMCoreObject.h"
#import <MVMCore/MVMCore-Swift.h>
@implementation MVMCoreObject @implementation MVMCoreObject
@ -27,6 +28,7 @@
self.actionHandler = [[MVMCoreActionHandler alloc] init]; self.actionHandler = [[MVMCoreActionHandler alloc] init];
self.loggingDelegate = [[MVMCoreLoggingHandler alloc] init]; self.loggingDelegate = [[MVMCoreLoggingHandler alloc] init];
self.loadHandler = [[MVMCoreLoadHandler alloc] init]; self.loadHandler = [[MVMCoreLoadHandler alloc] init];
self.clientParameterRegistry = [ClientParameterRegistry new];
} }
@end @end