-;;; riece-async.el --- connect to IRC server via asynchronous proxy
+;;; riece-async.el --- connect to IRC server via async proxy
;; Copyright (C) 1998-2003 Daiki Ueno
;; Author: Daiki Ueno <ueno@unixuser.org>
;;; Code:
+(require 'riece-options)
+
(defgroup riece-async nil
"Connect to IRC server via asynchronous proxy"
:prefix "riece-"
:group 'riece)
-(defcustom riece-async-ruby-command "ruby"
- "Command name for Ruby interpreter."
- :type 'string
+(defcustom riece-async-buffer-size 65535
+ "Maximum size of the write buffer."
+ :type 'integer
:group 'riece-async)
-(defcustom riece-async-server-program
- '("\
-socket = TCPSocket.new(" host ", " service ")
-$stdout.write(\"NOTICE CONNECTED #{$$}\r\n\")
-$stdout.flush
-loop do
- rfds, = select([socket, $stdin])
- if rfds.delete(socket)
- line = socket.gets(\"\r\n\")
- break unless line
- if line =~ /^(?::[^ ]+ +)?PING +(.+)\r\n/i
- socket.write(\"PONG #{$1}\r\n\")
- socket.flush
- else
- $stdout.write(line)
- $stdout.flush
- end
- end
- if rfds.delete($stdin)
- 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
+(defcustom riece-async-backup-file (expand-file-name "riece-async.bak"
+ riece-directory)
+ "A file which contains outdated messages."
+ :type 'string
:group 'riece-async)
-(defun riece-async-substitute-variables (program variable value)
- (setq program (copy-sequence program))
- (let ((pointer program))
- (while pointer
- (setq pointer (memq variable program))
- (if pointer
- (setcar pointer value)))
- program))
+(defvar riece-async-server-program "aproxy.rb"
+ "The server program file. If the filename is not absolute, it is
+assumed that the file is in the same directory of this file.")
+
+(defvar riece-async-server-program-arguments
+ (list "-s" riece-async-buffer-size
+ "-b" riece-async-backup-file)
+ "Command line arguments passed to `riece-async-server-program'.")
+
+(defconst riece-async-description
+ "Keep IRC connection with external process")
;;;###autoload
(defun riece-async-open-network-stream (name buffer host service)
(let* ((process-connection-type nil)
- (process (start-process name buffer "ruby" "-rsocket")))
- (process-kill-without-query process)
- (process-send-string process
- (apply #'concat
- (riece-async-substitute-variables
- (riece-async-substitute-variables
- riece-async-server-program
- 'host
- (concat "'" host "'"))
- 'service
- (if (numberp service)
- (number-to-string service)
- (concat "'" service "'")))))
- (process-send-string process "\0\n") ;input to process is needed
+ (process
+ (apply #'start-process name buffer riece-ruby-command
+ (if (file-name-absolute-p riece-ruby-server-program)
+ riece-async-server-program
+ (expand-file-name
+ riece-async-server-program
+ (file-name-directory
+ (locate-library
+ (symbol-file 'riece-async-open-network-stream)))))
+ riece-async-server-program-arguments)))
(if buffer
(save-excursion
(set-buffer (process-buffer process))
(not (looking-at (format "NOTICE CONNECTED %d"
(process-id process))))))
(accept-process-output process))))
+ (process-kill-without-query process)
process))
(defun riece-async-insinuate ()
(provide 'riece-async)
-;;; riece-rdcc.el ends here
+;;; riece-async.el ends here