新月実装開発部

2ab9a6dd :Anonymous 2015-12-08 15:27
@markdown
`/node`を打ってアクティブなノードの一覧を得ることに成功。
本当にこの使い方でいいのかしらん。

```clojure
(def active-nodes (atom (hash-set)))
(def shingetsu-server-node-name (atom "http://24.130.242.114:8888/server"))

(defn collect-nodes
[node-name]
(try
(client/get (str "http://" node-name "/join/" (clojure.string/replace @shingetsu-server-node-name #"/" "+")))
(dotimes [n 16]
(swap!
active-nodes
conj
(clojure.string/replace
(:body (client/get (str "http://" node-name "/node")))
#"\n$"
"")))
(client/get (str "http://" node-name "/bye/" (clojure.string/replace @shingetsu-server-node-name #"/" "+")))
(catch Exception e
nil)))

(defroutes home-routes
; TODO: Check the remote address.
(GET "/server/ping" request
(->
(ok
(str
"PONG\n"
(or (get-in request [:headers "x-forwarded-for"]) (:remote-addr request))
))
(content-type "text/plain; charset=UTF-8")
))
(GET "/test/join" request
(do
(doall
(pmap
#(collect-nodes %1)
["node.shingetsu.info:8000/server.cgi"
"node.fuktommy.com:8000/server.cgi"
"rep4649.ddo.jp:8002/server.cgi"
"saku.dpforest.info:8000/server.cgi"]))
(doall
(pmap
#(collect-nodes %1)
@active-nodes))
(->
(ok (str "#:" (count @active-nodes) "\n" @active-nodes))
(content-type "text/plain; charset=UTF-8"))))
```
Powered by shinGETsu.