/* * 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.pieShareClient.services; import java.io.ByteArrayInputStream; import java.net.DatagramPacket; import javax.json.Json; import javax.json.JsonObject; import javax.json.JsonReader; import org.bouncycastle.util.Arrays; import org.pieShare.pieShareClient.api.Callback; import org.pieShare.pieTools.pieUtilities.service.pieLogger.PieLogger; /** * * @author Richard */ public class InputTask implements Runnable { private DatagramPacket packet; private ClientSendTask sendTask; private String ackMsg = "{\"type\":\"ACK\"}"; private Callback callback; public void setCallback(Callback callback) { this.callback = callback; } public void setSendTask(ClientSendTask sendTask) { this.sendTask = sendTask; } public void setPacket(DatagramPacket packet) { this.packet = packet; } public void run() { newPacketReceived(); } private synchronized void newPacketReceived() { byte[] bytes = new byte[1024]; bytes = Arrays.copyOfRange(bytes, 0, packet.getLength()); PieLogger.info(this.getClass(), String.format("Input Message: %s", new String(bytes))); JsonObject input = processInput(bytes); if (input.getString("type").equals("connection")) { JsonObject newClient = input.getJsonObject("client"); callback.Handle(newClient); } if (input.getString("type").equals("msg")) { System.out.println("Message Arrived: " + input.getString("msg")); } if (input.getString("type").equals("punch")) { sendTask.send(ackMsg.getBytes(), packet.getAddress().getHostAddress(), packet.getPort()); } if (input.getString("type").equals("ACK")) { sendTask.setACK(true); } } public JsonObject processInput(byte[] input) { ByteArrayInputStream byteInStream = new ByteArrayInputStream(input); JsonReader jsonReader = Json.createReader(byteInStream); JsonObject ob = jsonReader.readObject(); PieLogger.info(this.getClass(), String.format("ConnectionText: %s", ob.toString())); return ob; } }