Skip to content

Commit e598f17

Browse files
committed
Update Message struct
1 parent 13778ca commit e598f17

File tree

1 file changed

+29
-17
lines changed

1 file changed

+29
-17
lines changed

FlyingSocks/Sources/AsyncSocket.swift

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@
2929
// SOFTWARE.
3030
//
3131

32+
#if canImport(FoundationEssentials)
33+
import FoundationEssentials
34+
#else
3235
import Foundation
36+
#endif
3337

3438
public protocol AsyncSocketPool: Sendable {
3539

@@ -63,19 +67,35 @@ public extension AsyncSocketPool where Self == SocketPool<Poll> {
6367
public struct AsyncSocket: Sendable {
6468

6569
public struct Message: Sendable {
66-
public let peerAddress: any SocketAddress
67-
public let bytes: [UInt8]
68-
public let interfaceIndex: UInt32?
69-
public let localAddress: (any SocketAddress)?
70+
public var peerAddress: any SocketAddress
71+
public var payload: Data
72+
public var interfaceIndex: UInt32?
73+
public var localAddress: (any SocketAddress)?
7074

75+
public init(
76+
peerAddress: any SocketAddress,
77+
payload: Data,
78+
interfaceIndex: UInt32? = nil,
79+
localAddress: (any SocketAddress)? = nil
80+
) {
81+
self.peerAddress = peerAddress
82+
self.payload = payload
83+
self.interfaceIndex = interfaceIndex
84+
self.localAddress = localAddress
85+
}
86+
87+
@available(*, deprecated, renamed: "payload")
88+
public var bytes: [UInt8] { Array(payload) }
89+
90+
@available(*, deprecated, renamed: "init(peerAddress:payload:)")
7191
public init(
7292
peerAddress: any SocketAddress,
7393
bytes: [UInt8],
7494
interfaceIndex: UInt32? = nil,
7595
localAddress: (any SocketAddress)? = nil
7696
) {
7797
self.peerAddress = peerAddress
78-
self.bytes = bytes
98+
self.payload = Data(bytes)
7999
self.interfaceIndex = interfaceIndex
80100
self.localAddress = localAddress
81101
}
@@ -169,7 +189,7 @@ public struct AsyncSocket: Sendable {
169189
repeat {
170190
do {
171191
let (peerAddress, bytes, interfaceIndex, localAddress) = try socket.receive(length: length)
172-
return Message(peerAddress: peerAddress, bytes: bytes, interfaceIndex: interfaceIndex, localAddress: localAddress)
192+
return Message(peerAddress: peerAddress, payload: Data(bytes), interfaceIndex: interfaceIndex, localAddress: localAddress)
173193
} catch SocketError.blocked {
174194
try await pool.suspendSocket(socket, untilReadyFor: .read)
175195
} catch {
@@ -228,11 +248,12 @@ public struct AsyncSocket: Sendable {
228248

229249
#if !canImport(WinSDK)
230250
public func send(
231-
message: [UInt8],
251+
message: some Sequence<UInt8>,
232252
to peerAddress: some SocketAddress,
233253
interfaceIndex: UInt32? = nil,
234254
from localAddress: (any SocketAddress)? = nil
235255
) async throws {
256+
let message = Array(message)
236257
let sent = try await pool.loopUntilReady(for: .write, on: socket) {
237258
try socket.send(message: message, to: peerAddress, interfaceIndex: interfaceIndex, from: localAddress)
238259
}
@@ -241,18 +262,9 @@ public struct AsyncSocket: Sendable {
241262
}
242263
}
243264

244-
public func send(
245-
message: Data,
246-
to peerAddress: some SocketAddress,
247-
interfaceIndex: UInt32? = nil,
248-
from localAddress: (some SocketAddress)? = nil
249-
) async throws {
250-
try await send(message: Array(message), to: peerAddress, interfaceIndex: interfaceIndex, from: localAddress)
251-
}
252-
253265
public func send(message: Message) async throws {
254266
try await send(
255-
message: message.bytes,
267+
message: message.payload,
256268
to: AnySocketAddress(message.peerAddress),
257269
interfaceIndex: message.interfaceIndex,
258270
from: message.localAddress

0 commit comments

Comments
 (0)