aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorMaxime Devos <maximedevos@telenet.be>2021-09-13 17:34:16 +0200
committerMaxime Devos <maximedevos@telenet.be>2021-09-21 12:21:07 +0200
commit7dfbb2919fcf908944187e99282d7221d7f1c36f (patch)
tree8baa2c65b2484df2b11997e0bd6b70793c1cbb8f /examples
parentec2062f0da48c494a6b91cfb8bf31d4edb218ba3 (diff)
downloadgnunet-scheme-7dfbb2919fcf908944187e99282d7221d7f1c36f.tar.gz
gnunet-scheme-7dfbb2919fcf908944187e99282d7221d7f1c36f.zip
examples: Distribute the example.
TODO: document the examples somewhere.
Diffstat (limited to 'examples')
-rw-r--r--examples/nse-web.scm45
1 files changed, 45 insertions, 0 deletions
diff --git a/examples/nse-web.scm b/examples/nse-web.scm
new file mode 100644
index 0000000..8d9d810
--- /dev/null
+++ b/examples/nse-web.scm
@@ -0,0 +1,45 @@
1;; Copyright (C) 2021 Maxime Devos
2;; SPDX-License-Identifier: FSFAP
3;; Copying and distribution of this file, with or without modification,
4;; are permitted in any medium without royalty provided the copyright
5;; notice and this notice are preserved. This file is offered as-is,
6;; without any warranty.
7
8(use-modules (fibers)
9 (gnu gnunet config db)
10 (gnu gnunet config fs)
11 (rnrs hashtables)
12 (gnu gnunet nse client)
13 (web server)
14 (srfi srfi-11))
15
16(define config (load-configuration))
17
18(define (url-handler server request body)
19 (define current-estimate (estimate server))
20 (define body
21 (if current-estimate
22 (format #f "timestamp: ~a~%number peers: ~a~%stddev logarithm: ~a"
23 (estimate:timestamp current-estimate)
24 (estimate:number-peers current-estimate)
25 (estimate:standard-deviation current-estimate))
26 "no estimate available yet ..."))
27 (values '((content-type text/plain)) body #f))
28
29(define (start config)
30 (define nse-server (connect config))
31 (define impl (lookup-server-impl 'fiberized))
32 (define server (open-server impl `(#:port 8089)))
33 (define (url-handler* request body)
34 (url-handler nse-server request body))
35 (let loop ()
36 (let-values (((client request body)
37 (read-client impl server)))
38 (spawn-fiber
39 (lambda ()
40 (let-values (((response body state)
41 (handle-request url-handler* request body '())))
42 (write-client impl server client response body)))))
43 (loop)))
44
45(run-fibers (lambda () (start config)))