Hex Artifact Content
Not logged in

Artifact c3a7129577312fa79c835392687d5bc04c73983a:


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 53 75 72 76 65 79 0a  nomsg'.; Survey.
0060: 3b 20 66 72 6f 6d 20 68 74 74 70 73 3a 2f 2f 67  ; from https://g
0070: 69 74 68 75 62 2e 63 6f 6d 2f 64 79 73 69 6e 67  ithub.com/dysing
0080: 65 72 2f 6e 61 6e 6f 6d 73 67 2d 65 78 61 6d 70  er/nanomsg-examp
0090: 6c 65 73 23 62 75 73 0a 23 21 63 68 65 7a 73 63  les#bus.#!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 28 73 6c 65 65 70 2d 73 20  define (sleep-s 
00f0: 73 65 63 29 0a 20 20 28 73 6c 65 65 70 20 28 6d  sec).  (sleep (m
0100: 61 6b 65 2d 74 69 6d 65 20 27 74 69 6d 65 2d 64  ake-time 'time-d
0110: 75 72 61 74 69 6f 6e 20 30 20 73 65 63 29 29 29  uration 0 sec)))
0120: 0a 0a 0a 28 64 65 66 69 6e 65 20 28 6e 6f 64 65  ...(define (node
0130: 20 61 72 67 63 20 61 72 67 76 29 0a 20 20 28 64   argc argv).  (d
0140: 65 66 69 6e 65 20 73 6f 63 6b 20 23 66 29 0a 20  efine sock #f). 
0150: 20 28 64 65 66 69 6e 65 20 65 69 64 73 20 27 28   (define eids '(
0160: 29 29 0a 20 20 28 64 65 66 69 6e 65 20 72 20 23  )).  (define r #
0170: 66 29 0a 20 20 28 64 79 6e 61 6d 69 63 2d 77 69  f).  (dynamic-wi
0180: 6e 64 20 0a 20 20 20 20 20 20 28 6c 61 6d 62 64  nd .      (lambd
0190: 61 20 28 29 0a 09 28 73 65 74 21 20 73 6f 63 6b  a ()..(set! sock
01a0: 20 28 6e 6e 2d 73 6f 63 6b 65 74 20 41 46 5f 53   (nn-socket AF_S
01b0: 50 20 4e 4e 5f 42 55 53 29 29 29 0a 20 20 20 20  P NN_BUS))).    
01c0: 20 20 28 6c 61 6d 62 64 61 20 28 29 0a 09 28 6e    (lambda ()..(n
01d0: 6e 2d 62 69 6e 64 20 73 6f 63 6b 20 28 63 61 64  n-bind sock (cad
01e0: 72 20 61 72 67 76 29 29 0a 09 28 73 6c 65 65 70  r argv))..(sleep
01f0: 2d 73 20 31 29 0a 09 28 77 68 65 6e 20 28 3e 3d  -s 1)..(when (>=
0200: 20 61 72 67 63 20 32 29 0a 09 20 20 20 20 20 20   argc 2)..      
0210: 28 6c 65 74 20 6c 6f 6f 70 20 28 5b 78 20 32 5d  (let loop ([x 2]
0220: 29 0a 09 09 28 64 65 66 69 6e 65 20 6e 20 28 6e  )...(define n (n
0230: 6e 2d 63 6f 6e 6e 65 63 74 20 73 6f 63 6b 20 28  n-connect sock (
0240: 6c 69 73 74 2d 72 65 66 20 61 72 67 76 20 78 29  list-ref argv x)
0250: 29 29 0a 09 09 28 73 65 74 21 20 65 69 64 73 20  ))...(set! eids 
0260: 28 63 6f 6e 73 20 6e 20 65 69 64 73 29 29 0a 09  (cons n eids))..
0270: 09 28 69 66 20 28 3c 20 28 2b 20 78 20 31 29 20  .(if (< (+ x 1) 
0280: 61 72 67 63 29 0a 09 09 20 20 20 20 28 6c 6f 6f  argc)...    (loo
0290: 70 20 28 2b 20 78 20 31 29 29 29 29 29 0a 09 28  p (+ x 1)))))..(
02a0: 73 6c 65 65 70 2d 73 20 31 29 0a 09 0a 09 28 6e  sleep-s 1)....(n
02b0: 6e 2d 73 65 74 73 6f 63 6b 6f 70 74 2f 69 6e 74  n-setsockopt/int
02c0: 20 73 6f 63 6b 20 4e 4e 5f 53 4f 4c 5f 53 4f 43   sock NN_SOL_SOC
02d0: 4b 45 54 20 4e 4e 5f 52 43 56 54 49 4d 45 4f 20  KET NN_RCVTIMEO 
02e0: 31 30 30 29 0a 0a 09 28 6c 65 74 2a 20 28 5b 6e  100)...(let* ([n
02f0: 20 28 63 61 72 20 61 72 67 76 29 5d 29 0a 09 20   (car argv)]).. 
0300: 20 28 70 72 69 6e 74 66 20 22 7e 64 3a 20 53 45   (printf "~d: SE
0310: 4e 44 49 4e 47 20 7e 64 20 4f 4e 54 4f 20 42 55  NDING ~d ONTO BU
0320: 53 7e 6e 22 20 6e 20 6e 29 0a 09 20 20 28 6e 6e  S~n" n n)..  (nn
0330: 2d 73 65 6e 64 20 73 6f 63 6b 20 28 73 74 72 69  -send sock (stri
0340: 6e 67 2d 3e 75 74 66 38 20 6e 29 20 30 29 29 0a  ng->utf8 n) 0)).
0350: 09 28 6c 65 74 20 6c 6f 6f 70 20 28 29 0a 09 20  .(let loop ().. 
0360: 20 28 6c 65 74 2a 20 28 5b 62 75 66 20 28 62 6f   (let* ([buf (bo
0370: 78 20 23 74 29 5d 0a 09 09 20 5b 72 65 63 76 20  x #t)]... [recv 
0380: 28 67 75 61 72 64 20 28 78 20 5b 28 3d 20 28 6e  (guard (x [(= (n
0390: 6e 2d 65 72 72 6e 6f 29 20 45 54 49 4d 45 44 4f  n-errno) ETIMEDO
03a0: 55 54 29 20 2d 31 5d 29 0a 09 09 09 20 20 20 20  UT) -1])....    
03b0: 20 20 28 6e 6e 2d 72 65 63 76 20 73 6f 63 6b 20    (nn-recv sock 
03c0: 62 75 66 20 4e 4e 5f 4d 53 47 20 30 29 29 5d 29  buf NN_MSG 0))])
03d0: 0a 09 20 20 20 20 28 77 68 65 6e 20 28 3e 3d 20  ..    (when (>= 
03e0: 72 65 63 76 20 30 29 0a 09 09 20 20 28 70 72 69  recv 0)...  (pri
03f0: 6e 74 66 20 22 7e 64 20 52 45 43 45 49 56 45 44  ntf "~d RECEIVED
0400: 20 7e 64 20 46 52 4f 4d 20 42 55 53 7e 6e 22 20   ~d FROM BUS~n" 
0410: 0a 09 09 09 20 20 28 63 61 72 20 61 72 67 76 29  ....  (car argv)
0420: 20 28 75 74 66 38 2d 3e 73 74 72 69 6e 67 20 28   (utf8->string (
0430: 75 6e 62 6f 78 20 62 75 66 29 29 29 29 0a 09 20  unbox buf)))).. 
0440: 20 20 20 28 6c 6f 6f 70 29 29 29 29 0a 20 20 20     (loop)))).   
0450: 20 20 20 28 6c 61 6d 62 64 61 20 28 29 0a 09 28     (lambda ()..(
0460: 66 6f 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 61  for-each (lambda
0470: 20 28 65 69 64 29 20 0a 09 09 20 20 20 20 28 6e   (eid) ...    (n
0480: 6e 2d 73 68 75 74 64 6f 77 6e 20 73 6f 63 6b 20  n-shutdown sock 
0490: 65 69 64 29 29 20 65 69 64 73 29 29 29 29 0a 0a  eid)) eids))))..
04a0: 28 64 65 66 69 6e 65 20 61 72 67 76 20 28 63 6f  (define argv (co
04b0: 6d 6d 61 6e 64 2d 6c 69 6e 65 2d 61 72 67 75 6d  mmand-line-argum
04c0: 65 6e 74 73 29 29 0a 28 64 65 66 69 6e 65 20 61  ents)).(define a
04d0: 72 67 63 20 28 6c 65 6e 67 74 68 20 61 72 67 76  rgc (length argv
04e0: 29 29 0a 0a 28 63 6f 6e 64 0a 20 5b 28 61 6e 64  ))..(cond. [(and
04f0: 20 28 3e 3d 20 61 72 67 63 20 32 29 20 0a 20 20   (>= argc 2) .  
0500: 20 20 20 20 20 28 6e 6f 64 65 20 61 72 67 63 20       (node argc 
0510: 61 72 67 76 29 29 5d 0a 20 5b 65 6c 73 65 0a 20  argv))]. [else. 
0520: 20 28 70 72 69 6e 74 66 20 22 55 73 61 67 65 3a   (printf "Usage:
0530: 20 62 75 73 20 3c 4e 4f 44 45 5f 4e 41 4d 45 3e   bus <NODE_NAME>
0540: 20 3c 55 52 4c 3e 20 3c 55 52 4c 3e 20 2e 2e 2e   <URL> <URL> ...
0550: 27 7e 6e 22 29 5d 29 0a 0a 0a 0a 23 21 65 6f 66  '~n")])....#!eof
0560: 0a 0a 2e 2f 62 75 73 20 6e 6f 64 65 30 20 69 70  .../bus node0 ip
0570: 63 3a 2f 2f 2f 74 6d 70 2f 6e 6f 64 65 30 2e 69  c:///tmp/node0.i
0580: 70 63 20 69 70 63 3a 2f 2f 2f 74 6d 70 2f 6e 6f  pc ipc:///tmp/no
0590: 64 65 31 2e 69 70 63 20 69 70 63 3a 2f 2f 2f 74  de1.ipc ipc:///t
05a0: 6d 70 2f 6e 6f 64 65 32 2e 69 70 63 20 26 20 6e  mp/node2.ipc & n
05b0: 6f 64 65 30 3d 24 21 0a 2e 2f 62 75 73 20 6e 6f  ode0=$!../bus no
05c0: 64 65 31 20 69 70 63 3a 2f 2f 2f 74 6d 70 2f 6e  de1 ipc:///tmp/n
05d0: 6f 64 65 31 2e 69 70 63 20 69 70 63 3a 2f 2f 2f  ode1.ipc ipc:///
05e0: 74 6d 70 2f 6e 6f 64 65 32 2e 69 70 63 20 69 70  tmp/node2.ipc ip
05f0: 63 3a 2f 2f 2f 74 6d 70 2f 6e 6f 64 65 33 2e 69  c:///tmp/node3.i
0600: 70 63 20 26 20 6e 6f 64 65 31 3d 24 21 0a 2e 2f  pc & node1=$!../
0610: 62 75 73 20 6e 6f 64 65 32 20 69 70 63 3a 2f 2f  bus node2 ipc://
0620: 2f 74 6d 70 2f 6e 6f 64 65 32 2e 69 70 63 20 69  /tmp/node2.ipc i
0630: 70 63 3a 2f 2f 2f 74 6d 70 2f 6e 6f 64 65 33 2e  pc:///tmp/node3.
0640: 69 70 63 20 26 20 6e 6f 64 65 32 3d 24 21 0a 2e  ipc & node2=$!..
0650: 2f 62 75 73 20 6e 6f 64 65 33 20 69 70 63 3a 2f  /bus node3 ipc:/
0660: 2f 2f 74 6d 70 2f 6e 6f 64 65 33 2e 69 70 63 20  //tmp/node3.ipc 
0670: 69 70 63 3a 2f 2f 2f 74 6d 70 2f 6e 6f 64 65 30  ipc:///tmp/node0
0680: 2e 69 70 63 20 26 20 6e 6f 64 65 33 3d 24 21 0a  .ipc & node3=$!.
0690: 73 6c 65 65 70 20 35 0a 6b 69 6c 6c 20 24 6e 6f  sleep 5.kill $no
06a0: 64 65 30 20 24 6e 6f 64 65 31 20 24 6e 6f 64 65  de0 $node1 $node
06b0: 32 20 24 6e 6f 64 65 33 0a 0a                    2 $node3..