|
1 | 1 | (ns pcp.scgi |
2 | | - (:require [clojure.string :as str] |
3 | | - [clojure.core.async :as async]) |
| 2 | + (:require [clojure.string :as str]) |
4 | 3 | (:import [java.nio.channels ServerSocketChannel SocketChannel Selector SelectionKey] |
5 | 4 | [java.nio ByteBuffer] |
6 | 5 | [java.net InetSocketAddress InetAddress] |
|
103 | 102 | serverChannel)) |
104 | 103 |
|
105 | 104 | (defn run-selection [active handler ^Selector selector] |
106 | | - (async/thread |
107 | | - (while (some? @active) |
108 | | - (if (not= 0 (.select selector 50)) |
109 | | - (let [keys (.selectedKeys selector)] |
110 | | - (doseq [^SelectionKey key keys] |
111 | | - (let [ops (.readyOps key)] |
112 | | - (cond |
113 | | - (= ops SelectionKey/OP_ACCEPT) (on-accept selector key) |
114 | | - (= ops SelectionKey/OP_READ) (on-read key handler)))) |
115 | | - (.clear keys)) |
116 | | - nil)))) |
| 105 | + (while (some? @active) |
| 106 | + (if (not= 0 (.select selector 50)) |
| 107 | + (let [keys (.selectedKeys selector)] |
| 108 | + (doseq [^SelectionKey key keys] |
| 109 | + (let [ops (.readyOps key)] |
| 110 | + (cond |
| 111 | + (= ops SelectionKey/OP_ACCEPT) (on-accept selector key) |
| 112 | + (= ops SelectionKey/OP_READ) (on-read key handler)))) |
| 113 | + (.clear keys)) |
| 114 | + nil))) |
117 | 115 |
|
118 | | -(defn serve [handler port &{:keys [cluster]}] |
| 116 | +(defn serve [handler port] |
119 | 117 | (let [active (atom true) |
120 | 118 | ^Selector selector (Selector/open) |
121 | | - ^Selector selector2 (when cluster (Selector/open)) |
122 | | - ^Selector selector3 (when cluster (Selector/open)) |
123 | | - ^Selector selector4 (when cluster (Selector/open)) |
124 | | - ^ServerSocketChannel server (build-server port selector) |
125 | | - ^ServerSocketChannel server2 (when cluster (build-server 9007 selector2)) |
126 | | - ^ServerSocketChannel server3 (when cluster (build-server 9014 selector3)) |
127 | | - ^ServerSocketChannel server4 (when cluster (build-server 9021 selector4))] |
128 | | - (run-selection active handler selector) |
129 | | - (when cluster |
130 | | - (run-selection active handler selector2) |
131 | | - (run-selection active handler selector3) |
132 | | - (run-selection active handler selector4)) |
133 | | - (future (while (some? @active) nil)) |
| 119 | + ^ServerSocketChannel server (build-server port selector)] |
| 120 | + (future |
| 121 | + (run-selection active handler selector)) |
134 | 122 | (fn [] |
135 | 123 | (.close server) |
136 | | - (when cluster (.close server2)) |
137 | | - (when cluster (.close server3)) |
138 | | - (when cluster (.close server4)) |
139 | 124 | (reset! active false)))) |
140 | 125 |
|
0 commit comments