Skip to content

Commit 636e694

Browse files
committed
fix: add automatic flushing of events. user may specify flush time in ms, default of 10s.
1 parent 8b99822 commit 636e694

File tree

3 files changed

+26
-16
lines changed

3 files changed

+26
-16
lines changed

DevCycle/DVCClient.swift

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

DevCycle/Models/PlatformDetails.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,6 @@ struct PlatformDetails {
1818
var systemName: String { UIDevice.current.systemName }
1919
#endif
2020

21-
var sdkType = "client"
21+
var sdkType = "mobile"
2222
var sdkVersion = "1.2.1"
2323
}

DevCycleTests/DVCUserTest.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class DVCUserTest: XCTestCase {
1515
XCTAssertNotNil(user.lastSeenDate)
1616
XCTAssertNotNil(user.platformVersion)
1717
XCTAssertNotNil(user.deviceModel == "iPhone")
18-
XCTAssert(user.sdkType == "client")
18+
XCTAssert(user.sdkType == "mobile")
1919
XCTAssertNotNil(user.sdkVersion)
2020
}
2121

0 commit comments

Comments
 (0)