Initial Dever 0.0.1
This commit is contained in:
commit
81233d098c
1479 files changed
+163782
No files matched your search
@@ -0,0 +1,72 @@
|
||||
collect(event: dever.io.ReadEvent.Chunk(bytes), state: Bytes) (next: Bytes, stop: Bool) { next = dever.bytes.concat(state, bytes)
|
||||
stop = dever.bytes.length(next) >= 4 }
|
||||
collect(event: dever.io.ReadEvent.Failed(message), state: Bytes) (next: Bytes, stop: Bool) { fail(dever.io.ReadEvent.Failed(message)) }
|
||||
|
||||
serve(listener: dever.system.Listener) () { socket = dever.net.accept(listener)
|
||||
dever.net.timeout(socket, 1000)
|
||||
bytes = reduceUntil(collect, dever.net.chunks(socket, 4), dever.bytes.fromText(""))
|
||||
dever.net.write(socket, bytes)
|
||||
dever.net.close(socket) }
|
||||
|
||||
echo() (answer: Bool) { listener = dever.net.listen("127.0.0.1", 0)
|
||||
pending = run(serve(listener))
|
||||
socket = dever.net.connectTimeout("127.0.0.1", dever.net.port(listener), 1000)
|
||||
dever.net.timeout(socket, 1000)
|
||||
dever.net.write(socket, dever.bytes.fromText("ping"))
|
||||
bytes = reduceUntil(collect, dever.net.chunks(socket, 4), dever.bytes.fromText(""))
|
||||
dever.net.close(socket)
|
||||
wait(pending)
|
||||
dever.net.closeListener(listener)
|
||||
answer = bytes == dever.bytes.fromText("ping") }
|
||||
|
||||
accepted(result: dever.net.ConnectResult.Connected(socket), count: Int) (next: Int, stop: Bool) { dever.net.close(socket)
|
||||
next = count + 1
|
||||
stop = true }
|
||||
accepted(result: dever.net.ConnectResult.Failed(message), count: Int) (next: Int, stop: Bool) { fail(dever.net.ConnectResult.Failed(message)) }
|
||||
|
||||
connections() (answer: Bool) { listener = dever.net.listen("127.0.0.1", 0)
|
||||
port = dever.net.port(listener)
|
||||
values = dever.net.connections(listener)
|
||||
socket = dever.net.connectTimeout("127.0.0.1", port, 1000)
|
||||
count = reduceUntil(accepted, values, 0)
|
||||
remaining = reduceUntil(accepted, values, 0)
|
||||
still_open = dever.net.port(listener) == port
|
||||
dever.net.close(socket)
|
||||
dever.net.closeListener(listener)
|
||||
answer = count == 1 and remaining == 0 and still_open }
|
||||
|
||||
pair() (client: dever.system.Socket, server: dever.system.Socket) { listener = dever.net.listen("127.0.0.1", 0)
|
||||
client = dever.net.connectTimeout("127.0.0.1", dever.net.port(listener), 1000)
|
||||
server = dever.net.accept(listener)
|
||||
dever.net.closeListener(listener) }
|
||||
|
||||
reader(socket: dever.system.Socket, signal: Channel<Int>) () { send(signal, 1)
|
||||
value = dever.net.read(socket, 1) }
|
||||
|
||||
byteRead(value: dever.io.ReadState.Read(bytes)) (answer: Bool) { answer = bytes == dever.bytes.fromText("x") }
|
||||
byteRead(value: dever.io.ReadState.End) (answer: Bool) { answer = false }
|
||||
|
||||
cancelVerify() (answer: Bool) { sockets = pair()
|
||||
dever.net.timeout(sockets.client, 1000)
|
||||
signal = channel(Int, 1)
|
||||
pending = run(reader(sockets.client, signal))
|
||||
started = receive(signal)
|
||||
stop(pending)
|
||||
dever.net.write(sockets.server, dever.bytes.fromText("x"))
|
||||
received = byteRead(dever.net.read(sockets.client, 1))
|
||||
dever.net.close(sockets.client)
|
||||
dever.net.close(sockets.server)
|
||||
answer = started == 1 and received }
|
||||
|
||||
writeFailed(value: dever.io.WriteResult.Done) (answer: Bool) recover("观察关闭别名") { answer = false }
|
||||
writeFailed(value: dever.io.WriteResult.Failed(message)) (answer: Bool) recover("观察关闭别名") { answer = length(message) > 0 }
|
||||
|
||||
aliasClose() (answer: Bool) { sockets = pair()
|
||||
alias = sockets.client
|
||||
dever.net.close(alias)
|
||||
answer = writeFailed(result(dever.net.write(sockets.client, dever.bytes.fromText("x"))))
|
||||
dever.net.close(sockets.server) }
|
||||
|
||||
nullable() (socket: dever.system.Socket?) { socket = null }
|
||||
|
||||
invalid() () { socket = dever.net.connectTimeout("localhost", 80, 1000) }
|
||||
Reference in new issue
Block a user