Artifact
c3a7129577312fa79c835392687d5bc04c73983a:
- Executable file
nanomsg/bus
— 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: 1722)
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..