review changes
This commit is contained in:
parent
2426b626fe
commit
2eb640e8fa
@ -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)
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user