X-Git-Url: http://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-server.el;h=c189ae463f150e13bb93cd3adc8b1e79fcc2cb4a;hp=320419345f7775780a05df28d7ef26279319ab53;hb=9fef09b977aaf04b431355dac2b4978af0e39f7e;hpb=f516351a876fa03cc66862c4a5a3730306af958d diff --git a/lisp/riece-server.el b/lisp/riece-server.el index 3204193..c189ae4 100644 --- a/lisp/riece-server.el +++ b/lisp/riece-server.el @@ -1,4 +1,4 @@ -;;; riece-server.el --- functions to open and close servers +;;; riece-server.el --- functions to open and close servers -*- lexical-binding: t -*- ;; Copyright (C) 1998-2003 Daiki Ueno ;; Author: Daiki Ueno @@ -19,8 +19,8 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Code: @@ -29,12 +29,15 @@ (require 'riece-coding) ;riece-default-coding-system (require 'riece-identity) (require 'riece-compat) +(require 'riece-cache) +(require 'riece-debug) (eval-and-compile (defvar riece-server-keyword-map '((:host) (:service 6667) (:nickname riece-nickname) + (:realname riece-realname) (:username riece-username) (:password) (:function riece-default-open-connection-function) @@ -72,7 +75,7 @@ the `riece-server-keyword-map' variable." plist) (setq plist (cons `(:host ,host) plist)) (unless (equal service "") - (setq plist (cons `(:service ,(string-to-int service)) plist))) + (setq plist (cons `(:service ,(string-to-number service)) plist))) (unless (equal password "") (setq plist (cons `(:password ,(substring password 1)) plist))) (apply #'nconc plist)))) @@ -162,8 +165,7 @@ the `riece-server-keyword-map' variable." (setq riece-send-size 0)) (while (and (not (riece-queue-empty riece-send-queue)) (<= riece-send-size riece-max-send-size)) - (setq string (riece-encode-coding-string - (riece-queue-dequeue riece-send-queue)) + (setq string (riece-queue-dequeue riece-send-queue) length (length string)) (if (> length riece-max-send-size) (message "Long message (%d > %d)" length riece-max-send-size) @@ -193,13 +195,20 @@ the `riece-server-keyword-map' variable." (if (riece-server-opened "") ""))))) -(defun riece-send-string (string) - (let* ((server-name (riece-current-server-name)) +(defun riece-send-string (string &optional identity) + (let* ((server-name (if identity + (riece-identity-server identity) + (riece-current-server-name))) (process (riece-server-process server-name))) (unless process (error "%s" (substitute-command-keys "Type \\[riece-command-open-server] to open server."))) - (riece-process-send-string process string))) + (riece-process-send-string + process + (with-current-buffer (process-buffer process) + (if identity + (riece-encode-coding-string-for-identity string identity) + (riece-encode-coding-string string)))))) (defun riece-open-server (server server-name) (let ((protocol (or (plist-get server :protocol) @@ -214,9 +223,8 @@ the `riece-server-keyword-map' variable." "-open-server"))) (unless function (error "\"%S\" is not supported" protocol)) - (condition-case nil - (setq process (funcall function server server-name)) - (error)) + (setq process (riece-funcall-ignore-errors (symbol-name function) + function server server-name)) (when process (with-current-buffer (process-buffer process) (make-local-variable 'riece-protocol) @@ -235,8 +243,7 @@ the `riece-server-keyword-map' variable." (funcall function process message)))) (defun riece-reset-process-buffer (process) - (save-excursion - (set-buffer (process-buffer process)) + (with-current-buffer (process-buffer process) (if (fboundp 'set-buffer-multibyte) (set-buffer-multibyte nil)) (kill-all-local-variables) @@ -253,6 +260,7 @@ the `riece-server-keyword-map' variable." (make-local-variable 'riece-server-name) (make-local-variable 'riece-read-point) (setq riece-read-point (point-min)) + (make-local-variable 'riece-filter-running) (make-local-variable 'riece-send-queue) (setq riece-send-queue (riece-make-queue)) (make-local-variable 'riece-send-size) @@ -264,6 +272,10 @@ the `riece-server-keyword-map' variable." (make-local-variable 'riece-channel-obarray) (setq riece-channel-obarray (make-vector riece-channel-obarray-size 0)) (make-local-variable 'riece-coding-system) + (make-local-variable 'riece-channel-cache) + (setq riece-channel-cache (riece-make-cache riece-channel-cache-max-size)) + (make-local-variable 'riece-user-cache) + (setq riece-user-cache (riece-make-cache riece-user-cache-max-size)) (buffer-disable-undo) (erase-buffer)))