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 {
@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 {
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 {
stopLoadingOverlay()
completionHandler(actionMap)

View File

@ -449,10 +449,18 @@ NSString * const KeyActionTypeOpen = @"openPage";
- (void)preprocessRequest:(nullable NSDictionary *)actionInformation actionBlock:(nullable void (^)(NSDictionary*))actionBlock {
// Check for client params and fetch the parameters
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);
}];
if (error) {
//MVMCoreLoggingHandler.logDebugMessage(withDelegate: "JS function reult: \(String(describing: result))")
MVMCoreLog(@"Error clientParamters %@", error);
actionBlock(actionInformation);
}
} else {
actionBlock(actionInformation);
}

View File

@ -13,17 +13,3 @@ public protocol ClientParameterProtocol {
static var name: String { get }
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
@objcMembers open class ClientParameterRegistry: NSObject {
@objcMembers public class ClientParameterRegistry: NSObject {
public static let shared = ClientParameterRegistry()
private var mapping: [String: ClientParameterProtocol.Type] = [:]
public func register<T:ClientParameterProtocol>(_ handler: T.Type) {
@ -23,22 +23,16 @@ import Foundation
return parameterType.init()
}
static func getClientParameterModel(_ clientParameters: [String: Any]) -> ClientParameterModel? {
do {
let data = try JSONSerialization.data(withJSONObject: clientParameters)
return try JSONDecoder().decode(ClientParameterModel.self, from: data)
} catch {
MVMCoreLoggingHandler.logDebugMessage(withDelegate: "Error parsing getClientParameterModel: \(error)")
return nil
}
static func getClientParameterModel(_ clientParameters: [String: Any]) throws -> ClientParameterModel? {
let data = try JSONSerialization.data(withJSONObject: clientParameters)
return try JSONDecoder().decode(ClientParameterModel.self, from: data)
}
static func injectParameters(with clientParameters: [String: Any],
completionHandler:@escaping ([String: Any]?) -> ()) {
static func injectParameters(with clientParameters: [String: Any], completionHandler:@escaping ([String: Any]?) -> ()) throws {
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)
return
}
@ -48,7 +42,7 @@ import Foundation
let parametersWorkQueue = DispatchQueue(label: "com.mva.clientparameter")
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.
parametersWorkQueue.async(group: group, qos: .userInitiated) {
@ -75,25 +69,25 @@ import Foundation
parametersList[parameterModel.type] = ["error": defaultErrorString]
group.enter()
// Dispatch asynchronous injection.
clientParameterRegistry.injectParameter(parameterModel, before: timeout) { (clientParam) in
clientParameterRegistry?.injectParameter(parameterModel, before: timeout) { (clientParam) in
// Queue the results for merge.
parametersWorkQueue.async {
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).
}
}
}
// Callback when all parameters have been merged.
group.notify(queue: parametersWorkQueue, work: completionWorkItem);
}
}
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)
}
parammeterHandler.fetchClientParameters(for: parameterModel, timingOutIn: timeout, completionHandler: completionHandler)
@ -103,13 +97,8 @@ import Foundation
public static func registerParameters() { }
/// Register Default Core Bridge Objects
public static func register<T:ClientParameterProtocol, M: ModelProtocol>(handler: T.Type, for model: M.Type) {
do {
try ModelRegistry.register(model)
} catch {
MVMCoreLoggingHandler.logDebugMessage(withDelegate: "Error registering: \(error)")
}
ClientParameterRegistry.shared.register(handler)
public static func register<T:ClientParameterProtocol, M: ModelProtocol>(handler: T.Type, for model: M.Type) throws {
try ModelRegistry.register(model)
MVMCoreObject.sharedInstance()?.clientParameterRegistry?.register(handler)
}
}

View File

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

View File

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