lib/min_comm.nim
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import strutils, critbits, streams import ../core/types, ../core/parser, ../core/interpreter, ../core/utils, ../core/server # I/O proc comm_module*(i: In) = i.define("comm") .symbol("reg") do (i: In): var host, address: MinValue i.reqTwoStringLike(host, address) i.link.hosts[host.getString] = address.getString for host, response in i.syncHosts().pairs: echo host, ": ", response cfgSet("hosts", %i.link.hosts) .symbol("unreg") do (i: In): i.link.hosts.excl(i.link.name) for host, response in i.syncHosts().pairs: echo host, ": ", response cfgSet("hosts", %i.link.hosts) .symbol("set-hosts") do (i: In): var q: MinValue i.reqQuotation(q) for key, val in i.link.hosts.pairs: i.link.hosts.excl(key) for pair in q.qVal: let vals = pair.qVal if not pair.isQuotation or vals.len != 2 or not vals[0].isStringLike or not vals[1].isStringLike: raiseInvalid("Invalid host quotation") i.link.hosts.replace(vals[0].getString, vals[1].getString) cfgSet("hosts", %i.link.hosts) i.push("OK".newVal) .symbol("hosts") do (i: In): var q = newSeq[MinValue](0).newVal for key, val in i.link.hosts.pairs: q.qVal.add(@[key.newSym, val.newSym].newVal) i.push q .symbol("host") do (i: In): i.push i.link.name.newVal .symbol("to-host") do (i: In): var h, q: MinValue i.reqStringLikeAndQuotation(h, q) let host = h.getString i.executeOnHost(host, q) .symbol("to-all-hosts") do (i: In): var q: MinValue i.reqQuotation(q) for host in i.link.hosts.keys: if host != i.link.name: i.executeOnHost(host, q) .finalize() |