60 lines
2.3 KiB
Plaintext
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)) }
|