Hex Artifact Content
Not logged in

Artifact 5b8c34330aff2730c45ee80916d9ff787de4689e:


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 69 70 65 6c 69 6e  nomsg'.; Pipelin
0060: 65 20 28 41 20 4f 6e 65 2d 57 61 79 20 50 69 70  e (A One-Way Pip
0070: 65 29 0a 3b 20 66 72 6f 6d 20 68 74 74 70 73 3a  e).; from https:
0080: 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 64 79 73  //github.com/dys
0090: 69 6e 67 65 72 2f 6e 61 6e 6f 6d 73 67 2d 65 78  inger/nanomsg-ex
00a0: 61 6d 70 6c 65 73 23 70 69 70 65 6c 69 6e 65 0a  amples#pipeline.
00b0: 0a 23 21 63 68 65 7a 73 63 68 65 6d 65 0a 0a 28  .#!chezscheme..(
00c0: 69 6d 70 6f 72 74 20 28 6e 61 6e 6f 6d 73 67 29  import (nanomsg)
00d0: 20 28 63 68 65 7a 73 63 68 65 6d 65 29 29 0a 0a   (chezscheme))..
00e0: 28 6e 61 6e 6f 6d 73 67 2d 6c 69 62 72 61 72 79  (nanomsg-library
00f0: 2d 69 6e 69 74 29 0a 0a 28 64 65 66 69 6e 65 20  -init)..(define 
0100: 6e 6f 64 65 30 2d 6e 61 6d 65 20 22 6e 6f 64 65  node0-name "node
0110: 30 22 29 0a 28 64 65 66 69 6e 65 20 6e 6f 64 65  0").(define node
0120: 31 2d 6e 61 6d 65 20 22 6e 6f 64 65 31 22 29 0a  1-name "node1").
0130: 0a 28 64 65 66 69 6e 65 20 28 6e 6f 64 65 30 20  .(define (node0 
0140: 75 72 6c 29 0a 20 20 28 64 65 66 69 6e 65 20 73  url).  (define s
0150: 6f 63 6b 20 28 6e 6e 2d 73 6f 63 6b 65 74 20 41  ock (nn-socket A
0160: 46 5f 53 50 20 4e 4e 5f 50 55 4c 4c 29 29 0a 20  F_SP NN_PULL)). 
0170: 20 28 6e 6e 2d 62 69 6e 64 20 73 6f 63 6b 20 75   (nn-bind sock u
0180: 72 6c 29 0a 20 20 28 6c 65 74 20 6c 6f 6f 70 20  rl).  (let loop 
0190: 28 29 0a 20 20 20 20 28 6c 65 74 20 28 5b 62 75  ().    (let ([bu
01a0: 66 20 28 62 6f 78 20 23 74 29 5d 29 0a 20 20 20  f (box #t)]).   
01b0: 20 20 20 28 64 65 66 69 6e 65 20 62 79 74 65 73     (define bytes
01c0: 20 28 6e 6e 2d 72 65 63 76 20 73 6f 63 6b 20 62   (nn-recv sock b
01d0: 75 66 20 4e 4e 5f 4d 53 47 20 30 29 29 0a 20 20  uf NN_MSG 0)).  
01e0: 20 20 20 20 28 70 72 69 6e 74 66 20 22 4e 4f 44      (printf "NOD
01f0: 45 30 3a 20 52 45 43 45 49 56 45 44 20 27 7e 64  E0: RECEIVED '~d
0200: 27 7e 6e 22 20 28 75 74 66 38 2d 3e 73 74 72 69  '~n" (utf8->stri
0210: 6e 67 20 28 75 6e 62 6f 78 20 62 75 66 29 29 29  ng (unbox buf)))
0220: 29 0a 20 20 20 20 28 6c 6f 6f 70 29 29 29 0a 0a  ).    (loop)))..
0230: 0a 28 64 65 66 69 6e 65 20 28 6e 6f 64 65 31 20  .(define (node1 
0240: 75 72 6c 20 6d 73 67 29 0a 20 20 28 64 65 66 69  url msg).  (defi
0250: 6e 65 20 73 6f 63 6b 20 28 6e 6e 2d 73 6f 63 6b  ne sock (nn-sock
0260: 65 74 20 41 46 5f 53 50 20 4e 4e 5f 50 55 53 48  et AF_SP NN_PUSH
0270: 29 29 0a 20 20 28 64 65 66 69 6e 65 20 65 69 64  )).  (define eid
0280: 20 28 6e 6e 2d 63 6f 6e 6e 65 63 74 20 73 6f 63   (nn-connect soc
0290: 6b 20 75 72 6c 29 29 0a 20 20 28 70 72 69 6e 74  k url)).  (print
02a0: 66 20 22 4e 4f 44 45 31 3a 20 53 45 4e 44 49 4e  f "NODE1: SENDIN
02b0: 47 20 27 7e 64 27 7e 6e 22 20 6d 73 67 29 0a 20  G '~d'~n" msg). 
02c0: 20 28 6c 65 74 20 28 5b 62 79 74 65 73 20 28 6e   (let ([bytes (n
02d0: 6e 2d 73 65 6e 64 20 73 6f 63 6b 20 28 73 74 72  n-send sock (str
02e0: 69 6e 67 2d 3e 75 74 66 38 20 6d 73 67 29 20 30  ing->utf8 msg) 0
02f0: 29 5d 29 0a 20 20 20 20 28 6e 6e 2d 73 68 75 74  )]).    (nn-shut
0300: 64 6f 77 6e 20 73 6f 63 6b 20 65 69 64 29 29 29  down sock eid)))
0310: 0a 0a 28 64 65 66 69 6e 65 20 61 72 67 76 20 28  ..(define argv (
0320: 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 2d 61 72 67  command-line-arg
0330: 75 6d 65 6e 74 73 29 29 0a 28 64 65 66 69 6e 65  uments)).(define
0340: 20 61 72 67 63 20 28 6c 65 6e 67 74 68 20 61 72   argc (length ar
0350: 67 76 29 29 0a 0a 28 63 6f 6e 64 0a 20 5b 28 61  gv))..(cond. [(a
0360: 6e 64 20 28 3e 20 61 72 67 63 20 31 29 20 28 73  nd (> argc 1) (s
0370: 74 72 69 6e 67 3d 3f 20 6e 6f 64 65 30 2d 6e 61  tring=? node0-na
0380: 6d 65 20 28 63 61 72 20 61 72 67 76 29 29 29 0a  me (car argv))).
0390: 20 20 28 6e 6f 64 65 30 20 28 63 61 64 72 20 61    (node0 (cadr a
03a0: 72 67 76 29 29 5d 0a 20 5b 28 61 6e 64 20 28 3e  rgv))]. [(and (>
03b0: 20 61 72 67 63 20 32 29 20 28 73 74 72 69 6e 67   argc 2) (string
03c0: 3d 3f 20 6e 6f 64 65 31 2d 6e 61 6d 65 20 28 63  =? node1-name (c
03d0: 61 72 20 61 72 67 76 29 29 29 0a 20 20 28 6e 6f  ar argv))).  (no
03e0: 64 65 31 20 28 63 61 64 72 20 61 72 67 76 29 20  de1 (cadr argv) 
03f0: 28 63 61 64 64 72 20 61 72 67 76 29 29 5d 0a 20  (caddr argv))]. 
0400: 5b 65 6c 73 65 0a 20 20 28 70 72 69 6e 74 66 20  [else.  (printf 
0410: 22 55 73 61 67 65 3a 20 70 69 70 65 6c 69 6e 65  "Usage: pipeline
0420: 20 7e 64 7c 7e 64 20 3c 55 52 4c 3e 20 3c 41 52   ~d|~d <URL> <AR
0430: 47 3e 20 2e 2e 2e 27 7e 6e 22 20 6e 6f 64 65 30  G> ...'~n" node0
0440: 2d 6e 61 6d 65 20 6e 6f 64 65 31 2d 6e 61 6d 65  -name node1-name
0450: 29 5d 29 0a 0a 0a 23 21 65 6f 66 0a 0a 2e 2f 70  )])...#!eof.../p
0460: 69 70 65 6c 69 6e 65 20 6e 6f 64 65 30 20 69 70  ipeline node0 ip
0470: 63 3a 2f 2f 2f 74 6d 70 2f 70 69 70 65 6c 69 6e  c:///tmp/pipelin
0480: 65 2e 69 70 63 20 26 20 6e 6f 64 65 30 3d 24 21  e.ipc & node0=$!
0490: 20 26 26 20 73 6c 65 65 70 20 31 0a 2e 2f 70 69   && sleep 1../pi
04a0: 70 65 6c 69 6e 65 20 6e 6f 64 65 31 20 69 70 63  peline node1 ipc
04b0: 3a 2f 2f 2f 74 6d 70 2f 70 69 70 65 6c 69 6e 65  :///tmp/pipeline
04c0: 2e 69 70 63 20 22 48 65 6c 6c 6f 2c 20 57 6f 72  .ipc "Hello, Wor
04d0: 6c 64 21 22 0a 2e 2f 70 69 70 65 6c 69 6e 65 20  ld!"../pipeline 
04e0: 6e 6f 64 65 31 20 69 70 63 3a 2f 2f 2f 74 6d 70  node1 ipc:///tmp
04f0: 2f 70 69 70 65 6c 69 6e 65 2e 69 70 63 20 22 47  /pipeline.ipc "G
0500: 6f 6f 64 62 79 65 2e 22 0a 6b 69 6c 6c 20 24 6e  oodbye.".kill $n
0510: 6f 64 65 30 0a                                   ode0.