Hex Artifact Content
Not logged in

Artifact c7bfab5957144a27020b66b1acf5da2a7c8ddea5:


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 50 61 69 72 0a 3b 20  nomsg'.; Pair.; 
0060: 66 72 6f 6d 20 68 74 74 70 73 3a 2f 2f 67 69 74  from https://git
0070: 68 75 62 2e 63 6f 6d 2f 64 79 73 69 6e 67 65 72  hub.com/dysinger
0080: 2f 6e 61 6e 6f 6d 73 67 2d 65 78 61 6d 70 6c 65  /nanomsg-example
0090: 73 23 70 61 69 72 0a 0a 23 21 63 68 65 7a 73 63  s#pair..#!chezsc
00a0: 68 65 6d 65 0a 0a 28 69 6d 70 6f 72 74 20 28 6e  heme..(import (n
00b0: 61 6e 6f 6d 73 67 29 20 28 63 68 65 7a 73 63 68  anomsg) (chezsch
00c0: 65 6d 65 29 29 0a 0a 28 6e 61 6e 6f 6d 73 67 2d  eme))..(nanomsg-
00d0: 6c 69 62 72 61 72 79 2d 69 6e 69 74 29 0a 0a 28  library-init)..(
00e0: 64 65 66 69 6e 65 20 6e 6f 64 65 30 2d 6e 61 6d  define node0-nam
00f0: 65 20 22 6e 6f 64 65 30 22 29 0a 28 64 65 66 69  e "node0").(defi
0100: 6e 65 20 6e 6f 64 65 31 2d 6e 61 6d 65 20 22 6e  ne node1-name "n
0110: 6f 64 65 31 22 29 0a 0a 28 64 65 66 69 6e 65 20  ode1")..(define 
0120: 28 73 65 6e 64 2d 6e 61 6d 65 20 73 6f 63 6b 20  (send-name sock 
0130: 6e 61 6d 65 29 0a 20 28 70 72 69 6e 74 66 20 22  name). (printf "
0140: 7e 73 3a 20 53 45 4e 44 49 4e 47 20 27 7e 73 27  ~s: SENDING '~s'
0150: 7e 6e 22 20 6e 61 6d 65 20 6e 61 6d 65 29 0a 20  ~n" name name). 
0160: 28 6e 6e 2d 73 65 6e 64 20 73 6f 63 6b 20 28 73  (nn-send sock (s
0170: 74 72 69 6e 67 2d 3e 75 74 66 38 20 6e 61 6d 65  tring->utf8 name
0180: 29 20 30 29 29 0a 0a 28 64 65 66 69 6e 65 20 28  ) 0))..(define (
0190: 72 65 63 76 2d 6e 61 6d 65 20 73 6f 63 6b 20 6e  recv-name sock n
01a0: 61 6d 65 29 0a 20 20 28 6c 65 74 2a 20 20 28 5b  ame).  (let*  ([
01b0: 62 75 66 20 28 62 6f 78 20 23 74 29 5d 0a 09 20  buf (box #t)].. 
01c0: 20 5b 72 65 73 75 6c 74 20 28 67 75 61 72 64 20   [result (guard 
01d0: 28 78 20 5b 28 3d 20 28 6e 6e 2d 65 72 72 6e 6f  (x [(= (nn-errno
01e0: 29 20 45 54 49 4d 45 44 4f 55 54 29 20 2d 31 5d  ) ETIMEDOUT) -1]
01f0: 29 0a 09 09 09 20 28 6e 6e 2d 72 65 63 76 20 73  ).... (nn-recv s
0200: 6f 63 6b 20 62 75 66 20 4e 4e 5f 4d 53 47 20 30  ock buf NN_MSG 0
0210: 29 29 5d 29 0a 20 20 20 20 28 77 68 65 6e 20 28  ))]).    (when (
0220: 3e 20 72 65 73 75 6c 74 20 30 29 0a 09 20 20 28  > result 0)..  (
0230: 70 72 69 6e 74 66 20 22 7e 64 3a 20 52 45 43 45  printf "~d: RECE
0240: 49 56 45 44 20 27 7e 64 27 7e 6e 22 20 6e 61 6d  IVED '~d'~n" nam
0250: 65 20 28 75 74 66 38 2d 3e 73 74 72 69 6e 67 20  e (utf8->string 
0260: 28 75 6e 62 6f 78 20 62 75 66 29 29 29 29 0a 20  (unbox buf)))). 
0270: 20 20 20 72 65 73 75 6c 74 29 29 0a 0a 28 64 65     result))..(de
0280: 66 69 6e 65 20 28 73 6c 65 65 70 2d 73 20 73 65  fine (sleep-s se
0290: 63 29 0a 20 20 28 73 6c 65 65 70 20 28 6d 61 6b  c).  (sleep (mak
02a0: 65 2d 74 69 6d 65 20 27 74 69 6d 65 2d 64 75 72  e-time 'time-dur
02b0: 61 74 69 6f 6e 20 30 20 73 65 63 29 29 29 0a 09  ation 0 sec)))..
02c0: 0a 28 64 65 66 69 6e 65 20 28 73 65 6e 64 2d 72  .(define (send-r
02d0: 65 63 76 20 73 6f 63 6b 20 6e 61 6d 65 29 0a 20  ecv sock name). 
02e0: 20 28 6e 6e 2d 73 65 74 73 6f 63 6b 6f 70 74 2f   (nn-setsockopt/
02f0: 69 6e 74 20 73 6f 63 6b 20 4e 4e 5f 53 4f 4c 5f  int sock NN_SOL_
0300: 53 4f 43 4b 45 54 20 4e 4e 5f 52 43 56 54 49 4d  SOCKET NN_RCVTIM
0310: 45 4f 20 31 30 30 29 0a 20 20 28 6c 65 74 20 6c  EO 100).  (let l
0320: 6f 6f 70 20 28 29 0a 20 20 20 20 28 72 65 63 76  oop ().    (recv
0330: 2d 6e 61 6d 65 20 73 6f 63 6b 20 6e 61 6d 65 29  -name sock name)
0340: 0a 20 20 20 20 28 73 6c 65 65 70 2d 73 20 31 29  .    (sleep-s 1)
0350: 0a 20 20 20 20 28 73 65 6e 64 2d 6e 61 6d 65 20  .    (send-name 
0360: 73 6f 63 6b 20 6e 61 6d 65 29 0a 20 20 20 20 28  sock name).    (
0370: 6c 6f 6f 70 29 29 29 0a 09 0a 28 64 65 66 69 6e  loop)))...(defin
0380: 65 20 28 6e 6f 64 65 30 20 75 72 6c 29 0a 20 20  e (node0 url).  
0390: 28 64 65 66 69 6e 65 20 73 6f 63 6b 20 28 6e 6e  (define sock (nn
03a0: 2d 73 6f 63 6b 65 74 20 41 46 5f 53 50 20 4e 4e  -socket AF_SP NN
03b0: 5f 50 41 49 52 29 29 0a 20 20 28 64 65 66 69 6e  _PAIR)).  (defin
03c0: 65 20 65 69 64 20 28 6e 6e 2d 62 69 6e 64 20 73  e eid (nn-bind s
03d0: 6f 63 6b 20 75 72 6c 29 29 0a 20 20 28 73 65 6e  ock url)).  (sen
03e0: 64 2d 72 65 63 76 20 73 6f 63 6b 20 6e 6f 64 65  d-recv sock node
03f0: 30 2d 6e 61 6d 65 29 0a 20 20 28 6e 6e 2d 73 68  0-name).  (nn-sh
0400: 75 74 64 6f 77 6e 20 73 6f 63 6b 20 65 69 64 29  utdown sock eid)
0410: 29 0a 0a 28 64 65 66 69 6e 65 20 28 6e 6f 64 65  )..(define (node
0420: 31 20 75 72 6c 29 0a 20 20 28 64 65 66 69 6e 65  1 url).  (define
0430: 20 73 6f 63 6b 20 28 6e 6e 2d 73 6f 63 6b 65 74   sock (nn-socket
0440: 20 41 46 5f 53 50 20 4e 4e 5f 50 41 49 52 29 29   AF_SP NN_PAIR))
0450: 0a 20 20 28 64 65 66 69 6e 65 20 65 69 64 20 28  .  (define eid (
0460: 6e 6e 2d 63 6f 6e 6e 65 63 74 20 73 6f 63 6b 20  nn-connect sock 
0470: 75 72 6c 29 29 0a 20 20 28 73 65 6e 64 2d 72 65  url)).  (send-re
0480: 63 76 20 73 6f 63 6b 20 6e 6f 64 65 31 2d 6e 61  cv sock node1-na
0490: 6d 65 29 0a 20 20 28 6e 6e 2d 73 68 75 74 64 6f  me).  (nn-shutdo
04a0: 77 6e 20 73 6f 63 6b 20 65 69 64 29 29 0a 0a 28  wn sock eid))..(
04b0: 64 65 66 69 6e 65 20 61 72 67 76 20 28 63 6f 6d  define argv (com
04c0: 6d 61 6e 64 2d 6c 69 6e 65 2d 61 72 67 75 6d 65  mand-line-argume
04d0: 6e 74 73 29 29 0a 28 64 65 66 69 6e 65 20 61 72  nts)).(define ar
04e0: 67 63 20 28 6c 65 6e 67 74 68 20 61 72 67 76 29  gc (length argv)
04f0: 29 0a 0a 28 63 6f 6e 64 0a 20 5b 28 61 6e 64 20  )..(cond. [(and 
0500: 28 3e 20 61 72 67 63 20 31 29 20 28 73 74 72 69  (> argc 1) (stri
0510: 6e 67 3d 3f 20 6e 6f 64 65 30 2d 6e 61 6d 65 20  ng=? node0-name 
0520: 28 63 61 72 20 61 72 67 76 29 29 29 0a 20 20 28  (car argv))).  (
0530: 6e 6f 64 65 30 20 28 63 61 64 72 20 61 72 67 76  node0 (cadr argv
0540: 29 29 5d 0a 20 5b 28 61 6e 64 20 28 3e 20 61 72  ))]. [(and (> ar
0550: 67 63 20 31 29 20 28 73 74 72 69 6e 67 3d 3f 20  gc 1) (string=? 
0560: 6e 6f 64 65 31 2d 6e 61 6d 65 20 28 63 61 72 20  node1-name (car 
0570: 61 72 67 76 29 29 29 0a 20 20 28 6e 6f 64 65 31  argv))).  (node1
0580: 20 28 63 61 64 72 20 61 72 67 76 29 29 5d 0a 20   (cadr argv))]. 
0590: 5b 65 6c 73 65 0a 20 20 28 70 72 69 6e 74 66 20  [else.  (printf 
05a0: 22 55 73 61 67 65 3a 20 70 61 69 72 20 7e 64 7c  "Usage: pair ~d|
05b0: 7e 64 20 3c 55 52 4c 3e 20 3c 41 52 47 3e 20 2e  ~d <URL> <ARG> .
05c0: 2e 2e 27 7e 6e 22 20 6e 6f 64 65 30 2d 6e 61 6d  ..'~n" node0-nam
05d0: 65 20 6e 6f 64 65 31 2d 6e 61 6d 65 29 5d 29 0a  e node1-name)]).
05e0: 0a 0a 23 21 65 6f 66 0a 0a 2e 2f 70 61 69 72 20  ..#!eof.../pair 
05f0: 6e 6f 64 65 30 20 69 70 63 3a 2f 2f 2f 74 6d 70  node0 ipc:///tmp
0600: 2f 70 61 69 72 2e 69 70 63 20 26 20 6e 6f 64 65  /pair.ipc & node
0610: 30 3d 24 21 0a 2e 2f 70 61 69 72 20 6e 6f 64 65  0=$!../pair node
0620: 31 20 69 70 63 3a 2f 2f 2f 74 6d 70 2f 70 61 69  1 ipc:///tmp/pai
0630: 72 2e 69 70 63 20 26 20 6e 6f 64 65 31 3d 24 21  r.ipc & node1=$!
0640: 0a 73 6c 65 65 70 20 33 0a 6b 69 6c 6c 20 24 6e  .sleep 3.kill $n
0650: 6f 64 65 30 20 24 6e 6f 64 65 31 0a              ode0 $node1.