Artifact
5b8c34330aff2730c45ee80916d9ff787de4689e:
- Executable file
nanomsg/pipeline
— 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: 1301)
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.