tricu

An interpreted language for exploring Tree Calculus
Log | Files | Refs | README | LICENSE

registry.tri (1600B)


      1 !import base as B
      2 !import conversions as C
      3 !import io_v2 as IO
      4 !import arboricx_handlers as Registry
      5 !import arboricx_streaming_v2 as Server
      6 !import handlers as H
      7 !export main
      8 !export server
      9 !export limited
     10 !export badLogger
     11 !export listen
     12 !export cancelledServer
     13 port ["ipv4" _ value] = value
     14 port _ = 0
     15 ready listener = do IO.require
     16   address <- IO.localAddress listener
     17   writer <- IO.stdout
     18   IO.require (IO.writeAll writer (B.append (C.showNumber (port address)) [10])) IO.pure
     19 quiet _ = H.pure (B.ok t t)
     20 bad _ = H.fail "test" "logger" "write" "private logger detail"
     21 server root count window = IO.io (Server.serveCount root 1048576 quiet
     22   (IO.ipv4 [127 0 0 1] 0) window count ready)
     23 badLogger root count window = IO.io (Server.serveCount root 1048576 bad
     24   (IO.ipv4 [127 0 0 1] 0) window count ready)
     25 listen root address = IO.io (Server.serve root 1048576 Registry.stdoutLogV2 address 16 ready)
     26 main = listen "./store" (IO.ipv4 [0 0 0 0] 8080)
     27 cancelledServer root count window = IO.io (IO.scope (_ : IO.require
     28   (IO.spawn 1 1 [] (_ : Server.serve root 1048576 quiet (IO.ipv4 [127 0 0 1] 0) window ready))
     29   (spawned : case spawned of
     30     [task ticket] = do IO.require
     31       input <- IO.stdin
     32       IO.readSome input 1
     33       IO.cancel task "test shutdown"
     34       outcome <- IO.join ticket
     35       case outcome of
     36         ["cancelled" "test shutdown" []] = IO.pure t
     37         _ = IO.fail "Unexpected server cancellation outcome"
     38     _ = IO.fail "Invalid controlled server spawn")))
     39 
     40 limited root count window = IO.io (Server.serveCount root 4 quiet
     41   (IO.ipv4 [127 0 0 1] 0) window count ready)