feat(base): 0.R4 - a queue keeps its own count, so every package verb takes only its own state; ludic migrate state --prune
ludic.base's Queue<T> carries a QueueTag (its name and pending count): queue_new(name), q_push(q, v), q_drain(q), q_clear(q) take no BaseState, and core_undrained(tags) names the given queues still holding facts. A reducer on a package's state can now call that package's verbs (wallet_earn(wallet_st, n)). ludic migrate state --prune (ludicc --migrate-prune) takes out each state parameter a function no longer uses, nor anything it calls, and the argument that fills it - including an argument for a parameter the callee has dropped, which is taken out before the call is checked, so a generic's T is told by the argument that says it. A reducer keeps its state. --dry-run now counts the edits it would make. Every package was moved with it: 608 base_st parameters and their arguments, 1889 edits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
8cf4b3fed6
commit
71735b10a2
151 changed files with 58668 additions and 54719 deletions
|
|
@ -1,17 +1,17 @@
|
|||
# receive.ludic - what arrived, unwrapped from the relay, checked, acknowledged and put in order
|
||||
# on the inbox. A reliable message is taken strictly in order; one that arrives early is dropped
|
||||
# and comes again.
|
||||
function net__pump(base_st: mut BaseState, net_st: mut NetState) -> void {
|
||||
function net__pump(net_st: mut NetState) -> void {
|
||||
if net_st.net__sock <= 0 { return }
|
||||
for guard in 0 .. 200 {
|
||||
let n = NetSocket.recv(net_st.net__sock, net_st.net__in, NET_MTU + 64)
|
||||
if n <= 0 { return }
|
||||
let n2 = net__unwrap(net_st, n, NetSocket.from_ip(net_st.net__sock), NetSocket.from_port(net_st.net__sock))
|
||||
if n2 > 0 { net__packet(base_st, net_st, n2, net_st.net__from_ip, net_st.net__from_port) }
|
||||
if n2 > 0 { net__packet(net_st, n2, net_st.net__from_ip, net_st.net__from_port) }
|
||||
}
|
||||
}
|
||||
|
||||
function net__packet(base_st: mut BaseState, net_st: mut NetState, n: int, ip: int, port: int) -> void {
|
||||
function net__packet(net_st: mut NetState, n: int, ip: int, port: int) -> void {
|
||||
if NetWorld.trace() { net__log(`in {n} bytes from {Udp.ip_text(ip)}:{port}`) }
|
||||
if n < 20 { return }
|
||||
if net__stun_packet(net_st, n) { return } # what the router looks like from outside
|
||||
|
|
@ -25,7 +25,7 @@ function net__packet(base_st: mut BaseState, net_st: mut NetState, n: int, ip: i
|
|||
# (a re-join) carries the old numbers and would drop the new hello as already taken
|
||||
let ack = nb_get32(net_st.net__in, 12)
|
||||
if ack > p.acked and ack < p.next_id { p.acked = ack }
|
||||
net__messages(base_st, net_st, slot, n)
|
||||
net__messages(net_st, slot, n)
|
||||
}
|
||||
|
||||
# the known peer at that address, a stranger's new slot (a host, and only with a hello), or -1
|
||||
|
|
@ -47,7 +47,7 @@ function net__slot_for(net_st: mut NetState, n: int, ip: int, port: int) -> int
|
|||
return -1
|
||||
}
|
||||
|
||||
function net__messages(base_st: mut BaseState, net_st: mut NetState, slot: int, n: int) -> void {
|
||||
function net__messages(net_st: mut NetState, slot: int, n: int) -> void {
|
||||
let p = net_st.net__peers[slot]
|
||||
let from = nb_get32(net_st.net__in, 8)
|
||||
let count = nb_get32(net_st.net__in, 16)
|
||||
|
|
@ -71,13 +71,13 @@ function net__messages(base_st: mut BaseState, net_st: mut NetState, slot: int,
|
|||
p.ack_due = true
|
||||
if id != p.recv_id + 1 { take = false } else { p.recv_id = id }
|
||||
}
|
||||
if take { net__deliver(base_st, net_st, slot, from, kind, o, ml) }
|
||||
if take { net__deliver(net_st, slot, from, kind, o, ml) }
|
||||
o += ml
|
||||
}
|
||||
}
|
||||
|
||||
# onto the inbox - except a heartbeat, and on a host anything but a hello before its welcome
|
||||
function net__deliver(base_st: mut BaseState, net_st: mut NetState, slot: int, from: int, kind: int, o: int, ml: int) -> void {
|
||||
function net__deliver(net_st: mut NetState, slot: int, from: int, kind: int, o: int, ml: int) -> void {
|
||||
if kind == NET_BEAT { return }
|
||||
if net_st.net__state == NET_HOSTING and net_st.net__peers[slot].pid < 2 and kind != NET_HELLO { return }
|
||||
let m = new NetMessage
|
||||
|
|
@ -87,5 +87,5 @@ function net__deliver(base_st: mut BaseState, net_st: mut NetState, slot: int, f
|
|||
m.len = ml
|
||||
m.data = buffer(ml)
|
||||
nb_copy(m.data, 0, net_st.net__in, o, ml)
|
||||
q_push(base_st, net_inbox(base_st, net_st), m)
|
||||
q_push(net_inbox(net_st), m)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue