1 USING: accessors fry io io.encodings.binary io.servers.connection
2 io.sockets io.streams.byte-array kernel math mongodb.msg classes formatting
3 namespaces prettyprint tools.walker calendar calendar.format
4 json.writer mongodb.operations.private mongodb.operations ;
8 SYMBOLS: mmm-port mmm-server-ip mmm-server-port mmm-server mmm-dump-output mmm-t-srv ;
10 GENERIC: dump-message ( message -- )
12 : check-options ( -- )
13 mmm-port get [ 27040 mmm-port set ] unless
14 mmm-server-ip get [ "127.0.0.1" mmm-server-ip set ] unless
15 mmm-server-port get [ 27017 mmm-server-port set ] unless
16 mmm-server-ip get mmm-server-port get <inet> mmm-server set ;
18 : read-msg-binary ( -- )
23 : read-request-header ( -- msg-stub )
25 read-int32 MSG-HEADER-SIZE - >>length
30 : read-request ( -- msg-stub binary )
31 binary [ read-msg-binary ] with-byte-writer
32 [ binary [ read-request-header ] with-byte-reader ] keep ; ! msg-stub binary
34 : dump-request ( msg-stub binary -- )
35 [ mmm-dump-output get ] 2dip
36 '[ _ drop _ binary [ read-message dump-message ] with-byte-reader ] with-output-stream ;
38 : read-reply ( -- binary )
39 binary [ read-msg-binary ] with-byte-writer ;
41 : forward-request-read-reply ( msg-stub binary -- binary )
42 [ mmm-server get binary ] 2dip
43 '[ _ opcode>> _ write flush
46 [ f ] if ] with-client ;
48 : dump-reply ( binary -- )
49 [ mmm-dump-output get ] dip
50 '[ _ binary [ read-message dump-message ] with-byte-reader ] with-output-stream ;
52 : message-prefix ( message -- prefix message )
53 [ now timestamp>http-string ] dip
55 [ "%s: %s" sprintf ] dip ; inline
57 M: mdb-query-msg dump-message ( message -- )
61 "%s -> %s: %s \n" printf ;
63 M: mdb-insert-msg dump-message ( message -- )
67 "%s -> %s : %s \n" printf ;
69 M: mdb-reply-msg dump-message ( message -- )
75 "%s -> cursor: %d, start: %d, returned#: %d, -> %s \n" printf ;
77 M: mdb-msg dump-message ( message -- )
78 message-prefix drop "%s \n" printf ;
80 : forward-reply ( binary -- )
83 : handle-mmm-connection ( -- )
85 [ dump-request ] 2keep
86 forward-request-read-reply
90 : start-mmm-server ( -- )
91 output-stream get mmm-dump-output set
92 <threaded-server> [ mmm-t-srv set ] keep
93 "127.0.0.1" mmm-port get <inet4> >>insecure
95 [ handle-mmm-connection ] >>handler