view test/packet/redit-test-packet-recv.el @ 42:95301aa3ea2f

*** empty log message ***
author gongo
date Fri, 22 Aug 2008 20:27:01 +0900
parents 0f547ed856f6
children c4566caf403f
line wrap: on
line source

;; send.pl のパス。
(defconst redit-test-client-program "/home/gongo/REP_project/emacs/test/packet/redit-test-packet-send.pl")

;; プロセス変数
(defvar redit-test-client-process nil)


(defun redit-test-unpack-int-loop (pkt pos count)
  (if (> count 1)
      (+
       (* (redit-test-unpack-int-loop pkt (- pos 1) (- count 1)) 256)
       (string-to-char (substring pkt (- pos 1) pos)))
    0
    ))

(defun redit-test-unpack-int (pkt pos)
  (redit-test-unpack-int-loop pkt (* pos 4) 4))

(defun rep-test-get-command-from-pkt (pkt)
  (redit-test-unpack-int pkt 1))
(defun rep-test-get-session-id-from-pkt (pkt)
  (redit-test-unpack-int pkt 2))
(defun rep-test-get-editor-id-from-pkt (pkt)
  (redit-test-unpack-int pkt 3))
(defun rep-test-get-sequence-id-from-pkt (pkt)
  (redit-test-unpack-int pkt 4))
(defun rep-test-get-line-number-from-pkt (pkt)
  (redit-test-unpack-int pkt 5))
(defun rep-test-get-text-size-from-pkt (pkt)
  (redit-test-unpack-int pkt 6))


;; process (send.pl) を起動する。
;; send.pl がパケットを送るトリガー(?)として
;; 文字列を送信する(標準入力)。
(defun redit-test-start ()
  (interactive)
  (setq redit-test-client-process
	(start-process "reditclient" nil redit-test-client-program))
  (set-process-filter redit-test-client-process
		      'redit-test-client-process-filter)
  (set-process-coding-system redit-test-client-process
			     'binary 'binary)

  (process-send-string redit-test-client-process "a"))

;; process を終了する。
(defun redit-test-stop ()
  (interactive)
  (if (not (eq (process-status redit-test-client-process) 'exit))
      (kill-process redit-test-client-process)))

;; process の restart。
(defun redit-test-restart ()
  (interactive)
  (redit-test-stop)
  (redit-test-start))

;; process からのパケットを受け取る。
;; パケットは REPcommand。
;; バイトデータと、unpack して取得した値を出力する
(defun redit-test-client-process-filter (proc string)
  (let ((cmd (rep-test-get-command-from-pkt string))
	(sid (rep-test-get-session-id-from-pkt string))
	(eid (rep-test-get-editor-id-from-pkt string))
	(seq (rep-test-get-sequence-id-from-pkt string))
	(lno (rep-test-get-line-number-from-pkt string))
	(siz (rep-test-get-text-size-from-pkt string)))

    (message (concat string "\n"))
    (message (concat (number-to-string cmd) " "
		     (number-to-string sid) " "
		     (number-to-string eid) " "
		     (number-to-string seq) " "
		     (number-to-string lno) " "
		     (number-to-string siz)
		     "\n"))
    ))