Artifact
fbc391bacdae70a2e5df2dfb52a464282af17cf2:
- Executable file
nanomsg/reqrep
— part of check-in
[590cb5e905]
at
2016-08-17 07:41:06
on branch trunk
— nanomsg error handling and other fixes
(user:
ovenpasta@pizzahack.eu
size: 1596)
0000: 23 21 20 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 #! /usr/bin/env
0010: 73 63 68 65 6d 65 2d 73 63 72 69 70 74 0a 3b 20 scheme-script.;
0020: 2d 2a 2d 20 6d 6f 64 65 3a 20 73 63 68 65 6d 65 -*- mode: scheme
0030: 20 2d 2a 2d 0a 0a 3b 20 47 65 74 74 69 6e 67 20 -*-..; Getting
0040: 53 74 61 72 74 65 64 20 77 69 74 68 20 27 6e 61 Started with 'na
0050: 6e 6f 6d 73 67 27 0a 3b 20 52 65 71 75 65 73 74 nomsg'.; Request
0060: 2f 52 65 70 6c 79 20 28 49 20 61 73 6b 2c 20 79 /Reply (I ask, y
0070: 6f 75 20 61 6e 73 77 65 72 29 0a 3b 20 66 72 6f ou answer).; fro
0080: 6d 20 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 m https://github
0090: 2e 63 6f 6d 2f 64 79 73 69 6e 67 65 72 2f 6e 61 .com/dysinger/na
00a0: 6e 6f 6d 73 67 2d 65 78 61 6d 70 6c 65 73 23 72 nomsg-examples#r
00b0: 65 71 75 65 73 74 72 65 70 6c 79 0a 0a 23 21 63 equestreply..#!c
00c0: 68 65 7a 73 63 68 65 6d 65 0a 0a 28 69 6d 70 6f hezscheme..(impo
00d0: 72 74 20 28 6e 61 6e 6f 6d 73 67 29 20 28 63 68 rt (nanomsg) (ch
00e0: 65 7a 73 63 68 65 6d 65 29 29 0a 0a 28 6e 61 6e ezscheme))..(nan
00f0: 6f 6d 73 67 2d 6c 69 62 72 61 72 79 2d 69 6e 69 omsg-library-ini
0100: 74 29 0a 0a 28 64 65 66 69 6e 65 20 6e 6f 64 65 t)..(define node
0110: 30 2d 6e 61 6d 65 20 22 6e 6f 64 65 30 22 29 0a 0-name "node0").
0120: 28 64 65 66 69 6e 65 20 6e 6f 64 65 31 2d 6e 61 (define node1-na
0130: 6d 65 20 22 6e 6f 64 65 31 22 29 0a 28 64 65 66 me "node1").(def
0140: 69 6e 65 20 64 61 74 65 2d 6e 61 6d 65 20 22 44 ine date-name "D
0150: 41 54 45 22 29 0a 0a 28 64 65 66 69 6e 65 20 64 ATE")..(define d
0160: 61 74 65 20 64 61 74 65 2d 61 6e 64 2d 74 69 6d ate date-and-tim
0170: 65 29 0a 0a 28 64 65 66 69 6e 65 20 28 6e 6f 64 e)..(define (nod
0180: 65 30 20 75 72 6c 29 0a 20 20 28 64 65 66 69 6e e0 url). (defin
0190: 65 20 73 6f 63 6b 20 28 6e 6e 2d 73 6f 63 6b 65 e sock (nn-socke
01a0: 74 20 41 46 5f 53 50 20 4e 4e 5f 52 45 50 29 29 t AF_SP NN_REP))
01b0: 0a 20 20 28 64 65 66 69 6e 65 20 65 69 64 20 28 . (define eid (
01c0: 6e 6e 2d 62 69 6e 64 20 73 6f 63 6b 20 75 72 6c nn-bind sock url
01d0: 29 29 0a 20 20 28 6c 65 74 20 6c 6f 6f 70 20 28 )). (let loop (
01e0: 29 0a 20 20 20 20 28 6c 65 74 20 28 5b 62 75 66 ). (let ([buf
01f0: 20 28 62 6f 78 20 23 74 29 5d 29 0a 20 20 20 20 (box #t)]).
0200: 20 20 28 64 65 66 69 6e 65 20 62 79 74 65 73 20 (define bytes
0210: 28 6e 6e 2d 72 65 63 76 20 73 6f 63 6b 20 62 75 (nn-recv sock bu
0220: 66 20 4e 4e 5f 4d 53 47 20 30 29 29 0a 20 20 20 f NN_MSG 0)).
0230: 20 20 20 28 77 68 65 6e 20 28 73 74 72 69 6e 67 (when (string
0240: 3d 3f 20 64 61 74 65 2d 6e 61 6d 65 20 28 75 74 =? date-name (ut
0250: 66 38 2d 3e 73 74 72 69 6e 67 20 28 75 6e 62 6f f8->string (unbo
0260: 78 20 62 75 66 29 29 29 0a 09 20 20 20 20 28 6c x buf))).. (l
0270: 65 74 2a 20 28 5b 64 20 28 64 61 74 65 29 5d 29 et* ([d (date)])
0280: 0a 09 20 20 20 20 20 20 28 70 72 69 6e 74 66 20 .. (printf
0290: 22 4e 4f 44 45 30 3a 20 52 45 43 45 49 56 45 44 "NODE0: RECEIVED
02a0: 20 44 41 54 45 20 52 45 51 55 45 53 54 7e 6e 22 DATE REQUEST~n"
02b0: 29 0a 09 20 20 20 20 20 20 28 70 72 69 6e 74 66 ).. (printf
02c0: 20 22 4e 4f 44 45 30 3a 20 53 45 4e 44 49 4e 47 "NODE0: SENDING
02d0: 20 44 41 54 45 20 7e 64 7e 6e 22 20 64 29 0a 09 DATE ~d~n" d)..
02e0: 20 20 20 20 20 20 28 6e 6e 2d 73 65 6e 64 20 73 (nn-send s
02f0: 6f 63 6b 20 28 73 74 72 69 6e 67 2d 3e 75 74 66 ock (string->utf
0300: 38 20 64 29 20 30 29 29 29 0a 20 20 20 20 20 20 8 d) 0))).
0310: 28 6c 6f 6f 70 29 29 29 0a 20 20 28 6e 6e 2d 73 (loop))). (nn-s
0320: 68 75 74 64 6f 77 6e 20 73 6f 63 6b 20 65 69 64 hutdown sock eid
0330: 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 6e 6f 64 ))..(define (nod
0340: 65 31 20 75 72 6c 29 0a 20 20 28 64 65 66 69 6e e1 url). (defin
0350: 65 20 73 6f 63 6b 20 28 6e 6e 2d 73 6f 63 6b 65 e sock (nn-socke
0360: 74 20 41 46 5f 53 50 20 4e 4e 5f 52 45 51 29 29 t AF_SP NN_REQ))
0370: 0a 20 20 28 64 65 66 69 6e 65 20 65 69 64 20 28 . (define eid (
0380: 6e 6e 2d 63 6f 6e 6e 65 63 74 20 73 6f 63 6b 20 nn-connect sock
0390: 75 72 6c 29 29 0a 20 20 28 70 72 69 6e 74 66 20 url)). (printf
03a0: 22 4e 4f 44 45 31 3a 20 53 45 4e 44 49 4e 47 20 "NODE1: SENDING
03b0: 44 41 54 45 20 52 45 51 55 45 53 54 20 27 7e 64 DATE REQUEST '~d
03c0: 27 7e 6e 22 20 64 61 74 65 2d 6e 61 6d 65 29 0a '~n" date-name).
03d0: 20 20 28 6e 6e 2d 73 65 6e 64 20 73 6f 63 6b 20 (nn-send sock
03e0: 28 73 74 72 69 6e 67 2d 3e 75 74 66 38 20 64 61 (string->utf8 da
03f0: 74 65 2d 6e 61 6d 65 29 20 30 29 0a 20 20 28 6c te-name) 0). (l
0400: 65 74 20 28 5b 62 75 66 20 28 62 6f 78 20 23 74 et ([buf (box #t
0410: 29 5d 29 0a 20 20 20 20 28 6e 6e 2d 72 65 63 76 )]). (nn-recv
0420: 20 73 6f 63 6b 20 62 75 66 20 4e 4e 5f 4d 53 47 sock buf NN_MSG
0430: 20 30 29 0a 20 20 20 20 28 70 72 69 6e 74 66 20 0). (printf
0440: 22 4e 4f 44 45 31 3a 20 52 45 43 45 49 56 45 44 "NODE1: RECEIVED
0450: 20 44 41 54 45 20 7e 64 7e 6e 22 20 28 75 74 66 DATE ~d~n" (utf
0460: 38 2d 3e 73 74 72 69 6e 67 20 28 75 6e 62 6f 78 8->string (unbox
0470: 20 62 75 66 29 29 29 29 0a 20 20 28 6e 6e 2d 73 buf)))). (nn-s
0480: 68 75 74 64 6f 77 6e 20 73 6f 63 6b 20 65 69 64 hutdown sock eid
0490: 29 29 0a 0a 28 64 65 66 69 6e 65 20 61 72 67 76 ))..(define argv
04a0: 20 28 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 2d 61 (command-line-a
04b0: 72 67 75 6d 65 6e 74 73 29 29 0a 28 64 65 66 69 rguments)).(defi
04c0: 6e 65 20 61 72 67 63 20 28 6c 65 6e 67 74 68 20 ne argc (length
04d0: 61 72 67 76 29 29 0a 0a 28 63 6f 6e 64 0a 20 5b argv))..(cond. [
04e0: 28 61 6e 64 20 28 3e 20 61 72 67 63 20 31 29 20 (and (> argc 1)
04f0: 28 73 74 72 69 6e 67 3d 3f 20 6e 6f 64 65 30 2d (string=? node0-
0500: 6e 61 6d 65 20 28 63 61 72 20 61 72 67 76 29 29 name (car argv))
0510: 29 0a 20 20 28 6e 6f 64 65 30 20 28 63 61 64 72 ). (node0 (cadr
0520: 20 61 72 67 76 29 29 5d 0a 20 5b 28 61 6e 64 20 argv))]. [(and
0530: 28 3e 20 61 72 67 63 20 31 29 20 28 73 74 72 69 (> argc 1) (stri
0540: 6e 67 3d 3f 20 6e 6f 64 65 31 2d 6e 61 6d 65 20 ng=? node1-name
0550: 28 63 61 72 20 61 72 67 76 29 29 29 0a 20 20 28 (car argv))). (
0560: 6e 6f 64 65 31 20 28 63 61 64 72 20 61 72 67 76 node1 (cadr argv
0570: 29 29 5d 0a 20 5b 65 6c 73 65 0a 20 20 28 70 72 ))]. [else. (pr
0580: 69 6e 74 66 20 22 55 73 61 67 65 3a 20 72 65 71 intf "Usage: req
0590: 72 65 70 20 7e 64 7c 7e 64 20 3c 55 52 4c 3e 20 rep ~d|~d <URL>
05a0: 3c 41 52 47 3e 20 2e 2e 2e 27 7e 6e 22 20 6e 6f <ARG> ...'~n" no
05b0: 64 65 30 2d 6e 61 6d 65 20 6e 6f 64 65 31 2d 6e de0-name node1-n
05c0: 61 6d 65 29 5d 29 0a 0a 0a 23 21 65 6f 66 0a 0a ame)])...#!eof..
05d0: 2e 2f 72 65 71 72 65 70 20 6e 6f 64 65 30 20 69 ./reqrep node0 i
05e0: 70 63 3a 2f 2f 2f 74 6d 70 2f 72 65 71 72 65 70 pc:///tmp/reqrep
05f0: 2e 69 70 63 20 26 20 6e 6f 64 65 30 3d 24 21 20 .ipc & node0=$!
0600: 26 26 20 73 6c 65 65 70 20 31 0a 2e 2f 72 65 71 && sleep 1../req
0610: 72 65 70 20 6e 6f 64 65 31 20 69 70 63 3a 2f 2f rep node1 ipc://
0620: 2f 74 6d 70 2f 72 65 71 72 65 70 2e 69 70 63 0a /tmp/reqrep.ipc.
0630: 6b 69 6c 6c 20 24 6e 6f 64 65 30 0a kill $node0.