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