Skip to content

Commit

Permalink
Merge pull request #52 from outfoxx/fix/event_source_timeout
Browse files Browse the repository at this point in the history
Provide default, and allow customizing, timeout interval of event source requests
  • Loading branch information
kdubb committed Oct 24, 2023
2 parents eed0567 + 839803e commit adfdd7a
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 2 deletions.
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ define buildtest
xcodebuild -scheme $(project)-Package \
-derivedDataPath .derived-data/$(1) -resultBundleVersion 3 -resultBundlePath ./TestResults/$(1) -destination '$(2)' \
-enableCodeCoverage=YES -enableAddressSanitizer=YES -enableThreadSanitizer=YES -enableUndefinedBehaviorSanitizer=YES \
-clonedSourcePackagesDirPath ${HOME}/.xcode-pkgs \
test | xcbeautify
endef

Expand Down
2 changes: 1 addition & 1 deletion Sources/Sunday/EventSource.swift
Original file line number Diff line number Diff line change
Expand Up @@ -494,7 +494,7 @@ public class EventSource {
return
}

// Quietly close dure to Task or URLTask cancellation
// Quietly close due to Task or URLTask cancellation
if isCancellationError(error: error) {
fireErrorEvent(error: error)
close()
Expand Down
11 changes: 10 additions & 1 deletion Sources/Sunday/NetworkRequestFactory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ private let eventStreamLogger = Logger.for(category: "Event Streams")

public class NetworkRequestFactory: RequestFactory {

public static let eventRequestTimeoutInterval: TimeInterval = 15 * 60 // 15 minutes

public let baseURL: URI.Template
public let session: NetworkSession
public let eventSession: NetworkSession
Expand All @@ -34,6 +36,7 @@ public class NetworkRequestFactory: RequestFactory {
public let mediaTypeEncoders: MediaTypeEncoders
public let mediaTypeDecoders: MediaTypeDecoders
public let pathEncoders: PathEncoders
public let eventRequestTimeoutInterval: TimeInterval
private var problemTypes: [String: Problem.Type] = [:]

public init(
Expand All @@ -44,6 +47,7 @@ public class NetworkRequestFactory: RequestFactory {
requestQueue: DispatchQueue = .global(qos: .utility),
mediaTypeEncoders: MediaTypeEncoders = .default,
mediaTypeDecoders: MediaTypeDecoders = .default,
eventRequestTimeoutInterval: TimeInterval = NetworkRequestFactory.eventRequestTimeoutInterval,
pathEncoders: PathEncoders = .default
) {
self.baseURL = baseURL
Expand All @@ -54,6 +58,7 @@ public class NetworkRequestFactory: RequestFactory {
self.mediaTypeEncoders = mediaTypeEncoders
self.mediaTypeDecoders = mediaTypeDecoders
self.pathEncoders = pathEncoders
self.eventRequestTimeoutInterval = eventRequestTimeoutInterval
}

public convenience init(
Expand Down Expand Up @@ -452,7 +457,11 @@ public class NetworkRequestFactory: RequestFactory {

return EventSource(queue: requestQueue) { headers in
guard let request = try await requestFactory() else { return nil }
return try self.eventSession.dataEventStream(for: request.adding(httpHeaders: headers))
let updatedRequest =
request
.adding(httpHeaders: headers)
.with(timeoutInterval: self.eventRequestTimeoutInterval)
return try self.eventSession.dataEventStream(for: updatedRequest)
}
}

Expand Down

0 comments on commit adfdd7a

Please sign in to comment.