package jdepend.client.ui.circle.thread;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.util.logging.Level;
import java.util.logging.Logger;
import jdepend.client.ui.circle.domain.DataPacket;
import jdepend.client.ui.circle.domain.IpMsgConstant;
import jdepend.client.ui.circle.domain.PacketQueue;
import jdepend.client.ui.circle.domain.SocketManage;
import jdepend.client.ui.circle.domain.SystemVar;
/**
* 收取数据包线程
*
* @author Sheldon wang
*/
public class RecvPacketDaemon implements Runnable {
public void run() {
try {
DatagramSocket defaultSocket = SocketManage.getInstance().getUdpSocket();
DatagramPacket pack = new DatagramPacket(new byte[IpMsgConstant.PACKET_LENGTH], IpMsgConstant.PACKET_LENGTH);
while (true) {
// 接收数据
defaultSocket.receive(pack);
byte[] buffer = new byte[pack.getLength()];
System.arraycopy(pack.getData(), 0, buffer, 0, buffer.length);
DataPacket dataPacket = DataPacket.createDataPacket(buffer, pack.getAddress().getHostAddress());
if (dataPacket != null) {
SystemVar.PACKET_QUEUE_EMPTY.acquire();
PacketQueue.pushPacket(dataPacket);
SystemVar.PACKET_QUEUE_FULL.release();
}
}
} catch (SocketException ex) {
ex.printStackTrace();
Logger.getLogger(RecvPacketDaemon.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
ex.printStackTrace();
} catch (InterruptedException ex) {
Logger.getLogger(RecvPacketDaemon.class.getName()).log(Level.SEVERE, null, ex);
}
}
}