Skip to content

ibcylon/WWDC19---Advanced-Network

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 

Repository files navigation

WWDC19 Demo Repository

  • LowData mode exercise with URLSession Publisher 프로젝트
  • WebSocket Client with URLSessionWebSocketTask 프로젝트
  • WebSocket Server with Network WebSocket 프로젝트

LowData Mode 및 URLSessionPublisher 사용 예제

Non Constrained Network Low Data mode
drawing drawing1

ImageLodaer publisher

func adaptiveLoader(session: URLSession = .shared, regularURL: URL, lowDataURL: URL) -> AnyPublisher<Data, Error> {
    var request = URLRequest(url: regularURL)
    request.allowsConstrainedNetworkAccess = false
    return session.dataTaskPublisher(for: request)
      .tryCatch { error -> URLSession.DataTaskPublisher in
        guard error.networkUnavailableReason == .constrained else {
          throw error
        }
        return session.dataTaskPublisher(for: lowDataURL)
      }
      .tryMap { data, response -> Data in
        guard let httpResponse = response as? HTTPURLResponse,
              httpResponse.statusCode == 200 else {
          throw CustomError.invalidserverResponse
        }
        return data
      }
      .eraseToAnyPublisher()
  }

WebSocket

example
// NativeClient.swift
func readMessage() {
 guard let task = self.webSocketTask else { return }
 task.receive { result in
   switch result {
   case .success(.data(let data)):
     self.delegate?.onMessage(connection: self, data: data)
     self.readMessage()
   default:
     self.disconnect()
   }
 }
}

func send(_ message: MessageDTO) {
 if let data = try? JSONEncoder().encode(message) {
   webSocketTask?.send(.data(data), completionHandler: { error in
     if let error = error {
       self.delegate?.onError(connection: self, error: error)
     }
   })
 }
}

About

WWDC19 - Advanced Network

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages