aboutsummaryrefslogtreecommitdiff
path: root/japanese/navi2ch/files/patch-bourbon
blob: b36992edae942d29118bf57f2d427ce8cae5ca89 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
--- navi2ch-net.el.orig	Fri Aug  6 23:02:01 2004
+++ navi2ch-net.el	Sun Aug 28 22:55:41 2005
@@ -127,6 +127,33 @@
 	       (list shell-file-name shell-command-switch command)
 	     command))))
 
+;; (let ((sum 0))
+;;   (dotimes (i 400 sum)
+;;     (setq sum (+ sum (1- (floor (expt 1.00925 i)))))))
+;; => 3602
+(defvar navi2ch-net-connect-wait-power 1.00925)
+(defvar navi2ch-net-connect-time-list '())
+
+(defun navi2ch-net-connect-wait (host)
+  (let* ((host (intern host))
+	 (now (navi2ch-float-time))
+	 (limit (- now 3600.0))
+	 (list (delq nil (mapcar (lambda (x) (if (> (cdr x) limit) x))
+				 navi2ch-net-connect-time-list)))
+	 (len (length (delq nil (mapcar (lambda (x)
+					  (if (eq host (car x)) x))
+					list))))
+	 (wait (floor (- (+ (expt navi2ch-net-connect-wait-power len)
+			    (or (cdr (assq host list)) now))
+			 1
+			 now))))
+    (when (> wait 0)
+      (message "waiting for %dsec..." wait)
+      (sleep-for wait)
+      (message "waiting for %dsec...done" wait))
+    (setq navi2ch-net-connect-time-list
+	  (cons (cons host (navi2ch-float-time)) list))))
+
 (defun navi2ch-net-send-request (url method &optional other-header content)
   (setq navi2ch-net-last-url url)
   (unless navi2ch-net-enable-http11
@@ -141,6 +168,7 @@
             file (cdr (assq 'file list))
             port (cdr (assq 'port list))
             host2ch (cdr (assq 'host2ch list))))
+    (navi2ch-net-connect-wait host)
     (when navi2ch-net-http-proxy
       (setq credentials (navi2ch-net-http-proxy-basic-credentials
 			 navi2ch-net-http-proxy-userid
--- navi2ch-util.el.orig	Sun Oct 10 00:01:11 2004
+++ navi2ch-util.el	Sun Aug 28 22:55:41 2005
@@ -1269,5 +1269,13 @@
 	(setq bol (1+ (navi2ch-line-end-position))))))
   (goto-char start))
 
+(defun navi2ch-float-time (&optional specified-time)
+  "Return the current time, as a float number of seconds since the epoch.
+If an argument is given, it specifies a time to convert to float
+instead of the current time."
+  (apply (lambda (high low &optional usec)
+	   (+ (* high 65536.0) low (/ (or usec 0) 1000000.0)))
+	 (or specified-time (current-time))))
+
 (run-hooks 'navi2ch-util-load-hook)
 ;;; navi2ch-util.el ends here