البديل من العمل مع مآخذ الويب في iOS في Swift / Wrote مديرًا للعمل مع websocket

مرحبا بالجميع.

منذ 4 سنوات كنت أتعامل مع مآخذ الويب في نظام التشغيل iOS ، ثم قمت بحل المشكلة باستخدام إحدى مكتبات cocoapods ، المقالة على Habré. واليوم أريد أن أظهر حلاً آخر ، أصلي بدون كوكوبودس.

كتبت مديري للعمل مع مآخذ الويب (المدير في هذه الحالة هو فئة مفردة يمكن استدعاءها في أي مكان في التطبيق ، حيث سيتم إنشاء مثيل المفرد مرة واحدة فقط للتطبيق بأكمله).

سأستخدم الوسائل المحلية لأغراضي.

import Foundation class WSManager { public static let shared = WSManager() //   private init(){} private var dataArray = [__]() let webSocketTask = URLSession(configuration: .default).webSocketTask(with: URL(string: "wss://__"*)) //   public func connectToWebSocket() { webSocketTask.resume() self.receiveData() { _ in } } //     public func subscribeBtcUsd() { let message = URLSessionWebSocketTask.Message.string("SUBSCRIBE: __") webSocketTask.send(message) { error in if let error = error { print("WebSocket couldn't send message because: \(error)") } } } //     public func unSubscribeBtcUsd() { let message = URLSessionWebSocketTask.Message.string("UNSUBSCRIBE: __ ") webSocketTask.send(message) { error in if let error = error { print("WebSocket couldn't send message because: \(error)") } } } //  ,       func receiveData(completion: @escaping ([__]?) -> Void) { webSocketTask.receive { result in switch result { case .failure(let error): print("Error in receiving message: \(error)") case .success(let message): switch message { case .string(let text): let data: Data? = text.data(using: .utf8) let srvData = try? CODABLE_____.decode(from: data ?? Data()) for singleData in srvData ?? [] { self.dataArray.append(__(1: singleData.parametr1, 2: singleData.parametr2, 3: singleData.parametr3)) } case .data(let data): //         print("Received data: \(data)") @unknown default: debugPrint("Unknown message") } self.receiveData() {_ in } //  } } completion(self.dataArray) //          } } 

هنا مدير ، مثال على مكالمة

 import UIKit class MainViewController: UIViewController { private var dataArray = [__]() override func viewDidLoad() { super.viewDidLoad() WSManager.shared.connectToWebSocket() //  WSManager.shared.subscribeBtcUsd() //    self.getData() //  } private func getData() { //  WSManager.shared.receiveData() { [weak self] (data) in guard let self = self else { return } guard let data = data else { return } self.dataArray = data //              } } } 

* عن العنوان
wss: // هذا هو تناظرية https: //
ws: // هذا هو تناظرية http: //

هذا هو الخيار للعمل مع مقبس الويب الذي تم إيقافه ، إذا كانت لديك أسئلة أو اقتراحات أو تعاليم حول كيفية القيام بالكتابة بشكل أفضل ، سأكون سعيدًا :)

حالة اختبار متاحة في جيثب بلدي

أنا أيضا استخدام التمديد لفك التشفير الذي يتوفر أيضا في جيثب بلدي
أنا أتحدث عن هذا الجزء

 let srvData = try? CODABLE_____.decode(from: data ?? Data()) 

Source: https://habr.com/ru/post/ar485468/


All Articles