Files
core/lib/dever/net/socket.dever
T
2026-11-03 03:32:07 +00:00

60 lines
2.3 KiB
Plaintext

public type ConnectResult {
Connected(socket: dever.system.Socket)
error Failed(message: Text)
}
public type ReadStreamResult {
Streaming(stream: AsyncStream<dever.io.ReadEvent>)
error Failed(message: Text)
}
type SystemReadResult {
Read(bytes: Bytes)
End
error Failed(message: Text)
}
public connect(host: Text, port: Int) (socket: dever.system.Socket) {
socket = connected(dever.system.tcpConnect(host, port))
}
public connectTimeout(address: Text, port: Int, milliseconds: Int) (socket: dever.system.Socket) {
socket = connected(dever.system.tcpConnectTimeout(address, port, milliseconds))
}
connected(result: ConnectResult.Connected(socket)) (value: dever.system.Socket) { value = socket }
connected(result: ConnectResult.Failed(message)) (value: dever.system.Socket) { fail(ConnectResult.Failed(message)) }
public read(socket: dever.system.Socket, limit: Int) (state: dever.io.ReadState) {
state = readState(dever.system.tcpRead(socket, limit))
}
readState(result: SystemReadResult.Read(bytes)) (state: dever.io.ReadState) { state = dever.io.ReadState.Read(bytes) }
readState(result: SystemReadResult.End) (state: dever.io.ReadState) { state = dever.io.ReadState.End }
readState(result: SystemReadResult.Failed(message)) (state: dever.io.ReadState) { fail(dever.io.ReadResult.Failed(message)) }
public write(socket: dever.system.Socket, bytes: Bytes) () {
wrote(dever.system.tcpWrite(socket, bytes))
}
public timeout(socket: dever.system.Socket, milliseconds: Int) () {
wrote(dever.system.tcpTimeout(socket, milliseconds))
}
wrote(result: dever.io.WriteResult.Done) () {}
wrote(result: dever.io.WriteResult.Failed(message)) () { fail(dever.io.WriteResult.Failed(message)) }
public close(socket: dever.system.Socket) () {
closed(dever.system.tcpClose(socket))
}
closed(result: dever.io.CloseResult.Closed) () {}
closed(result: dever.io.CloseResult.Failed(message)) () { fail(dever.io.CloseResult.Failed(message)) }
public chunks(socket: dever.system.Socket, limit: Int) (stream: AsyncStream<dever.io.ReadEvent>) {
stream = readStream(dever.system.tcpChunks(socket, limit))
}
readStream(result: ReadStreamResult.Streaming(stream)) (value: AsyncStream<dever.io.ReadEvent>) { value = stream }
readStream(result: ReadStreamResult.Failed(message)) (value: AsyncStream<dever.io.ReadEvent>) { fail(ReadStreamResult.Failed(message)) }