Created
April 25, 2014 05:50
-
-
Save noahlz/11278875 to your computer and use it in GitHub Desktop.
Simple clojure server adapted from Clojure Cookbook that runs forever rather than exiting after reading the first line.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns hello.core | |
(:require [clojure.java.io :as io]) | |
(:import [java.net ServerSocket])) | |
;; Server | |
(defn receive-msg [socket] | |
(.readLine (io/reader socket))) | |
(defn send-msg [socket msg] | |
(let [writer (io/writer socket)] | |
(.write writer msg) | |
(.flush writer))) | |
(defn server [port handler] | |
(println "Starting server on port" port "with handler" handler) | |
(with-open [server-sock (ServerSocket. port)] | |
(doseq [sock (repeatedly #(.accept server-sock))] | |
(with-open [sock sock] | |
(send-msg sock (str "Ready..." \newline)) | |
(let [msg-in-seq (repeatedly #(receive-msg sock)) | |
msg-out (partial handler)] | |
(doseq [line msg-in-seq | |
:while (seq line)] | |
(println "Recieved:" line) | |
(send-msg sock (msg-out line))) | |
(println "Disconnecting") | |
(send-msg sock (str "Bye!" \newline))))))) | |
(defn test-server [] (server 8888 #(str (.toUpperCase %) \newline))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment