diff --git a/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterHandler.swift b/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterHandler.swift index 62a4103..da1a93a 100644 --- a/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterHandler.swift +++ b/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterHandler.swift @@ -61,102 +61,6 @@ getParameters(with: clientParameterModel, requestParameters: requestParameters, actionId: actionId, completionHandler: completionHandler) } -// open func getParameters(with model: ClientParameterModel, requestParameters: [String: Any], actionId: String) async -> [String: AnyHashable] { -// let timeout = TimeInterval(10)//model.timeout ?? Self.DefaultTimeout) -// let parameterHandlerList = model.list.compactMap { createParametersHandler($0) } -// let parameters = await withThrowingTaskGroup(of: (any ClientParameterProtocol, [String: AnyHashable]).self, returning: [String: AnyHashable].self) { group in -// -// // Task for time out. -// group.addTask { -// try Task.checkCancellation() -// try await Task.sleep(nanoseconds: UInt64(timeout * TimeInterval(NSEC_PER_SEC))) -// try Task.checkCancellation() -// throw MVMCoreActionUtilityError.timeOut -// } -// -// for handler in parameterHandlerList { -// group.addTask{ -// try Task.checkCancellation() -// print("vvvv start \(handler.clientParameterModel.type) \(handler.clientParameterModel.id)") -// MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterStartFetch( -// name: handler.clientParameterModel.type, -// uuid: handler.clientParameterModel.id, -// actionId: actionId)) -// let parameter = await handler.fetchClientParameters(requestParameters: requestParameters, timingOutIn: timeout) -// print("vvvv end \(handler.clientParameterModel.type) \(handler.clientParameterModel.id)") -// MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterFetchComplete( -// name: handler.clientParameterModel.type, -// uuid: handler.clientParameterModel.id, -// actionId: actionId)) -// return (handler, parameter) -// } -// } -// // -// // return parameter -// // } catch MVMCoreActionUtilityError.timeOut { -// // // The client parameter timed out. -// // MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterTimeout( -// // name: handler.clientParameterModel.type, -// // uuid: handler.clientParameterModel.id, -// // actionId: actionId)) -// // return handler.valueOnTimeout() -// // } catch { -// // if let errorObject = MVMCoreErrorObject.createErrorObject(for: error, location: #function) { -// // MVMCoreLoggingHandler.shared()?.addError(toLog: errorObject) -// // } -// // return [handler.clientParameterModel.type: "failed_to_collect"] -// // } -// -// var finishedHandlers: [String: [String: AnyHashable]] = [:] -// //var parameters = [String: AnyHashable]() -// do { -// for try await currentParameter in group { -// print("vvvv finished \(currentParameter.0.clientParameterModel.type) \(currentParameter.0.clientParameterModel.id)") -// finishedHandlers[currentParameter.0.clientParameterModel.id] = currentParameter.1 -// guard finishedHandlers.count >= parameterHandlerList.count else { continue } -// print("vvvv finished all handlers") -// // Cancel the timeout -// group.cancelAll() -// } -// } catch MVMCoreActionUtilityError.timeOut { -// // The client parameter timed out. Log each event and set failure values for unfinished handlers. -// print("vvvv timeout \(timeout)") -// group.cancelAll() -// for handler in parameterHandlerList { -// guard finishedHandlers[handler.clientParameterModel.id] == nil else { continue } -// print("vvvv timeout \(handler.clientParameterModel.type) \(handler.clientParameterModel.id)") -// MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterTimeout( -// name: handler.clientParameterModel.type, -// uuid: handler.clientParameterModel.id, -// actionId: actionId)) -// finishedHandlers[handler.clientParameterModel.id] = handler.valueOnTimeout() -// } -// } catch { -// if !(error is CancellationError) { -// print("vvvv error \(error.localizedDescription)") -// // Log the error and set failure values for unfinished handlers. -// group.cancelAll() -// if let errorObject = MVMCoreErrorObject.createErrorObject(for: error, location: #function) { -// MVMCoreLoggingHandler.shared()?.addError(toLog: errorObject) -// } -// for handler in parameterHandlerList { -// guard finishedHandlers[handler.clientParameterModel.id] == nil else { continue } -// finishedHandlers[handler.clientParameterModel.id] = handler.valueOnTimeout() -// } -// } -// } -// print("vvvv finishing group") -// return finishedHandlers.reduce(into: [String: AnyHashable]()) { partialResult, parameter in -// partialResult.merge(parameter.value) { first, last in first } -// } -// } -// print("vvvv parameters \(parameters)") -// -// return parameters -// } -// open func getParameters(with model: ClientParameterModel, requestParameters: [String: Any], actionId: String) async -> [String: AnyHashable] { -// } - open func getParameters(with model: ClientParameterModel, requestParameters: [String: Any], actionId: String) async -> [String: AnyHashable] { await withCheckedContinuation { continuation in getParameters(with: model, requestParameters: requestParameters, actionId: actionId) { parameters in @@ -172,7 +76,6 @@ let timeout = model.timeout ?? Self.DefaultTimeout let parameterHandlerList = model.list.compactMap { createParametersHandler($0) } - let requestUUID = (0.. [String: AnyHashable] in guard let parameter = element else { let handler = parameterHandlerList[index] - print("vvvv timeout \(handler.clientParameterModel.type) \(handler.clientParameterModel.id)") MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterTimeout( name: handler.clientParameterModel.type, uuid: handler.clientParameterModel.id, @@ -200,16 +102,13 @@ var complete = false let timeoutWorkItem = DispatchWorkItem(qos: .userInitiated) { let params = mergedParametersList - print("vvvv timeout parameters \(params)") completionHandler(params); complete = true } let completionWorkItem = DispatchWorkItem(qos: .userInitiated) { timeoutWorkItem.cancel() - print("vvvv finishing group") if !complete { // In the case of firing after timeout. let params = mergedParametersList - print("vvvv finishing group \(params)") completionHandler(params); complete = true } @@ -221,12 +120,11 @@ // Setup the parameter execution. for (index, parameterHandler) in parameterHandlerList.enumerated() { let parameterType = parameterHandler.clientParameterModel.type - MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterStartFetch(name: parameterType, uuid: requestUUID[index], actionId: actionId)) + let id = parameterHandler.clientParameterModel.id + MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterStartFetch(name: parameterType, uuid: id, actionId: actionId)) group.enter() - print("vvvv start \(parameterHandler.clientParameterModel.type) \(parameterHandler.clientParameterModel.id)") parameterHandler.fetchClientParametersBridge(requestParameters: requestParameters, timingOutIn: timeout) { (receivedParameter) in - print("vvvv end \(parameterHandler.clientParameterModel.type) \(parameterHandler.clientParameterModel.id)") // Queue the results for merge. parametersWorkQueue.async { guard !complete else { @@ -237,7 +135,7 @@ MVMCoreLoggingHandler.shared()?.addError(toLog: MVMCoreErrorObject(title: nil, message: "Client parameter \(parameterType) has already executed. The completion handler should only be called once!", code: ErrorCode.default.rawValue, domain: ErrorDomainNative, location: String(describing: ClientParameterHandler.self))!) return } - MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterFetchComplete(name: parameterType, uuid: requestUUID[index], actionId: actionId)) + MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterFetchComplete(name: parameterType, uuid: id, actionId: actionId)) returnedList[index] = receivedParameter group.leave() // Leaving is only done after setup (barriered). }