25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
(module
nmsg-transport
(
nmsg:start-server
nmsg:open-send-close
nmsg:open-send-receive
nmsg:close
)
(import scheme posix chicken data-structures ports)
(use nanomsg srfi-18)
|
>
|
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
(module
nmsg-transport
(
nmsg:start-server
nmsg:open-send-close
nmsg:open-send-receive
nmsg:recv
nmsg:close
)
(import scheme posix chicken data-structures ports)
(use nanomsg srfi-18)
|
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
(thread-start! th1)
(thread-start! th2)
(thread-join! th1)
res))))
;; default timeout is 3 seconds
;;
(define (nmsg:open-send-receive host-port msg attrib #!key (timeout 3)(proc #f))
(let ((req (nn-socket 'req))
(uri (conc "tcp://" host-port))
(res #f)
(mode (alist-ref 'mode attrib)))
(handle-exceptions
exn
(let ((emsg ((condition-property-accessor 'exn 'message) exn)))
;; Send notification
(if proc (proc exn emsg))
#f)
(nn-connect req uri)
(print "Connected to the server " )
(nn-send req msg)
(print "Request Sent")
;; receive code here
;;(print (nn-recv req))
(let* ((th1 (make-thread (lambda ()
(let ((resp (nn-recv req)))
(nn-close req)
(print resp)
(set! res (if (equal? resp "ok")
#t
#f))))
"recv thread"))
(th2 (make-thread (lambda ()
(thread-sleep! timeout)
(thread-terminate! th1))
"timer thread")))
(thread-start! th1)
(thread-start! th2)
(thread-join! th1)
res))))
(define (nmsg:close conn)
(nn-close conn))
)
|
|
|
<
|
<
<
<
<
|
<
<
|
|
|
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
(thread-start! th1)
(thread-start! th2)
(thread-join! th1)
res))))
;; default timeout is 3 seconds
;;
(define (nmsg:open-send-receive host-port msg #!key (timeout 3)(proc #f))
(let ((req (nn-socket 'req))
(uri (conc "tcp://" host-port))
(res #f))
(handle-exceptions
exn
(let ((emsg ((condition-property-accessor 'exn 'message) exn)))
;; take action on fail
(if proc (proc exn emsg))
#f)
(nn-connect req uri)
(nn-send req msg)
(let* ((th1 (make-thread (lambda ()
(let ((resp (nn-recv req)))
(nn-close req)
(print resp)
(set! res resp)))
"recv thread"))
(th2 (make-thread (lambda ()
(thread-sleep! timeout)
(thread-terminate! th1))
"timer thread")))
(thread-start! th1)
(thread-start! th2)
(thread-join! th1)
res))))
(define nmsg:close nn-close)
(define nmsg:recv nn-recv)
)
|