From d49111766bb8275b35413b05532ef03b05f0fe73 Mon Sep 17 00:00:00 2001 From: "Suresh, Kamlesh" Date: Wed, 6 Jan 2021 20:53:40 -0500 Subject: [PATCH] concurrent queue and timout --- .../ActionHandler+ClientParameters.swift | 5 +-- .../ClientParameterRegistry.swift | 36 +++++++++++++------ 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/MVMCore/MVMCore/ActionHandling/ActionHandler+ClientParameters.swift b/MVMCore/MVMCore/ActionHandling/ActionHandler+ClientParameters.swift index fbbb8ca..53acc76 100644 --- a/MVMCore/MVMCore/ActionHandling/ActionHandler+ClientParameters.swift +++ b/MVMCore/MVMCore/ActionHandling/ActionHandler+ClientParameters.swift @@ -18,13 +18,14 @@ public extension MVMCoreActionHandler { @objc func setClientParameter(with actionMap: [String: Any]?, completionHandler: @escaping ([String : Any]?) -> ()) { - guard let paramsList = actionMap?.optionalArrayForChainOfKeysOrIndexes(["clientParameters", "list"]) as? [[String : Any]] else { + guard let clientParameters = actionMap?.optionalDictionaryForKey("clientParameters") else { completionHandler(actionMap) return } MVMCoreLoadingOverlayHandler.sharedLoadingOverlay()?.startLoading() - ClientParameterRegistry.injectParams(with: paramsList) { (clientParams) in + + ClientParameterRegistry.injectParams(with: clientParameters) { (clientParams) in guard let clientParams = clientParams else { completionHandler(actionMap) return diff --git a/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterRegistry.swift b/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterRegistry.swift index be0285e..31fd7e0 100644 --- a/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterRegistry.swift +++ b/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterRegistry.swift @@ -23,25 +23,41 @@ import Foundation return patamType.init() } - static func injectParams(with paramsModelList: [[String: Any]]?, + static func injectParams(with clientParameters: [String: Any]?, completionHandler:@escaping ([String: Any]?) -> ()) { let clientParameterRegistry = ClientParameterRegistry.shared - guard let paramsModelList = paramsModelList else { + guard let clientParameters = clientParameters, + let paramsModelList = clientParameters.optionalArrayForKey("list") as? [[String: Any]] else { completionHandler(nil) return } var paramsList: [String: Any] = [:] - MVMCoreDispatchUtility.performSyncBlock( inBackground: { () -> Void in + + DispatchQueue.global(qos: .userInitiated).async { + + let concurrentQueue = DispatchQueue(label: "com.mva.clientparam", attributes: .concurrent) + let group = DispatchGroup() for param in paramsModelList { - if let clientParam = clientParameterRegistry.injectParam(param) { - paramsList.merge(clientParam) { (_, new) in new } + group.enter() + concurrentQueue.async(flags: .barrier) { + if let clientParam = clientParameterRegistry.injectParam(param) { + paramsList.merge(clientParam) { (_, new) in new } + } + group.leave() } } - }) - completionHandler(paramsList) - print("") + + if let timeout = clientParameters.optionalCGFloatForKey("timeout") { + let dispatchAfterTime = DispatchTimeInterval.seconds(Int(timeout)) + _ = group.wait(timeout: .now() + dispatchAfterTime) + } else { + group.wait() + } + + completionHandler(paramsList) + } } func injectParam( _ param: [String: Any]) -> [String: Any]? { @@ -54,9 +70,7 @@ import Foundation /// Add all registry here. - public static func registerParameters() { - - } + public static func registerParameters() { } /// Register Default Core Bridge Objects public static func register(parameter: T.Type, type: M.Type) {