zhuhaow/NEKit

View on GitHub
src/Socket/AdapterSocket/RejectAdapter.swift

Summary

Maintainability
A
2 hrs
Test Coverage
import Foundation

public class RejectAdapter: AdapterSocket {
    public let delay: Int

    public init(delay: Int) {
        self.delay = delay
    }

    override public func openSocketWith(session: ConnectSession) {
        super.openSocketWith(session: session)

        QueueFactory.getQueue().asyncAfter(deadline: DispatchTime.now() + DispatchTimeInterval.milliseconds(delay)) {
            [weak self] in
            self?.disconnect()
        }
    }

    /**
     Disconnect the socket elegantly.
     */
    public override func disconnect(becauseOf error: Error? = nil) {
        guard !isCancelled else {
            return
        }

        _cancelled = true
        session.disconnected(becauseOf: error, by: .adapter)
        observer?.signal(.disconnectCalled(self))
        _status = .closed
        delegate?.didDisconnectWith(socket: self)
    }

    /**
     Disconnect the socket immediately.
     */
    public override func forceDisconnect(becauseOf error: Error? = nil) {
        guard !isCancelled else {
            return
        }

        _cancelled = true
        session.disconnected(becauseOf: error, by: .adapter)
        observer?.signal(.forceDisconnectCalled(self))
        _status = .closed
        delegate?.didDisconnectWith(socket: self)
    }

}