/**
* Copyright (c) 2010-2016 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.openhab.binding.souliss.internal.network.udp;
import java.io.BufferedReader;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import org.openhab.binding.souliss.internal.network.typicals.SoulissNetworkParameter;
import org.openhab.binding.souliss.internal.network.typicals.SoulissTypicals;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This class provide receive packet from network
*
* @author Alessandro Del Pex
* @author Tonino Fazio
* @since 1.7.0
*/
public class UDPServerThread extends Thread {
// protected DatagramSocket socket = null;
protected BufferedReader in = null;
protected boolean bExit = false;
UDPSoulissDecoder decoder = null;
private static Logger logger = LoggerFactory.getLogger(UDPServerThread.class);
public UDPServerThread(SoulissTypicals typicals) throws IOException {
super();
if (SoulissNetworkParameter.serverPort != null) {
SoulissNetworkParameter.datagramsocket = new DatagramSocket(SoulissNetworkParameter.serverPort);
} else {
SoulissNetworkParameter.datagramsocket = new DatagramSocket();
}
decoder = new UDPSoulissDecoder(typicals);
logger.info("Start UDPServerThread - Server in ascolto sulla porta "
+ SoulissNetworkParameter.datagramsocket.getLocalPort());
}
@Override
public void run() {
while (true) {
try {
byte[] buf = new byte[256];
// receive request
DatagramPacket packet = new DatagramPacket(buf, buf.length);
SoulissNetworkParameter.datagramsocket.receive(packet);
buf = packet.getData();
// **************** DECODER ********************
logger.debug("Packet received");
logger.debug(MaCacoToString(buf));
decoder.decodeVNetDatagram(packet);
} catch (IOException e) {
e.printStackTrace();
logger.error(e.getMessage());
}
}
}
public DatagramSocket getSocket() {
return SoulissNetworkParameter.datagramsocket;
}
public void closeSocket() {
SoulissNetworkParameter.datagramsocket.close();
bExit = true;
}
private String MaCacoToString(byte[] frame) {
StringBuilder sb = new StringBuilder();
sb.append("HEX: [");
for (byte b : frame) {
sb.append(String.format("%02X ", b));
}
sb.append("]");
return sb.toString();
}
}