Setup web socket delegate

This commit is contained in:
2023-08-22 18:12:47 +09:00
parent 42e6c0304c
commit 0fc07264c1
5 changed files with 45 additions and 43 deletions

View File

@@ -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
}
}
}

View File

@@ -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!

View File

@@ -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!

View File

@@ -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
}

View File

@@ -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()
// .
// .
}