relays: send events from a single turn in a single packet

This commit is contained in:
Emery Hemingway 2024-03-20 13:06:21 +00:00
parent 78d7efc712
commit aea9a2e4e6
1 changed files with 9 additions and 8 deletions

View File

@ -35,6 +35,7 @@ type
inboundAssertions: Table[Handle, inboundAssertions: Table[Handle,
tuple[localHandle: Handle, imported: seq[WireSymbol]]] tuple[localHandle: Handle, imported: seq[WireSymbol]]]
outboundAssertions: Table[Handle, seq[WireSymbol]] outboundAssertions: Table[Handle, seq[WireSymbol]]
pendingTurn: protocol.Turn
exported: Membrane exported: Membrane
imported: Membrane imported: Membrane
nextLocalOid: Oid nextLocalOid: Oid
@ -108,14 +109,14 @@ proc deregister(relay: Relay; h: Handle) =
proc send(relay: Relay; turn: var Turn; rOid: protocol.Oid; m: Event) = proc send(relay: Relay; turn: var Turn; rOid: protocol.Oid; m: Event) =
# TODO: don't send right away. # TODO: don't send right away.
var pendingTurn: protocol.Turn relay.pendingTurn.add TurnEvent(oid: rOid, event: m)
pendingTurn.add TurnEvent(oid: rOid, event: m) queueEffect(turn, relay.facet) do (turn: var Turn):
relay.facet.run do (turn: var Turn): if relay.pendingTurn.len > 0:
var pkt = Packet( var pkt = Packet(
orKind: PacketKind.Turn, orKind: PacketKind.Turn,
turn: pendingTurn) turn: move relay.pendingTurn)
trace "C: ", pkt trace "C: ", pkt
relay.packetWriter(turn, encode pkt) relay.packetWriter(turn, encode pkt)
proc send(re: RelayEntity; turn: var Turn; ev: Event) = proc send(re: RelayEntity; turn: var Turn; ev: Event) =
send(re.relay, turn, protocol.Oid re.oid, ev) send(re.relay, turn, protocol.Oid re.oid, ev)