Reputation: 129
I'm working withURLSessionWebSocket
to learn more about it.
I'm using this class for it
my question is, how can I add authentication header to it? (Content-Type
, ACCOUNT-AUTHORIZATION
and SUB-AUTHORIZATION
)
thank you so much
lass WebSocketConnector : NSObject {
var didOpenConnection : (()->())?
var didCloseConnection : (()->())?
var didReceiveMessage : ((_ message : String)->())?
var didReceiveData : ((_ message : Data)->())?
var didReceiveError : ((_ error : Error)->())?
var urlSession : URLSession!
var operationQueue : OperationQueue = OperationQueue()
var socket : URLSessionWebSocketTask!
init(withSocketURL url : URL){
super.init()
urlSession = URLSession(configuration: .default, delegate: self, delegateQueue: operationQueue)
socket = urlSession.webSocketTask(with: url)
}
private func addListener(){
socket.receive {[weak self] (result) in
switch result {
case .success(let response):
switch response {
case .data(let data):
self?.didReceiveData?(data)
case .string(let message):
self?.didReceiveMessage?(message)
@unknown default:
break
}
case .failure(let error):
self?.didReceiveError?(error)
}
self?.addListener()
}
}
}
extension WebSocketConnector : WebSocketProtocol {
func establishConnection(){
socket.resume()
addListener()
}
func disconnect(){
socket.cancel(with: .goingAway, reason: nil)
}
func send(message: String) {
socket.send(URLSessionWebSocketTask.Message.string(message)) {[weak self] (error) in
if let error = error {
self?.didReceiveError?(error)
}
}
}
func send(data: Data) {
socket.send(URLSessionWebSocketTask.Message.data(data)) {[weak self] (error) in
if let error = error {
self?.didReceiveError?(error)
}
}
}
}
extension WebSocketConnector : URLSessionWebSocketDelegate {
func urlSession(_ session: URLSession, webSocketTask: URLSessionWebSocketTask, didOpenWithProtocol protocol: String?) {
didOpenConnection?()
}
func urlSession(_ session: URLSession, webSocketTask: URLSessionWebSocketTask, didCloseWith closeCode: URLSessionWebSocketTask.CloseCode, reason: Data?) {
didCloseConnection?()
}
}
Upvotes: 4
Views: 2084
Reputation: 119
Just wrap your URL with an URLRequester:
var request = URLRequest(url: url)
request.addValue("xafq", forHTTPHeaderField: "Authorization")
and call:
URLSession.shared.webSocketTask(with: request)
Upvotes: 8