mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 17:34:43 +00:00
67 lines
1.6 KiB
Nim
67 lines
1.6 KiB
Nim
discard """
|
|
output: '''success'''
|
|
cmd: "nim c --gc:orc -d:release $file"
|
|
"""
|
|
|
|
# bug #17170
|
|
|
|
when true:
|
|
import asyncdispatch
|
|
|
|
type
|
|
Flags = ref object
|
|
returnedEof, reading: bool
|
|
|
|
proc dummy(): Future[string] {.async.} =
|
|
result = "foobar"
|
|
|
|
proc hello(s: Flags) {.async.} =
|
|
let buf =
|
|
try:
|
|
await dummy()
|
|
except CatchableError as exc:
|
|
# When an exception happens here, the Bufferstream is effectively
|
|
# broken and no more reads will be valid - for now, return EOF if it's
|
|
# called again, though this is not completely true - EOF represents an
|
|
# "orderly" shutdown and that's not what happened here..
|
|
s.returnedEof = true
|
|
raise exc
|
|
finally:
|
|
s.reading = false
|
|
|
|
waitFor hello(Flags())
|
|
echo "success"
|
|
|
|
# bug #18240
|
|
import tables
|
|
|
|
type
|
|
TopicHandler* = proc(topic: string,
|
|
data: seq[byte]): Future[void] {.gcsafe, raises: [Defect].}
|
|
|
|
PeerID* = object
|
|
data*: seq[byte]
|
|
|
|
PeerInfo* = ref object of RootObj
|
|
peerId*: PeerID
|
|
|
|
Connection* = ref object of RootObj
|
|
peerInfo*: PeerInfo
|
|
|
|
PubSubPeer* = ref object of RootObj
|
|
codec*: string
|
|
|
|
PubSub* = ref object of RootObj
|
|
topics*: Table[string, seq[TopicHandler]]
|
|
peers*: Table[PeerID, PubSubPeer]
|
|
|
|
proc getOrCreatePeer*(myParam: PubSub, peerId: PeerID, protos: seq[string]): PubSubPeer =
|
|
myParam.peers.withValue(peerId, peer):
|
|
return peer[]
|
|
|
|
method handleConn*(myParam: PubSub,
|
|
conn: Connection,
|
|
proto: string) {.base, async.} =
|
|
myParam.peers.withValue(conn.peerInfo.peerId, peer):
|
|
let peerB = peer[]
|