aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Devos <maximedevos@telenet.be>2022-09-09 17:15:47 +0200
committerMaxime Devos <maximedevos@telenet.be>2022-09-09 17:15:47 +0200
commitd4bf64f2cc35619b6da7c58db366a0d37255b4e2 (patch)
tree62971189c774dc1353e0042823f9d0bc55797727
parent37668b828a663de535b25b5f72ea848657d49f3d (diff)
downloadgnunet-scheme-d4bf64f2cc35619b6da7c58db366a0d37255b4e2.tar.gz
gnunet-scheme-d4bf64f2cc35619b6da7c58db366a0d37255b4e2.zip
server: Unify loop spawning.
Reduces duplication and imports. * gnu/gnunet/server.scm (spawn-server-loop): New procedure. * gnu/gnunet/nse/client.scm (<loop>): Give a default value to 'default'. (connect): Remove default value of 'updated', as it is unused. Also use spawn-server-loop. * gnu/gnunet/dht/client.scm (connect): Likewise * gnu/gnunet/cadet/client.scm (connect): Likewise
-rw-r--r--gnu/gnunet/cadet/client.scm28
-rw-r--r--gnu/gnunet/dht/client.scm40
-rw-r--r--gnu/gnunet/nse/client.scm33
-rw-r--r--gnu/gnunet/server.scm15
4 files changed, 45 insertions, 71 deletions
diff --git a/gnu/gnunet/cadet/client.scm b/gnu/gnunet/cadet/client.scm
index 7de91fb..7772cd5 100644
--- a/gnu/gnunet/cadet/client.scm
+++ b/gnu/gnunet/cadet/client.scm
@@ -69,7 +69,7 @@
69 server-terminal-condition 69 server-terminal-condition
70 server-control-channel 70 server-control-channel
71 handle-control-message! 71 handle-control-message!
72 make-loop run-loop server->loop-arguments loop:control-channel 72 make-loop run-loop spawn-server-loop loop:control-channel
73 loop:terminal-condition) 73 loop:terminal-condition)
74 (only (gnu gnunet hashcode struct) 74 (only (gnu gnunet hashcode struct)
75 /hashcode:512) 75 /hashcode:512)
@@ -88,7 +88,7 @@
88 (only (rnrs base) 88 (only (rnrs base)
89 begin define lambda assert quote cons apply values 89 begin define lambda assert quote cons apply values
90 case else = define-syntax + expt - let and > 90 case else = define-syntax + expt - let and >
91 not if <) 91 not if < append list)
92 (only (rnrs control) 92 (only (rnrs control)
93 when) 93 when)
94 (only (pfds bbtrees) 94 (only (pfds bbtrees)
@@ -148,23 +148,17 @@
148 148
149 (define empty-bbtree (make-bbtree <)) 149 (define empty-bbtree (make-bbtree <))
150 150
151 (define* (connect config #:key (connected values) (disconnected values) 151 (define* (connect config #:key connected disconnected spawn #:rest r)
152 (spawn spawn-fiber))
153 "Asynchronuously connect to the CADET service, using the configuration 152 "Asynchronuously connect to the CADET service, using the configuration
154@var{config}, returning a CADET server object." 153@var{config}, returning a CADET server object."
155 (define server (%make-server)) 154 (apply spawn-server-loop (%make-server)
156 (define loop 155 #:make-message-handlers make-message-handlers
157 (apply make-loop 156 #:control-message-handler control-message-handler
158 #:make-message-handlers make-message-handlers 157 #:service-name "cadet"
159 #:control-message-handler control-message-handler 158 #:configuration config
160 #:service-name "cadet" 159 #:initial-extra-loop-arguments
161 #:configuration config 160 (list empty-bbtree %minimum-local-channel-id)
162 #:connected connected 161 r))
163 #:disconnected disconnected
164 #:spawn spawn
165 (server->loop-arguments server)))
166 (spawn (lambda () (run-loop loop empty-bbtree %minimum-local-channel-id)))
167 server)
168 162
169 ;; channel-number->channel-map: 163 ;; channel-number->channel-map:
170 ;; A 'bbtree' from channel numbers to their corresponding 164 ;; A 'bbtree' from channel numbers to their corresponding
diff --git a/gnu/gnunet/dht/client.scm b/gnu/gnunet/dht/client.scm
index bd0feb4..d4c32eb 100644
--- a/gnu/gnunet/dht/client.scm
+++ b/gnu/gnunet/dht/client.scm
@@ -77,17 +77,14 @@
77 (gnu gnunet hashcode struct) 77 (gnu gnunet hashcode struct)
78 (gnu gnunet mq) 78 (gnu gnunet mq)
79 (gnu gnunet mq handler) 79 (gnu gnunet mq handler)
80 (gnu gnunet mq-impl stream)
81 (gnu gnunet mq envelope) 80 (gnu gnunet mq envelope)
82 (only (gnu gnunet server) 81 (only (gnu gnunet server)
83 maybe-send-control-message! maybe-send-control-message!* 82 maybe-send-control-message! maybe-send-control-message!*
84 maybe-ask* answer 83 maybe-ask* answer
85 <server> server-terminal-condition server-control-channel 84 <server> server-terminal-condition server-control-channel
86 make-disconnect! handle-control-message! 85 make-disconnect! handle-control-message!
87 make-loop loop:control-channel loop:connected 86 loop:terminal-condition loop:control-channel
88 loop:disconnected loop:configuration loop:service-name 87 run-loop spawn-server-loop)
89 loop:spawner loop:terminal-condition loop:lost-and-found
90 loop:control-channel run-loop server->loop-arguments)
91 (only (guile) 88 (only (guile)
92 pk define-syntax-rule define* lambda* error 89 pk define-syntax-rule define* lambda* error
93 ->bool and=>) 90 ->bool and=>)
@@ -102,16 +99,7 @@
102 bbtree-delete make-bbtree bbtree-ref) 99 bbtree-delete make-bbtree bbtree-ref)
103 (only (gnu extractor enum) 100 (only (gnu extractor enum)
104 symbol-value) 101 symbol-value)
105 (only (fibers)
106 spawn-fiber)
107 (only (fibers conditions)
108 make-condition signal-condition! wait-operation wait)
109 (only (fibers operations)
110 perform-operation choice-operation wrap-operation)
111 (only (fibers channels)
112 put-operation get-operation put-message)
113 (only (gnu gnunet concurrency lost-and-found) 102 (only (gnu gnunet concurrency lost-and-found)
114 make-lost-and-found collect-lost-and-found-operation
115 losable-lost-and-found) 103 losable-lost-and-found)
116 (gnu gnunet dht struct) 104 (gnu gnunet dht struct)
117 (only (gnu gnunet message protocols) 105 (only (gnu gnunet message protocols)
@@ -130,7 +118,7 @@
130 quote case else values apply let cond if > eq? 118 quote case else values apply let cond if > eq?
131 <= expt assert exact? integer? lambda for-each 119 <= expt assert exact? integer? lambda for-each
132 not expt min max div-and-mod positive? define-syntax 120 not expt min max div-and-mod positive? define-syntax
133 vector cons) 121 vector cons append list)
134 (only (rnrs control) 122 (only (rnrs control)
135 unless when) 123 unless when)
136 (only (rnrs records syntactic) 124 (only (rnrs records syntactic)
@@ -744,27 +732,19 @@ message header is assumed to be correct."
744 (make-disconnect! 'distributed-hash-table ; for error messages 732 (make-disconnect! 'distributed-hash-table ; for error messages
745 server:dht?)) 733 server:dht?))
746 734
747 (define* (connect config #:key (connected values) (disconnected values) 735 (define* (connect config #:key connected disconnected spawn #:rest r)
748 (spawn spawn-fiber))
749 "Connect to the DHT service, using the configuration @var{config}. The 736 "Connect to the DHT service, using the configuration @var{config}. The
750connection is made asynchronuously; the optional thunk @var{connected} is called 737connection is made asynchronuously; the optional thunk @var{connected} is called
751when the connection has been made. The connection can break; the optional thunk 738when the connection has been made. The connection can break; the optional thunk
752@var{disconnected} is called when it does. If the connection breaks, the client 739@var{disconnected} is called when it does. If the connection breaks, the client
753code automatically tries to reconnect, so @var{connected} can be called after 740code automatically tries to reconnect, so @var{connected} can be called after
754@var{disconnected}. This procedure returns a DHT server object." 741@var{disconnected}. This procedure returns a DHT server object."
755 (define server (make-server)) 742 (apply spawn-server-loop (make-server)
756 (define loop 743 #:make-message-handlers make-message-handlers
757 (apply make-loop 744 #:control-message-handler control-message-handler
758 #:make-message-handlers make-message-handlers 745 #:configuration config
759 #:control-message-handler control-message-handler 746 #:service-name "dht"
760 #:configuration config 747 #:initial-extra-loop-arguments (list empty-bbtree empty-bbtree) r))
761 #:service-name "dht"
762 #:spawn spawn
763 #:connected connected
764 #:disconnected disconnected #:spawn spawn
765 (server->loop-arguments server)))
766 (spawn (lambda () (run-loop loop empty-bbtree empty-bbtree)))
767 server)
768 748
769 ;; TODO: put in new module? 749 ;; TODO: put in new module?
770 (define (make-weak-reference to) 750 (define (make-weak-reference to)
diff --git a/gnu/gnunet/nse/client.scm b/gnu/gnunet/nse/client.scm
index 0cc4300..126dedc 100644
--- a/gnu/gnunet/nse/client.scm
+++ b/gnu/gnunet/nse/client.scm
@@ -66,12 +66,8 @@
66 (gnu gnunet message protocols) 66 (gnu gnunet message protocols)
67 (only (gnu gnunet server) 67 (only (gnu gnunet server)
68 <server> make-disconnect! 68 <server> make-disconnect!
69 server-terminal-condition
70 server-control-channel
71 handle-control-message! 69 handle-control-message!
72 <loop> run-loop server->loop-arguments 70 <loop> spawn-server-loop run-loop loop:terminal-condition)
73 loop:connected loop:disconnected
74 loop:control-channel loop:terminal-condition)
75 (only (gnu gnunet nse struct) 71 (only (gnu gnunet nse struct)
76 /:msg:nse:estimate)) 72 /:msg:nse:estimate))
77 (begin 73 (begin
@@ -129,7 +125,8 @@ timestamp."
129 (immutable estimate/box loop:estimate/box)) 125 (immutable estimate/box loop:estimate/box))
130 (protocol 126 (protocol
131 (lambda (%make) 127 (lambda (%make)
132 (lambda* (#:key updated estimate/box #:allow-other-keys #:rest r) 128 (lambda* (#:key (updated values) estimate/box #:allow-other-keys
129 #:rest r)
133 ((apply %make r) updated estimate/box))))) 130 ((apply %make r) updated estimate/box)))))
134 131
135 ;; See 'connect'. TODO: gc test fails 132 ;; See 'connect'. TODO: gc test fails
@@ -187,8 +184,8 @@ timestamp."
187 (handle-control-message! message message-queue 184 (handle-control-message! message message-queue
188 (loop:terminal-condition loop) k/reconnect!)))) 185 (loop:terminal-condition loop) k/reconnect!))))
189 186
190 (define* (connect config #:key (updated values) (connected values) 187 (define* (connect config #:key updated connected disconnected spawn
191 (disconnected values) (spawn spawn-fiber)) 188 #:rest r)
192 "Connect to the NSE service in the background. 189 "Connect to the NSE service in the background.
193 190
194When connected, the thunk @var{connected} is called and estimates 191When connected, the thunk @var{connected} is called and estimates
@@ -201,17 +198,9 @@ shortly after calling @var{disconnected}.
201 198
202The procedures @var{updated}, @var{connected} and @var{disconnected} are optional." 199The procedures @var{updated}, @var{connected} and @var{disconnected} are optional."
203 (define server (%make-server)) 200 (define server (%make-server))
204 (define loop 201 (apply spawn-server-loop server #:make-loop make-loop:nse
205 (apply make-loop:nse 202 #:make-message-handlers make-message-handlers
206 #:make-message-handlers make-message-handlers 203 #:control-message-handler control-message-handler
207 #:control-message-handler control-message-handler 204 #:service-name "nse"
208 #:service-name "nse" 205 #:configuration config
209 #:configuration config 206 #:estimate/box (server-estimate/box server) r))))
210 #:connected connected
211 #:disconnected disconnected
212 #:spawn spawn
213 #:estimate/box (server-estimate/box server)
214 #:updated updated
215 (server->loop-arguments server)))
216 (spawn (lambda () (run-loop loop)))
217 server)))
diff --git a/gnu/gnunet/server.scm b/gnu/gnunet/server.scm
index 2dbace8..425735e 100644
--- a/gnu/gnunet/server.scm
+++ b/gnu/gnunet/server.scm
@@ -28,7 +28,7 @@
28 <loop> make-loop server->loop-arguments 28 <loop> make-loop server->loop-arguments
29 loop:connected loop:disconnected loop:terminal-condition 29 loop:connected loop:disconnected loop:terminal-condition
30 loop:control-channel loop:configuration loop:service-name 30 loop:control-channel loop:configuration loop:service-name
31 loop:spawner loop:lost-and-found run-loop) 31 loop:spawner loop:lost-and-found run-loop spawn-server-loop)
32 (import (only (rnrs base) 32 (import (only (rnrs base)
33 begin define cons case else apply values quote lambda 33 begin define cons case else apply values quote lambda
34 if error list let and append) 34 if error list let and append)
@@ -263,4 +263,15 @@ TODO: maybe 'lost'"
263 (define (control state . rest) 263 (define (control state . rest)
264 "The main event loop." 264 "The main event loop."
265 (apply control* (perform-operation loop-operation) state rest)) 265 (apply control* (perform-operation loop-operation) state rest))
266 (apply control state rest)))) 266 (apply control state rest))
267
268 (define* (spawn-server-loop server #:key (make-loop make-loop)
269 (initial-extra-loop-arguments '())
270 (spawn spawn-fiber) #:allow-other-keys
271 #:rest arguments)
272 "[TODO] and return @var{server}"
273 (define loop-arguments (append arguments (server->loop-arguments server)))
274 (spawn (lambda ()
275 (apply run-loop (apply make-loop loop-arguments)
276 initial-extra-loop-arguments)))
277 server)))