add ping socket
This commit is contained in:
		
							parent
							
								
									af173066d5
								
							
						
					
					
						commit
						2b96e49d6f
					
				@ -29,9 +29,12 @@ final class SocketService {
 | 
			
		||||
        connectionStateSubject.value
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private let heartbeatInterval: TimeInterval = 10
 | 
			
		||||
 | 
			
		||||
    #if canImport(SocketIO)
 | 
			
		||||
    private var manager: SocketManager?
 | 
			
		||||
    private var socket: SocketIOClient?
 | 
			
		||||
    private var heartbeatTimer: DispatchSourceTimer?
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
    private init() {}
 | 
			
		||||
@ -102,6 +105,7 @@ final class SocketService {
 | 
			
		||||
        setupSocket(with: token)
 | 
			
		||||
        updateConnectionState(.connecting)
 | 
			
		||||
        socket?.connect(withPayload: currentAuthPayload)
 | 
			
		||||
        startHeartbeat()
 | 
			
		||||
        #else
 | 
			
		||||
        updateConnectionState(.disconnected)
 | 
			
		||||
        if AppConfig.DEBUG {
 | 
			
		||||
@ -185,12 +189,47 @@ final class SocketService {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private func disconnectInternal() {
 | 
			
		||||
        stopHeartbeat()
 | 
			
		||||
        socket?.disconnect()
 | 
			
		||||
        manager?.disconnect()
 | 
			
		||||
        socket = nil
 | 
			
		||||
        manager = nil
 | 
			
		||||
        updateConnectionState(.disconnected)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private func startHeartbeat() {
 | 
			
		||||
        guard heartbeatInterval > 0 else { return }
 | 
			
		||||
        stopHeartbeat()
 | 
			
		||||
        let timer = DispatchSource.makeTimerSource(queue: syncQueue)
 | 
			
		||||
        timer.schedule(deadline: .now() + heartbeatInterval, repeating: heartbeatInterval)
 | 
			
		||||
        timer.setEventHandler { [weak self] in
 | 
			
		||||
            guard let self else { return }
 | 
			
		||||
 | 
			
		||||
            guard let socket = self.socket else {
 | 
			
		||||
                self.updateConnectionState(.disconnected)
 | 
			
		||||
                return
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            switch socket.status {
 | 
			
		||||
            case .connected:
 | 
			
		||||
                self.updateConnectionState(.connected)
 | 
			
		||||
            case .connecting:
 | 
			
		||||
                self.updateConnectionState(.connecting)
 | 
			
		||||
            case .disconnected, .notConnected:
 | 
			
		||||
                self.updateConnectionState(.connecting)
 | 
			
		||||
                socket.connect(withPayload: self.currentAuthPayload)
 | 
			
		||||
            @unknown default:
 | 
			
		||||
                self.updateConnectionState(.connecting)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        heartbeatTimer = timer
 | 
			
		||||
        timer.resume()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private func stopHeartbeat() {
 | 
			
		||||
        heartbeatTimer?.cancel()
 | 
			
		||||
        heartbeatTimer = nil
 | 
			
		||||
    }
 | 
			
		||||
    #else
 | 
			
		||||
    private func disconnectInternal() { }
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user