Skip to content

Instantly share code, notes, and snippets.

@aamedina
Last active August 29, 2015 14:02
Show Gist options
  • Select an option

  • Save aamedina/cd98581123fe716e2ece to your computer and use it in GitHub Desktop.

Select an option

Save aamedina/cd98581123fe716e2ece to your computer and use it in GitHub Desktop.
(set! *warn-on-reflection* true)
(defn server-response
[packet]
(Unpooled/copiedBuffer "Hello, world!" CharsetUtil/UTF_8))
(defn packet-content
[^DatagramPacket packet]
(str (.content packet)))
(defn server-handler []
(proxy [SimpleChannelInboundHandler] []
(messageReceived [^ChannelHandlerContext ctx ^DatagramPacket packet]
(let [content (packet-content packet)
res (DatagramPacket. (server-response packet) (.sender packet))]
(println content)
(.write ctx res)))
(channelReadComplete [^ChannelHandlerContext ctx]
(.flush ctx))
(exceptionCaught [^ChannelHandlerContext ctx ^Throwable cause]
(.printStackTrace cause))))
(defn run
[port]
(let [group (NioEventLoopGroup.)]
(try
(let [bootstrap (doto (Bootstrap.)
(.group group)
(.channel NioDatagramChannel)
(.option ChannelOption/SO_BROADCAST true)
(.handler (server-handler)))]
(-> (.bind bootstrap (int port))
(.sync)
(.channel)
(.closeFuture)
(.await)))
(finally
(.shutdownGracefully group)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment