Skip to content

Instantly share code, notes, and snippets.

@gomes-work
Created February 14, 2018 23:55
Show Gist options
  • Save gomes-work/e90b07192d9cfe6e9a31acd50b6d8b64 to your computer and use it in GitHub Desktop.
Save gomes-work/e90b07192d9cfe6e9a31acd50b6d8b64 to your computer and use it in GitHub Desktop.
Multicast Server Clojure
(ns demo.sample
(:require [clojure.core.async :as async])
(:import (java.net InetAddress DatagramPacket DatagramSocket MulticastSocket NetworkInterface InetSocketAddress)))
(defonce udp-server (atom nil))
(defonce udp-client (atom nil))
(def port 5555)
(comment defn server-host [] (InetAddress/getLocalHost))
(def multicast-group (InetAddress/getByName "228.5.6.7"))
(defn create-udp-server []
(let [socket (MulticastSocket. port)]
(.joinGroup socket (InetSocketAddress. "228.5.6.7" port) (NetworkInterface/getByName "en0"))
socket))
(defn create-udp-client [] (DatagramSocket.))
(defn message [text]
(DatagramPacket. (.getBytes text)
(.length text)
multicast-group
port))
(defn send-message [text]
(.send @udp-client (message text)))
(defn start-udp-client []
(reset! udp-client (create-udp-client)))
(defn stop-udp-client []
(.close @udp-client)
(reset! udp-client nil))
(defn start-udp-server []
(reset! udp-server (create-udp-server)))
(defn stop-udp-server []
(.leaveGroup @udp-server multicast-group)
(.close @udp-server)
(reset! udp-server nil))
(defn empty-message [n]
(new DatagramPacket (byte-array n) n))
(defonce counter (atom 0))
(defn start-print-loop []
(async/go-loop []
(let [orig-packet (empty-message 1024)]
(.receive @udp-server orig-packet)
(comment .send @udp-server orig-packet)
(let [data (.getData orig-packet)]
; so you can stop repl and play with messages
(swap! counter inc)))
;(println (String. (.getData orig-packet) 0 (.getLength orig-packet) "UTF-8"))))
(recur)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment