diff --git a/Sources/Flush.swift b/Sources/Flush.swift index 510365bf..a11618bb 100644 --- a/Sources/Flush.swift +++ b/Sources/Flush.swift @@ -25,16 +25,32 @@ class Flush: AppLifecycle { var flushOnBackground = true var _flushInterval = 0.0 var _flushBatchSize = APIConstants.maxBatchSize - private let flushIntervalReadWriteLock: DispatchQueue + private var _serverURL = BasePath.DefaultMixpanelAPI + private let flushRequestReadWriteLock: DispatchQueue + + var serverURL: String { + get { + flushRequestReadWriteLock.sync { + return _serverURL + } + } + set { + flushRequestReadWriteLock.sync(flags: .barrier, execute: { + _serverURL = newValue + self.flushRequest.serverURL = newValue + }) + } + } + var flushInterval: Double { get { - flushIntervalReadWriteLock.sync { + flushRequestReadWriteLock.sync { return _flushInterval } } set { - flushIntervalReadWriteLock.sync(flags: .barrier, execute: { + flushRequestReadWriteLock.sync(flags: .barrier, execute: { _flushInterval = newValue }) @@ -52,9 +68,10 @@ class Flush: AppLifecycle { } } - required init(basePathIdentifier: String) { - self.flushRequest = FlushRequest(basePathIdentifier: basePathIdentifier) - flushIntervalReadWriteLock = DispatchQueue(label: "com.mixpanel.flush_interval.lock", qos: .utility, attributes: .concurrent, autoreleaseFrequency: .workItem) + required init(serverURL: String) { + self.flushRequest = FlushRequest(serverURL: serverURL) + _serverURL = serverURL + flushRequestReadWriteLock = DispatchQueue(label: "com.mixpanel.flush_interval.lock", qos: .utility, attributes: .concurrent, autoreleaseFrequency: .workItem) } func flushQueue(_ queue: Queue, type: FlushType, headers: [String: String], queryItems: [URLQueryItem]) { diff --git a/Sources/FlushRequest.swift b/Sources/FlushRequest.swift index f14485cc..bf260364 100644 --- a/Sources/FlushRequest.swift +++ b/Sources/FlushRequest.swift @@ -46,7 +46,7 @@ class FlushRequest: Network { parse: responseParser) var result = false let semaphore = DispatchSemaphore(value: 0) - flushRequestHandler(BasePath.getServerURL(identifier: basePathIdentifier), + flushRequestHandler(serverURL, resource: resource, completion: { success in result = success diff --git a/Sources/MixpanelInstance.swift b/Sources/MixpanelInstance.swift index 11145234..d01ad7b5 100644 --- a/Sources/MixpanelInstance.swift +++ b/Sources/MixpanelInstance.swift @@ -167,7 +167,7 @@ open class MixpanelInstance: CustomDebugStringConvertible, FlushDelegate, AEDele /// https://api.mixpanel.com. open var serverURL = BasePath.DefaultMixpanelAPI { didSet { - BasePath.namedBasePaths[name] = serverURL + flushInstance.serverURL = serverURL } } @@ -323,7 +323,6 @@ open class MixpanelInstance: CustomDebugStringConvertible, FlushDelegate, AEDele trackAutomaticEventsEnabled = trackAutomaticEvents if let serverURL = serverURL { self.serverURL = serverURL - BasePath.namedBasePaths[name] = serverURL } self.proxyServerDelegate = proxyServerDelegate #if DEBUG @@ -347,7 +346,7 @@ open class MixpanelInstance: CustomDebugStringConvertible, FlushDelegate, AEDele self.useUniqueDistinctId = useUniqueDistinctId readWriteLock = ReadWriteLock(label: "com.mixpanel.globallock") - flushInstance = Flush(basePathIdentifier: name) + flushInstance = Flush(serverURL: self.serverURL) sessionMetadata = SessionMetadata(trackingQueue: trackingQueue) trackInstance = Track(apiToken: self.apiToken, instanceName: self.name, diff --git a/Sources/Network.swift b/Sources/Network.swift index 7e7774ea..5d78d438 100644 --- a/Sources/Network.swift +++ b/Sources/Network.swift @@ -10,7 +10,6 @@ import Foundation struct BasePath { static let DefaultMixpanelAPI = "https://api.mixpanel.com" - static var namedBasePaths = [String: String]() static func buildURL(base: String, path: String, queryItems: [URLQueryItem]?) -> URL? { guard let url = URL(string: base) else { @@ -25,10 +24,6 @@ struct BasePath { components.percentEncodedQuery = components.percentEncodedQuery?.replacingOccurrences(of: "+", with: "%2B") return components.url } - - static func getServerURL(identifier: String) -> String { - return namedBasePaths[identifier] ?? DefaultMixpanelAPI - } } enum RequestMethod: String { @@ -64,10 +59,10 @@ public struct ServerProxyResource { class Network { - let basePathIdentifier: String + var serverURL: String - required init(basePathIdentifier: String) { - self.basePathIdentifier = basePathIdentifier + required init(serverURL: String) { + self.serverURL = serverURL } class func apiRequest(base: String,