src/RawSocket/RawTCPSocketProtocol.swift
import Foundation
/// The raw socket protocol which represents a TCP socket.
///
/// Any concrete implementation does not need to be thread-safe.
///
/// - warning: It is expected that the instance is accessed on the specific queue only.
public protocol RawTCPSocketProtocol : class {
/// The `RawTCPSocketDelegate` instance.
var delegate: RawTCPSocketDelegate? { get set }
/// If the socket is connected.
var isConnected: Bool { get }
/// The source address.
var sourceIPAddress: IPAddress? { get }
/// The source port.
var sourcePort: Port? { get }
/// The destination address.
var destinationIPAddress: IPAddress? { get }
/// The destination port.
var destinationPort: Port? { get }
/**
Connect to remote host.
- parameter host: Remote host.
- parameter port: Remote port.
- parameter enableTLS: Should TLS be enabled.
- parameter tlsSettings: The settings of TLS.
- throws: The error occured when connecting to host.
*/
func connectTo(host: String, port: Int, enableTLS: Bool, tlsSettings: [AnyHashable: Any]?) throws
/**
Disconnect the socket.
The socket should disconnect elegantly after any queued writing data are successfully sent.
- note: Usually, any concrete implementation should wait until any pending writing data are finished then call `forceDisconnect()`.
*/
func disconnect()
/**
Disconnect the socket immediately.
- note: The socket should disconnect as soon as possible.
*/
func forceDisconnect()
/**
Send data to remote.
- parameter data: Data to send.
- warning: This should only be called after the last write is finished, i.e., `delegate?.didWriteData()` is called.
*/
func write(data: Data)
/**
Read data from the socket.
- warning: This should only be called after the last read is finished, i.e., `delegate?.didReadData()` is called.
*/
func readData()
/**
Read specific length of data from the socket.
- parameter length: The length of the data to read.
- warning: This should only be called after the last read is finished, i.e., `delegate?.didReadData()` is called.
*/
func readDataTo(length: Int)
/**
Read data until a specific pattern (including the pattern).
- parameter data: The pattern.
- warning: This should only be called after the last read is finished, i.e., `delegate?.didReadData()` is called.
*/
func readDataTo(data: Data)
/**
Read data until a specific pattern (including the pattern).
- parameter data: The pattern.
- parameter maxLength: The max length of data to scan for the pattern.
- warning: This should only be called after the last read is finished, i.e., `delegate?.didReadData()` is called.
*/
func readDataTo(data: Data, maxLength: Int)
}
/// The delegate protocol to handle the events from a raw TCP socket.
public protocol RawTCPSocketDelegate: class {
/**
The socket did disconnect.
This should only be called once in the entire lifetime of a socket. After this is called, the delegate will not receive any other events from that socket and the socket should be released.
- parameter socket: The socket which did disconnect.
*/
func didDisconnectWith(socket: RawTCPSocketProtocol)
/**
The socket did read some data.
- parameter data: The data read from the socket.
- parameter from: The socket where the data is read from.
*/
func didRead(data: Data, from: RawTCPSocketProtocol)
/**
The socket did send some data.
- parameter data: The data which have been sent to remote (acknowledged). Note this may not be available since the data may be released to save memory.
- parameter by: The socket where the data is sent out.
*/
func didWrite(data: Data?, by: RawTCPSocketProtocol)
/**
The socket did connect to remote.
- parameter socket: The connected socket.
*/
func didConnectWith(socket: RawTCPSocketProtocol)
}