change threaded-server and managed-server to take an encoding
parent
3df3ffc416
commit
50e6fac013
|
@ -13,9 +13,8 @@ SYMBOL: local-node
|
|||
[ first2 get-process send ] [ stop-this-server ] if* ;
|
||||
|
||||
: <node-server> ( addrspec -- threaded-server )
|
||||
<threaded-server>
|
||||
binary <threaded-server>
|
||||
swap >>insecure
|
||||
binary >>encoding
|
||||
"concurrency.distributed" >>name
|
||||
[ handle-node-client ] >>handler ;
|
||||
|
||||
|
|
|
@ -341,12 +341,11 @@ M: ftp-server handle-client* ( server -- )
|
|||
] with-destructors ;
|
||||
|
||||
: <ftp-server> ( directory port -- server )
|
||||
ftp-server new-threaded-server
|
||||
latin1 ftp-server new-threaded-server
|
||||
swap >>insecure
|
||||
swap canonicalize-path >>serving-directory
|
||||
"ftp.server" >>name
|
||||
5 minutes >>timeout
|
||||
latin1 >>encoding ;
|
||||
5 minutes >>timeout ;
|
||||
|
||||
: ftpd ( directory port -- )
|
||||
<ftp-server> start-server ;
|
||||
|
|
|
@ -269,7 +269,7 @@ M: http-server handle-client*
|
|||
] with-destructors ;
|
||||
|
||||
: <http-server> ( -- server )
|
||||
http-server new-threaded-server
|
||||
ascii http-server new-threaded-server
|
||||
"http.server" >>name
|
||||
"http" protocol-port >>insecure
|
||||
"https" protocol-port >>secure ;
|
||||
|
|
|
@ -83,8 +83,8 @@ HELP: new-threaded-server
|
|||
{ $description "Creates a new instance of a subclass of " { $link threaded-server } ". Subclasses can implement the " { $link handle-client* } " generic word." } ;
|
||||
|
||||
HELP: <threaded-server>
|
||||
{ $values { "threaded-server" threaded-server } }
|
||||
{ $description "Creates a new threaded server. Its slots should be filled in as per " { $link "server-config" } ", before " { $link start-server } " is called to begin waiting for connections." } ;
|
||||
{ $values { "encoding" "an encoding descriptor" } { "threaded-server" threaded-server } }
|
||||
{ $description "Creates a new threaded server with streams encoded " { $snippet "encoding" } ". Its slots should be filled in as per " { $link "server-config" } ", before " { $link start-server } " is called to begin waiting for connections." } ;
|
||||
|
||||
HELP: remote-address
|
||||
{ $var-description "Variable holding the address specifier of the current client connection. See " { $link "network-addressing" } "." } ;
|
||||
|
|
|
@ -3,10 +3,10 @@ USING: tools.test io.servers.connection io.sockets namespaces
|
|||
io.servers.connection.private kernel accessors sequences
|
||||
concurrency.promises io.encodings.ascii io threads calendar ;
|
||||
|
||||
[ t ] [ <threaded-server> listen-on empty? ] unit-test
|
||||
[ t ] [ ascii <threaded-server> listen-on empty? ] unit-test
|
||||
|
||||
[ f ] [
|
||||
<threaded-server>
|
||||
ascii <threaded-server>
|
||||
25 internet-server >>insecure
|
||||
listen-on
|
||||
empty?
|
||||
|
@ -19,16 +19,16 @@ concurrency.promises io.encodings.ascii io threads calendar ;
|
|||
and
|
||||
] unit-test
|
||||
|
||||
[ ] [ <threaded-server> init-server drop ] unit-test
|
||||
[ ] [ ascii <threaded-server> init-server drop ] unit-test
|
||||
|
||||
[ 10 ] [
|
||||
<threaded-server>
|
||||
ascii <threaded-server>
|
||||
10 >>max-connections
|
||||
init-server semaphore>> count>>
|
||||
] unit-test
|
||||
|
||||
[ ] [
|
||||
<threaded-server>
|
||||
ascii <threaded-server>
|
||||
5 >>max-connections
|
||||
0 >>insecure
|
||||
[ "Hello world." write stop-this-server ] >>handler
|
||||
|
|
|
@ -27,18 +27,18 @@ ready ;
|
|||
|
||||
: internet-server ( port -- addrspec ) f swap <inet> ;
|
||||
|
||||
: new-threaded-server ( class -- threaded-server )
|
||||
: new-threaded-server ( encoding class -- threaded-server )
|
||||
new
|
||||
swap >>encoding
|
||||
"server" >>name
|
||||
DEBUG >>log-level
|
||||
ascii >>encoding
|
||||
1 minutes >>timeout
|
||||
V{ } clone >>sockets
|
||||
<secure-config> >>secure-config
|
||||
[ "No handler quotation" throw ] >>handler
|
||||
<flag> >>ready ; inline
|
||||
|
||||
: <threaded-server> ( -- threaded-server )
|
||||
: <threaded-server> ( encoding -- threaded-server )
|
||||
threaded-server new-threaded-server ;
|
||||
|
||||
GENERIC: handle-client* ( threaded-server -- )
|
||||
|
|
|
@ -11,9 +11,8 @@ IN: fuel.remote
|
|||
[ [ print-error-and-restarts ] error-hook set listener ] with-scope ;
|
||||
|
||||
: server ( port -- server )
|
||||
<threaded-server>
|
||||
utf8 <threaded-server>
|
||||
"tty-server" >>name
|
||||
utf8 >>encoding
|
||||
swap local-server >>insecure
|
||||
[ start-listener ] >>handler
|
||||
f >>timeout ;
|
||||
|
|
|
@ -100,8 +100,7 @@ Disconnects a user from the chat server."> "quit" add-command
|
|||
] if ;
|
||||
|
||||
: <chat-server> ( port -- managed-server )
|
||||
"chat-server" chat-server new-managed-server
|
||||
utf8 >>encoding ;
|
||||
"chat-server" utf8 chat-server new-managed-server ;
|
||||
|
||||
: handle-chat ( string -- )
|
||||
[
|
||||
|
|
|
@ -19,7 +19,9 @@ HOOK: handle-already-logged-in managed-server ( -- )
|
|||
HOOK: handle-client-join managed-server ( -- )
|
||||
HOOK: handle-client-disconnect managed-server ( -- )
|
||||
|
||||
M: managed-server handle-already-logged-in ;
|
||||
ERROR: already-logged-in username ;
|
||||
|
||||
M: managed-server handle-already-logged-in already-logged-in ;
|
||||
M: managed-server handle-client-join ;
|
||||
M: managed-server handle-client-disconnect ;
|
||||
|
||||
|
@ -50,8 +52,6 @@ PRIVATE>
|
|||
: send-everyone-else ( seq -- )
|
||||
[ everyone-else-streams ] dip '[ _ (send-client) ] each ;
|
||||
|
||||
ERROR: already-logged-in username ;
|
||||
|
||||
<PRIVATE
|
||||
|
||||
: <managed-client> ( username -- managed-client )
|
||||
|
@ -63,10 +63,7 @@ ERROR: already-logged-in username ;
|
|||
remote-address get >>remote-address ;
|
||||
|
||||
: check-logged-in ( username -- username )
|
||||
dup server clients>> key? [
|
||||
[ server ] dip
|
||||
[ handle-already-logged-in ] [ already-logged-in ] bi
|
||||
] when ;
|
||||
dup clients key? [ handle-already-logged-in ] when ;
|
||||
|
||||
: add-managed-client ( -- )
|
||||
client username check-logged-in clients set-at ;
|
||||
|
@ -87,7 +84,7 @@ M: managed-server handle-client*
|
|||
[ delete-managed-client handle-client-disconnect ]
|
||||
[ ] cleanup ;
|
||||
|
||||
: new-managed-server ( port name class -- server )
|
||||
: new-managed-server ( port name encoding class -- server )
|
||||
new-threaded-server
|
||||
swap >>name
|
||||
swap >>insecure
|
||||
|
|
|
@ -89,9 +89,8 @@ M: mdb-msg dump-message ( message -- )
|
|||
|
||||
: start-mmm-server ( -- )
|
||||
output-stream get mmm-dump-output set
|
||||
<threaded-server> [ mmm-t-srv set ] keep
|
||||
binary <threaded-server> [ mmm-t-srv set ] keep
|
||||
"127.0.0.1" mmm-port get <inet4> >>insecure
|
||||
binary >>encoding
|
||||
[ handle-mmm-connection ] >>handler
|
||||
start-server* ;
|
||||
|
||||
|
@ -99,4 +98,4 @@ M: mdb-msg dump-message ( message -- )
|
|||
check-options
|
||||
start-mmm-server ;
|
||||
|
||||
MAIN: run-mmm
|
||||
MAIN: run-mmm
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
! Copyright (C) 2008 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: io io.servers.connection accessors threads
|
||||
calendar calendar.format ;
|
||||
USING: accessors calendar calendar.format io io.encodings.ascii
|
||||
io.servers.connection threads ;
|
||||
IN: time-server
|
||||
|
||||
: handle-time-client ( -- )
|
||||
now timestamp>rfc822 print ;
|
||||
|
||||
: <time-server> ( -- threaded-server )
|
||||
<threaded-server>
|
||||
ascii <threaded-server>
|
||||
"time-server" >>name
|
||||
1234 >>insecure
|
||||
[ handle-time-client ] >>handler ;
|
||||
|
|
|
@ -3,9 +3,8 @@ accessors kernel ;
|
|||
IN: tty-server
|
||||
|
||||
: <tty-server> ( port -- )
|
||||
<threaded-server>
|
||||
utf8 <threaded-server>
|
||||
"tty-server" >>name
|
||||
utf8 >>encoding
|
||||
swap local-server >>insecure
|
||||
[ listener ] >>handler
|
||||
start-server ;
|
||||
|
|
Loading…
Reference in New Issue