Created
June 18, 2014 01:19
-
-
Save aamedina/2528434fec26eac9e1dc to your computer and use it in GitHub Desktop.
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
| (defn server-response | |
| [^DatagramPacket packet] | |
| (let [ret (packet-content packet)] | |
| (Unpooled/copiedBuffer ret CharsetUtil/UTF_8)) ) | |
| (defn server-handler [] | |
| (proxy [SimpleChannelInboundHandler] [] | |
| (messageReceived [^ChannelHandlerContext ctx ^DatagramPacket packet] | |
| (let [content (packet-content packet) | |
| res (DatagramPacket. (server-response packet) (.sender packet))] | |
| (.write ctx res))) | |
| (channelReadComplete [^ChannelHandlerContext ctx] | |
| (.flush ctx)) | |
| (exceptionCaught [^ChannelHandlerContext ctx ^Throwable cause] | |
| (.printStackTrace cause)))) | |
| (defrecord UDPSocketServer [bootstrap group port] | |
| c/Lifecycle | |
| (start [this] | |
| (let [channel (.channel (.bind bootstrap port)) | |
| close-future (.closeFuture channel)] | |
| (.addListener close-future (reify GenericFutureListener | |
| (operationComplete [_ future] | |
| (c/stop this)))) | |
| this)) | |
| (stop [this] | |
| (.shutdownGracefully group) | |
| this)) | |
| (defn udp-socket-server | |
| [port] | |
| (let [group (NioEventLoopGroup.) | |
| bootstrap (doto (Bootstrap.) | |
| (.group group) | |
| (.channel NioDatagramChannel) | |
| (.option ChannelOption/SO_BROADCAST true) | |
| (.handler (server-handler)))] | |
| (UDPSocketServer. bootstrap group (int port)))) | |
| (def server (udp-socket-server 3000)) | |
| (defn start | |
| [] | |
| (alter-var-root #'server c/start)) | |
| (defn stop | |
| [] | |
| (alter-var-root #'server c/stop)) | |
| (defn reset | |
| [] | |
| (alter-var-root #'server c/stop) | |
| (refresh-all :after start)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment