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