Hex Artifact Content
Not logged in

Artifact fbc391bacdae70a2e5df2dfb52a464282af17cf2:


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.