@@ -28,6 +28,7 @@ public class DVCClient {
2828 var eventQueue : EventQueue = EventQueue ( )
2929
3030 private let defaultFlushInterval : Int = 10000
31+ private var flushEventsInterval : Double = 10.0
3132
3233 private var service : DevCycleServiceProtocol ?
3334 private var cacheService : CacheServiceProtocol = CacheService ( )
@@ -44,6 +45,7 @@ public class DVCClient {
4445
4546 if let options = self . options {
4647 Log . level = options. logLevel
48+ self . flushEventsInterval = Double ( self . options? . flushEventsIntervalMs ?? self . defaultFlushInterval) / 1000.0
4749 } else {
4850 Log . level = . error
4951 }
@@ -81,6 +83,13 @@ public class DVCClient {
8183 self . initialized = true
8284 self . configCompletionHandlers = [ ]
8385 } )
86+
87+ Timer . scheduledTimer (
88+ withTimeInterval: TimeInterval ( self . flushEventsInterval) ,
89+ repeats: true
90+ ) {
91+ timer in self . flushEvents ( )
92+ }
8493 }
8594
8695 func setEnvironmentKey( _ environmentKey: String ) {
@@ -185,20 +194,21 @@ public class DVCClient {
185194 }
186195
187196 public func flushEvents( callback: FlushCompletedHandler ? = nil ) {
188- guard let user = self . user else {
189- Log . error ( " Flushing events failed, user not defined " )
190- return
191- }
192- guard let service = self . service else {
193- Log . error ( " Client not set up correctly " )
194- return
195- }
196- self . eventQueue. flush ( service: service, user: user) { error in
197- callback ? ( error)
198- if ( !self . eventQueue. isEmpty ( ) ) {
199- let delay = Double ( self . options? . flushEventsIntervalMs ?? self . defaultFlushInterval) / 1000.0
200- DispatchQueue . main. asyncAfter ( deadline: . now( ) + delay) {
201- self . flushEvents ( callback: nil )
197+ if ( !self . eventQueue. isEmpty ( ) ) {
198+ guard let user = self . user else {
199+ Log . error ( " Flushing events failed, user not defined " )
200+ return
201+ }
202+ guard let service = self . service else {
203+ Log . error ( " Client not set up correctly " )
204+ return
205+ }
206+ self . eventQueue. flush ( service: service, user: user) { error in
207+ callback ? ( error)
208+ if ( !self . eventQueue. isEmpty ( ) ) {
209+ DispatchQueue . main. asyncAfter ( deadline: . now( ) + self . flushEventsInterval) {
210+ self . flushEvents ( callback: nil )
211+ }
202212 }
203213 }
204214 }
0 commit comments