/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.pieShare.pieShareServer.tasks; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import org.bouncycastle.util.Arrays; import org.pieShare.pieTools.piePlate.model.message.loopHoleMessages.api.IUdpMessage; import org.pieShare.pieTools.piePlate.service.serializer.api.ISerializerService; import org.pieShare.pieTools.piePlate.service.serializer.exception.SerializerServiceException; import org.pieShare.pieTools.pieUtilities.service.pieExecutorService.PieExecutorTaskFactory; import org.pieShare.pieTools.pieUtilities.service.pieExecutorService.api.IExecutorService; import org.pieShare.pieTools.pieUtilities.service.pieExecutorService.api.task.IPieTask; import org.pieShare.pieTools.pieUtilities.service.pieExecutorService.exception.PieExecutorTaskFactoryException; import org.pieShare.pieTools.pieUtilities.service.pieLogger.PieLogger; /** * * @author Richard */ public class LoopHoleListenerTask implements IPieTask { private DatagramSocket socket; private boolean run; private ISerializerService serializerService; private IExecutorService excuterService; public LoopHoleListenerTask() { this.run = true; } public void setSerializerService(ISerializerService serializerService) { this.serializerService = serializerService; } public void setExcuterService(IExecutorService excuterService) { this.excuterService = excuterService; } public void setSocket(DatagramSocket socket) { this.socket = socket; } @Override public void run() { PieLogger.info(this.getClass(), "Listener Started!"); while (run) { byte[] bytes = new byte[1024]; DatagramPacket packet = new DatagramPacket(bytes, bytes.length); try { socket.receive(packet); bytes = Arrays.copyOfRange(packet.getData(), 0, packet.getLength()); IUdpMessage msg = (IUdpMessage) serializerService.deserialize(bytes); InetSocketAddress address = new InetSocketAddress(packet.getAddress(), packet.getPort()); msg.setSenderAddress(address); excuterService.handlePieEvent(msg); } catch (IOException ex) { PieLogger.error(this.getClass(), "Error receiving message.", ex); } catch (PieExecutorTaskFactoryException ex) { PieLogger.error(this.getClass(), "Error receiving message.", ex); } catch (SerializerServiceException ex) { PieLogger.error(this.getClass(), "Error receiving message.", ex); } } } public void stop() { run = false; } }