diff options
author | Maxime Devos <maximedevos@telenet.be> | 2022-09-09 17:15:47 +0200 |
---|---|---|
committer | Maxime Devos <maximedevos@telenet.be> | 2022-09-09 17:15:47 +0200 |
commit | d4bf64f2cc35619b6da7c58db366a0d37255b4e2 (patch) | |
tree | 62971189c774dc1353e0042823f9d0bc55797727 | |
parent | 37668b828a663de535b25b5f72ea848657d49f3d (diff) | |
download | gnunet-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.scm | 28 | ||||
-rw-r--r-- | gnu/gnunet/dht/client.scm | 40 | ||||
-rw-r--r-- | gnu/gnunet/nse/client.scm | 33 | ||||
-rw-r--r-- | gnu/gnunet/server.scm | 15 |
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 |
750 | connection is made asynchronuously; the optional thunk @var{connected} is called | 737 | connection is made asynchronuously; the optional thunk @var{connected} is called |
751 | when the connection has been made. The connection can break; the optional thunk | 738 | when 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 |
753 | code automatically tries to reconnect, so @var{connected} can be called after | 740 | code 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 | ||
194 | When connected, the thunk @var{connected} is called and estimates | 191 | When connected, the thunk @var{connected} is called and estimates |
@@ -201,17 +198,9 @@ shortly after calling @var{disconnected}. | |||
201 | 198 | ||
202 | The procedures @var{updated}, @var{connected} and @var{disconnected} are optional." | 199 | The 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))) | ||