Skip to content

Instantly share code, notes, and snippets.

@huydx
Last active November 10, 2015 10:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save huydx/517251caccc5a43e3de2 to your computer and use it in GitHub Desktop.
Save huydx/517251caccc5a43e3de2 to your computer and use it in GitHub Desktop.
lifx.scala
import java.net.{NetworkInterface, InetAddress, DatagramPacket, DatagramSocket}
object Command {
case class Header(frame: Frame, frameAdress: FrameAddress, protocolHeader: ProtocolHeader, payload: Array[Byte])
case class Frame(size: Short, protocol: Short, addressable: Byte, tagged: Byte, origin: Byte, source: Int) {
val length = 64 //64 bit
}
case class FrameAddress(target: Byte, reserved: Byte, resRequired: Byte, ackRequired: Byte, blank: Byte, sequence: Byte) {
val length = 128 //128 bit
}
case class ProtocolHeader(reserved: Long, `type`: Short, reserved2: Short) {
val length = 92 //92 bit
}
def main(args: Array[String]): Unit = {
val c = new DatagramSocket()
c.setBroadcast(true)
val sendData = "DISCOVER_FUIFSERVER_REQUEST".getBytes
try {
val packet = new DatagramPacket(sendData, sendData.length, InetAddress.getByName("255.255.255.255"), 56700)
c.send(packet)
val interfaces = NetworkInterface.getNetworkInterfaces
while(interfaces.hasMoreElements) {
val nwInterface = interfaces.nextElement()
}
val recvBuf = new Array[Byte](1500)
val receivePacket = new DatagramPacket(recvBuf, recvBuf.length)
c.receive(receivePacket)
System.out.println(s"receive data ${receivePacket.getData}")
} catch {
case ex: Exception => die("can not send broadcast data")
}
}
def die(message: String ="error occurred") = {
println(message)
System.exit(1)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment