X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Friece-async.el;h=930a2c36382870b2c42506c31bc6e7dc8f794789;hb=05933e03db571db13ae01c9e35e7bb35b71ad25d;hp=4edf500341fbdd983d3db68b6fccfce0c0dd0c31;hpb=0af5207067045aea103a3e52b9dd638f5d9db8bf;p=riece diff --git a/lisp/riece-async.el b/lisp/riece-async.el index 4edf500..930a2c3 100644 --- a/lisp/riece-async.el +++ b/lisp/riece-async.el @@ -37,6 +37,8 @@ ;;; Code: +(require 'riece-options) + (defgroup riece-async nil "Connect to IRC server via asynchronous proxy" :prefix "riece-" @@ -51,7 +53,7 @@ '("\ require 'io/nonblock' socket = TCPSocket.new(" host ", " service ") -$stdout.write(\"NOTICE CONNECTED #{$$}\r\n\") +$stdout.write(\"NOTICE CONNECTED #{$$}\\r\\n\") $stdout.flush $stdout.nonblock = true trap('STOP', 'IGNORE') @@ -61,12 +63,12 @@ buf = '' loop do rfds, wfds, = select([socket, $stdin], wfds_in) unless wfds.empty? + until buf.length <= " max-buffer-size " + i = buf.index(\"\\r\\n\") + break unless i + buf.slice!(0 .. i + 1) + end begin - until buf.length <= " max-buffer-size " - i = buf.index(\"\r\n\") - break unless i - buf.slice!(0 .. i + 1) - end until buf.empty? len = $stdout.syswrite(buf) buf.slice!(0 .. len) @@ -76,10 +78,10 @@ loop do end end if rfds.include?(socket) - line = socket.gets(\"\r\n\") + line = socket.gets(\"\\r\\n\") break unless line - if line =~ /^(?::[^ ]+ +)?PING +(.+)\r\n/i - socket.write(\"PONG #{$1}\r\n\") + if line =~ /^(?::[^ ]+ +)?PING +(.+)\\r\\n/i + socket.write(\"PONG #{$1}\\r\\n\") socket.flush else wfds_in = [$stdout] @@ -87,14 +89,13 @@ loop do end end if rfds.include?($stdin) - line = $stdin.gets(\"\r\n\") + line = $stdin.gets(\"\\r\\n\") break unless line socket.write(line) socket.flush end end socket.close -exit ") "Ruby program of asynchronous proxy." :type 'list @@ -105,6 +106,9 @@ exit :type 'integer :group 'riece-async) +(defconst riece-async-description + "Keep IRC connection with external process") + (defun riece-async-substitute-variables (program variable value) (setq program (copy-sequence program)) (let ((pointer program))