Setup web socket delegate
This commit is contained in:
@@ -17,6 +17,7 @@ public protocol WebSocket {
|
||||
var timeout: TimeInterval { get }
|
||||
var session: URLSession { get }
|
||||
var socket: URLSessionWebSocketTask? { get set }
|
||||
var socketDelegate: URLSessionWebSocketDelegate? { get }
|
||||
var credential: WebSocketCredential { get }
|
||||
}
|
||||
|
||||
@@ -35,36 +36,6 @@ extension WebSocket {
|
||||
}
|
||||
|
||||
|
||||
extension WebSocket {
|
||||
|
||||
var queryUrl: URL? {
|
||||
URL(string: domain + url)
|
||||
}
|
||||
|
||||
/*
|
||||
mutating func connect() async throws -> URLSessionWebSocketTask {
|
||||
return try await withUnsafeThrowingContinuation { continuation in
|
||||
guard let queryUrl = queryUrl else {
|
||||
continuation.resume(throwing: QueryError.invalidUrl)
|
||||
return
|
||||
}
|
||||
|
||||
let socket = session.webSocketTask(with: queryUrl)
|
||||
socket.resume()
|
||||
self.socket = socket
|
||||
|
||||
continuation.resume(returning: socket)
|
||||
}
|
||||
}
|
||||
|
||||
mutating func disconnect() {
|
||||
socket?.cancel(with: .normalClosure, reason: nil)
|
||||
socket = nil
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
public protocol AuthWebSocket: WebSocket {
|
||||
var credential: WebSocketCredential { get }
|
||||
var transactionId: String { get }
|
||||
@@ -74,9 +45,13 @@ public protocol AuthWebSocket: WebSocket {
|
||||
|
||||
extension AuthWebSocket {
|
||||
|
||||
var queryUrl: URL? {
|
||||
URL(string: domain + url)
|
||||
}
|
||||
|
||||
// TODO: work later
|
||||
// public var session: URLSession {
|
||||
// }
|
||||
//public var session: URLSession {
|
||||
//}
|
||||
|
||||
public var domain: String {
|
||||
credential.isMock ?
|
||||
@@ -92,6 +67,7 @@ extension AuthWebSocket {
|
||||
}
|
||||
|
||||
let socket = session.webSocketTask(with: queryUrl)
|
||||
socket.delegate = socketDelegate
|
||||
socket.resume()
|
||||
self.socket = socket
|
||||
|
||||
@@ -154,6 +130,18 @@ extension AuthWebSocket {
|
||||
let r = try JSONDecoder().decode(T.self, from: data)
|
||||
return r
|
||||
}
|
||||
|
||||
public func receive() async throws -> String? {
|
||||
guard let socket = socket else {
|
||||
throw GeneralError.invalidWebSocket
|
||||
}
|
||||
|
||||
let message = try await socket.receive()
|
||||
let str = message.string
|
||||
print(message)
|
||||
|
||||
return str
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -188,4 +176,15 @@ extension URLSessionWebSocketTask.Message {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
var string: String? {
|
||||
switch self {
|
||||
case .string(let str):
|
||||
return str
|
||||
case .data(let data):
|
||||
return String(data: data, encoding: .utf8)
|
||||
@unknown default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ extension Domestic {
|
||||
}
|
||||
|
||||
public var socket: URLSessionWebSocketTask?
|
||||
public var socketDelegate: URLSessionWebSocketDelegate? { event }
|
||||
public var credential: WebSocketCredential
|
||||
public let transactionKey: String
|
||||
var event: Event!
|
||||
|
||||
@@ -23,6 +23,7 @@ extension Domestic {
|
||||
}
|
||||
|
||||
public var socket: URLSessionWebSocketTask?
|
||||
public var socketDelegate: URLSessionWebSocketDelegate? { event }
|
||||
public var credential: WebSocketCredential
|
||||
public let transactionKey: String
|
||||
var event: Event!
|
||||
|
||||
@@ -14,11 +14,6 @@ enum KissWebSocketSubscription: String, Codable {
|
||||
}
|
||||
|
||||
|
||||
protocol KissWebSocketMessage {
|
||||
|
||||
}
|
||||
|
||||
|
||||
// MARK: ContractPriceWebSocket
|
||||
|
||||
extension Domestic {
|
||||
@@ -34,6 +29,7 @@ extension Domestic {
|
||||
}
|
||||
|
||||
public var socket: URLSessionWebSocketTask?
|
||||
public var socketDelegate: URLSessionWebSocketDelegate? { event }
|
||||
public var credential: WebSocketCredential
|
||||
public let transactionKey: String
|
||||
var event: Event!
|
||||
@@ -109,7 +105,7 @@ extension Domestic {
|
||||
let resultCode: String
|
||||
let messageCode: String
|
||||
let message: String
|
||||
let output: OutputDetail?
|
||||
let output: Output?
|
||||
|
||||
private enum CodingKeys: String, CodingKey {
|
||||
case resultCode = "rt_cd"
|
||||
@@ -119,7 +115,7 @@ extension Domestic {
|
||||
}
|
||||
}
|
||||
|
||||
struct OutputDetail: Codable {
|
||||
struct Output: Codable {
|
||||
let iv: String
|
||||
let key: String
|
||||
}
|
||||
|
||||
@@ -35,6 +35,15 @@ func test_get_websocket_key_and_request_simple() {
|
||||
try await Task.sleep(nanoseconds: 1_000_000_000 * 3)
|
||||
let result2 = try await socket.unsubscribe()
|
||||
print(result2)
|
||||
|
||||
if let message = try await socket.receive() {
|
||||
print(message)
|
||||
}
|
||||
|
||||
try await Task.sleep(nanoseconds: 1_000_000_000 * 3)
|
||||
socket.disconnect()
|
||||
|
||||
try await Task.sleep(nanoseconds: 1_000_000_000 * 1)
|
||||
} catch {
|
||||
print(error)
|
||||
}
|
||||
@@ -42,10 +51,6 @@ func test_get_websocket_key_and_request_simple() {
|
||||
semaphore.signal()
|
||||
}
|
||||
semaphore.wait()
|
||||
|
||||
|
||||
// 간단한 리퀘스트를 날려보자.
|
||||
// 응답을 체크해서 정리해보자.
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user