-USING: accessors arrays calendar concurrency.promises fry io
-io.encodings.ascii io.encodings.utf8 io.servers
-io.servers.private io.sockets kernel namespaces scratchpad
-sequences threads tools.test ;
+USING: accessors arrays concurrency.flags fry io io.encodings.ascii
+io.encodings.utf8 io.servers.private io.sockets kernel namespaces
+sequences sets threads tools.test ;
IN: io.servers
{ t } [ ascii <threaded-server> listen-on empty? ] unit-test
2array >>secure
start-server stop-server
-] unit-test
\ No newline at end of file
+] unit-test
+
+! add-running-server
+[
+ ascii <threaded-server> HS{ } clone 2dup adjoin
+ add-running-server
+] [ server-already-running? ] must-fail-with
+
+! stop-server
+[
+ ascii <threaded-server> <flag> >>server-stopped
+ stop-server
+] [ server-not-running? ] must-fail-with
<PRIVATE
-: must-be-running ( threaded-server -- threaded-server )
- dup running-servers get in? [ server-not-running ] unless ;
+: add-running-server ( threaded-server running-servers -- )
+ 2dup in? [ server-already-running ] [ adjoin ] if ;
-: must-not-be-running ( threaded-server -- threaded-server )
- dup running-servers get in? [ server-already-running ] when ;
-
-: add-running-server ( threaded-server -- )
- must-not-be-running
- running-servers get adjoin ;
-
-: remove-running-server ( threaded-server -- )
- must-be-running
- running-servers get delete ;
+: remove-running-server ( threaded-server running-servers -- )
+ 2dup in? [ delete ] [ drop server-not-running ] if ;
PRIVATE>
[ ] [ name>> ] bi
[
set-servers
- dup add-running-server
+ dup running-servers get add-running-server
dup servers>>
[
[ '[ _ _ [ start-accept-loop ] with-disposal ] ]
: stop-server ( threaded-server -- )
dup server-running? [
- [ remove-running-server ]
+ [ running-servers get remove-running-server ]
[
[
[ secure-context>> [ &dispose drop ] when* ]