Welcome to the CHICKEN Scheme pasting service

nanomsg pair chat pasted by wasamasa on Sat Mar 5 21:01:38 2016

require 'nanomsg' # https://bitbucket.org/kschiess/nanomsg

class Chat
  def initialize(name, url)
    @name = name
    @socket = NanoMsg::PairSocket.new()

    if @name == 'allan'
      @socket.bind(url)
    else
      @socket.connect(url)
    end

    @request = nil
    @response = nil
    receive()
    send()
    @request.join()
    @response.join()
  end

  def receive()
    @response = Thread.new do
      loop {
        message = @socket.recv()
        print("\r")
        puts message
        print('> ')
      }
    end
  end

  def send()
    @request = Thread.new do
      loop {
        print('> ')
        message = $stdin.gets().chomp()
        @socket.send("#{@name}: #{message}")
      }
    end
  end
end

if ARGV.count() != 2
  puts "Usage: #{$0} <allan|bob> <url>"
  exit(1)
end

name = ARGV.shift()
url = ARGV.shift()

Chat.new(name, url)

naive port pasted by wasamasa on Sat Mar 5 21:02:01 2016

(use nanomsg srfi-18 extras matchable)

(define socket #f)
(define name #f)

(define recv
  (make-thread
   (lambda ()
     (let loop ()
       (let ((message (nn-recv socket)))
         (printf "\r~a> " message)
         (loop))))))

(define (send)
  (let loop ()
    (printf "> ")
    (let ((message (read-line)))
      (nn-send socket (format "~a: ~a" name message))
      (loop))))

(define (chat name url)
  (set! socket (nn-socket 'pair))
  (set! name name)
  (if (eqv? name 'allan)
      (nn-bind socket url)
      (nn-connect socket url))
  (thread-start! recv)
  (send)
  (nn-close socket))

(define (main)
  (when (not (= (length (command-line-arguments)) 2))
    (printf "~a: <allan|bob> <url>\n" (car (argv)))
    (exit 1))
  (match-let (((target url) (command-line-arguments)))
    (case (string->symbol target)
      ((allan) (chat 'allan url))
      ((bob)   (chat 'bob url))
      (else
       (print "Incorrect target")
       (exit 1)))))

(main)

parley to the rescue! pasted by wasamasa on Sat Mar 5 21:44:57 2016

(use nanomsg srfi-18 extras matchable parley)

(define socket #f)
(define nick #f)

(define recv
  (make-thread
   (lambda ()
     (let loop ()
       (let ((message (nn-recv socket)))
         (printf "\r~a\n> " message)
         (loop))))))

;; non-blocking
(define stdin (make-parley-port (current-input-port) prompt: "> "))

(define (send)
  (let loop ()
    (let ((message (read-line stdin)))
      (when message
        (nn-send socket (format "~a: ~a" nick message))
        (loop)))))

(define (chat name url)
  (set! socket (nn-socket 'pair))
  (set! nick name)
  (if (eqv? name 'allan)
      (nn-bind socket url)
      (nn-connect socket url))
  (thread-start! recv)
  (send)
  (nn-close socket))

(define (main)
  (when (not (= (length (command-line-arguments)) 2))
    (printf "~a: <allan|bob> <url>\n" (car (argv)))
    (exit 1))
  (match-let (((target url) (command-line-arguments)))
    (case (string->symbol target)
      ((allan) (chat 'allan url))
      ((bob)   (chat 'bob url))
      (else
       (print "Incorrect target")
       (exit 1)))))

(main)

Allow quitting added by wasamasa on Sat Mar 5 22:19:23 2016

(use nanomsg srfi-18 extras matchable parley)

(define socket #f)
(define nick #f)

(define recv
  (make-thread
   (lambda ()
     (let loop ()
       (let ((message (nn-recv socket)))
         (printf "\r~a\n> " message)
         (loop))))))

;; non-blocking
(define stdin (make-parley-port (current-input-port) prompt: "> "))

(define (send)
  (let loop ()
    (let ((message (read-line stdin)))
      (when (string? message)
        (nn-send socket (format "~a: ~a" nick message))
        (loop)))))

(define (chat name url)
  (set! socket (nn-socket 'pair))
  (set! nick name)
  (if (eqv? name 'allan)
      (nn-bind socket url)
      (nn-connect socket url))
  (thread-start! recv)
  (send)
  (nn-close socket))

(define (main)
  (when (not (= (length (command-line-arguments)) 2))
    (printf "~a: <allan|bob> <url>\n" (car (argv)))
    (exit 1))
  (match-let (((target url) (command-line-arguments)))
    (case (string->symbol target)
      ((allan) (chat 'allan url))
      ((bob)   (chat 'bob url))
      (else
       (print "Incorrect target")
       (exit 1)))))

(main)

Your annotation:

Enter a new annotation:

Your nick:
The title of your paste:
Your paste (mandatory) :
What type of object does `for-each' expect as second argument?
Visually impaired? Let me spell it for you (wav file) download WAV