Sobes.tech
Junior — Middle

Чӣ тавр кафолат додани пайвастагии автоматии WebSocket пас аз баргаштан ба барнома аз ҳолати камшуда?

sobes.tech AI

Ҷавоб аз AI

Барои худкор барқарор кардани пайвастагии WebSocket пас аз баргаштан ба барнома аз ҳолати минималӣ дар iOS, бояд давраи ҳаёти барномаро пайгирӣ кунед ва вақте ки ба ҳолати фаъол мегузаред, пайвастагиро барқарор кунед.

Ин одатан тавассути назорат кардани огоҳиномаҳои UIApplication.didBecomeActiveNotification ё иҷрои усули applicationDidBecomeActive дар делегати барнома анҷом дода мешавад. Дар ин лаҳза, ҳолати WebSocket санҷида мешавад ва агар пайвастагӣ баста шуда бошад, пайвастагии нав оғоз мешавад.

Масалан дар Swift бо истифода аз URLSessionWebSocketTask:

import UIKit

class WebSocketManager {
    private var webSocketTask: URLSessionWebSocketTask?
    private let urlSession = URLSession(configuration: .default)
    private let url = URL(string: "wss://example.com/socket")!

    init() {
        NotificationCenter.default.addObserver(self, selector: #selector(appDidBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
        connect()
    }

    func connect() {
        webSocketTask = urlSession.webSocketTask(with: url)
        webSocketTask?.resume()
        listen()
    }

    @objc private func appDidBecomeActive() {
        if webSocketTask?.state != .running {
            connect()
        }
    }

    private func listen() {
        webSocketTask?.receive { [weak self] result in
            switch result {
            case .failure(let error):
                print("Хатои дар гирифтани WebSocket: \(error)")
            case .success(let message):
                // Коркарди паём
                print("Паёми гирифташуда: \(message)")
                self?.listen() // идома додан ба гӯш кардан
            }
        }
    }

    deinit {
        NotificationCenter.default.removeObserver(self)
        webSocketTask?.cancel(with: .goingAway, reason: nil)
    }
}

Ин тариқ, ҳар вақте ки барнома ба ҳолати фаъол бармегардад, ҳолати он санҷида мешавад ва дар сурати зарурӣ, пайвастагии WebSocket дубора барқарор мешавад.