X-Git-Url: http://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-server.el;h=5a0db116263838f5e4b6e168c2b844706869f157;hp=827b83763501e4038d3680156db95f9aa0862b86;hb=a276a2a33ae21ebef38bdd8aa6ef93b088f13e77;hpb=8f541cf6e7704b4ffc0b6ecacf1b8ec94406e64d diff --git a/lisp/riece-server.el b/lisp/riece-server.el index 827b837..5a0db11 100644 --- a/lisp/riece-server.el +++ b/lisp/riece-server.el @@ -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,14 @@ (require 'riece-coding) ;riece-default-coding-system (require 'riece-identity) (require 'riece-compat) +(require 'riece-cache) (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 +74,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 +164,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) @@ -174,7 +175,7 @@ the `riece-server-keyword-map' variable." (unless (riece-queue-empty riece-send-queue) (riece-run-at-time riece-send-delay nil (lambda (process) - (if (process-live-p process) + (if (riece-server-process-opened process) (riece-flush-send-queue process))) process))))) @@ -193,13 +194,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) @@ -253,19 +261,28 @@ 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) (setq riece-send-size 0) (make-local-variable 'riece-last-send-time) (setq riece-last-send-time '(0 0 0)) - (make-local-variable 'riece-obarray) - (setq riece-obarray (make-vector riece-obarray-size 0)) + (make-local-variable 'riece-user-obarray) + (setq riece-user-obarray (make-vector riece-user-obarray-size 0)) + (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))) (defun riece-close-server-process (process) + (with-current-buffer (process-buffer process) + (run-hooks 'riece-after-close-hook)) (kill-buffer (process-buffer process)) (setq riece-server-process-alist (delq (rassq process riece-server-process-alist) @@ -286,6 +303,15 @@ the `riece-server-keyword-map' variable." (throw 'found t)) (setq alist (cdr alist))))))) +(defun riece-server-properties (server-name) + "Return a list of properties associated with SERVER-NAME." + (if (equal server-name "") + riece-server + (let ((entry (assoc server-name riece-server-alist))) + (unless entry + (error "No such server")) + (cdr entry)))) + (provide 'riece-server) ;;; riece-server.el ends here