Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Full Transcript

import static dictpractice.CropManagementApp.writer; import java.net.*; import java.io.*; import javax.swing.JOptionPane; public class PacketServer { public static int SERVER_PORT = 8080; private static int INPUT_BUFFER_LIMIT = 500; private int counter = 0; private String...

import static dictpractice.CropManagementApp.writer; import java.net.*; import java.io.*; import javax.swing.JOptionPane; public class PacketServer { public static int SERVER_PORT = 8080; private static int INPUT_BUFFER_LIMIT = 500; private int counter = 0; private String currentTask = "Unknown"; // To store the current task (writing or retrieving) private static SetWriter writer; public static void main(String[] args) { writer = SetWriter.getInstance(); new Thread(() -> { PacketServer server = new PacketServer(); DatagramSocket socket = server.goOnline(); server.handleRequests(socket); }).start(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } String task = JOptionPane.showInputDialog(null, "What are you doing today?\n(please write \"Add\" or \"Show\")", "TASK", JOptionPane.PLAIN_MESSAGE); runClient(task); } // Modified client method to handle different requests private static void runClient(String request) { DatagramSocket socket = null; try { socket = new DatagramSocket(); InetAddress address = InetAddress.getByName("localhost"); byte[] sendBuffer = request.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, address, SERVER_PORT); socket.send(sendPacket); byte[] receiveBuffer = new byte; DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, receiveBuffer.length); socket.receive(receivePacket); String response = new String(receivePacket.getData(), 0, receivePacket.getLength()); JOptionPane.showMessageDialog(null, response, "Server Response", JOptionPane.INFORMATION_MESSAGE); //System.out.println("Response from server: " + response); } catch (Exception e) { e.printStackTrace(); } finally { if (socket != null && !socket.isClosed()) { socket.close(); } } } DatagramSocket goOnline() { DatagramSocket socket = null; try { socket = new DatagramSocket(SERVER_PORT); System.out.println("SERVER online"); } catch (SocketException e) { System.out.println("SERVER: no network connection"); System.exit(-1); } return socket; } void handleRequests(DatagramSocket socket) { while (true) { try { byte[] receiveBuffer = new byte[INPUT_BUFFER_LIMIT]; DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, receiveBuffer.length); socket.receive(receivePacket); InetAddress address = receivePacket.getAddress(); int clientPort = receivePacket.getPort(); String request = new String(receivePacket.getData(), 0, receivePacket.getLength()); System.out.println("SERVER: Packet received: \"" + request + "\" from " + address + ":" + clientPort); if (request.equalsIgnoreCase("Add")) { // Prompt for more information CropManagementFactory factory = new CropManagementFactory(); String chosenType = JOptionPane.showInputDialog(null, "You are adding what data?\n(please write \"Pest\" or \"Growth\" or \"Planting\")", "MANAGEMENT TYPE", JOptionPane.PLAIN_MESSAGE); String chosenSubType = ""; if (chosenType.equalsIgnoreCase("Pest")) { chosenSubType = JOptionPane.showInputDialog(null, "You are adding what pest data?\n(please write \"Insect\" or \"Fungi\" or \"Weed\")", "PEST TYPE", JOptionPane.PLAIN_MESSAGE); } // Use the global writer instance CropManagement management = factory.createManagement(chosenType, chosenSubType, writer); String taskResult = management.handleTask(); // Send response back to the client sendResponse(socket, address, clientPort, ("Task completed: " + taskResult).getBytes()); }else if (request.equalsIgnoreCase("Show")) { // Retrieve data for showing String filename = JOptionPane.showInputDialog(null, "Enter the file name you want to retrieve", "Retrieve Data", JOptionPane.PLAIN_MESSAGE); String data = writer.readFile(filename); sendResponse(socket, address, clientPort, data.getBytes()); }else { sendResponse(socket, address, clientPort, "Unknown request".getBytes()); } } catch (IOException e) { System.out.println("SERVER: Error receiving client requests"); } } } private void sendResponse(DatagramSocket socket, InetAddress address, int port, byte[] data) { try { DatagramPacket sendPacket = new DatagramPacket(data, data.length, address, port); socket.send(sendPacket); } catch (IOException e) { System.out.println("SERVER: Error sending packet"); } } } class SetWriter { private static SetWriter instance; private SetWriter() { } public static SetWriter getInstance() { if (instance == null) { instance = new SetWriter(); } return instance; } public void writeFile(String filename) { String content = JOptionPane.showInputDialog(null, "Enter Content: ", "Add Text", JOptionPane.PLAIN_MESSAGE); filename += ".txt"; String filePath = "C:\\Users\\KARL SURDELLA\\Desktop\\RECORD\\SYLLABI & COURSEPACK\\AY 2024-2025\\FIRST SEM\\code\\"; try { FileWriter fileWriter = new FileWriter(filePath + filename, true); fileWriter.write(content + "\n"); fileWriter.close(); JOptionPane.showMessageDialog(null, "Content added successfully to " + filename, "Success", JOptionPane.INFORMATION_MESSAGE); } catch (IOException e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, "Failed to write to file", "Error", JOptionPane.ERROR_MESSAGE); } } public String readFile(String filename) { filename += ".txt"; String filePath = "C:\\Users\\KARL SURDELLA\\Desktop\\RECORD\\SYLLABI & COURSEPACK\\AY 2024-2025\\FIRST SEM\\code\\"; StringBuilder content = new StringBuilder(); try { BufferedReader reader = new BufferedReader(new FileReader(filePath + filename)); String line; while ((line = reader.readLine()) != null) { content.append(line).append("\n"); } reader.close(); } catch (IOException e) { return "Error: Unable to retrieve data."; } return content.length() > 0 ? content.toString() : "No data found."; } } class CropManagementFactory { public CropManagement createManagement(String managementType, String pestType, SetWriter writer) { if (managementType.equalsIgnoreCase("pest")) { PestFactory pestFactory = new PestFactory(writer); return pestFactory.createPest(pestType); // Delegate to PestFactory with writer } else if (managementType.equalsIgnoreCase("growth")) { return new CropGrowthManagement(); } else if (managementType.equalsIgnoreCase("planting")) { return new PlantingTechniqueManagement(); } return null; } } // Abstract class for general crop management abstract class CropManagement { public abstract String handleTask(); } // Specific pest management strategies factory // Specific pest management strategies factory class PestFactory { private SetWriter writer; // Constructor to accept the writer instance public PestFactory(SetWriter writer) { this.writer = writer; } public CropManagement createPest(String pestType) { if (pestType.equalsIgnoreCase("insect")) { return new InsectPest(writer); } else if (pestType.equalsIgnoreCase("fungi")) { return new FungalPest(writer); } else if (pestType.equalsIgnoreCase("weed")) { return new WeedPest(writer); } return null; } } // Pest management as part of crop management // Abstract class for Pest management as part of crop management abstract class Pest extends CropManagement { protected SetWriter writer; // Writer instance // Constructor to initialize the writer public Pest(SetWriter writer) { this.writer = writer; } public abstract String handleTask(); } class InsectPest extends Pest { public InsectPest(SetWriter writer) { super(writer); } public String handleTask() { String filename = "InsectPest"; writer.writeFile(filename); // Now using the writer instance return "Insect pest task completed"; } } class FungalPest extends Pest { public FungalPest(SetWriter writer) { super(writer); } public String handleTask() { return "Fungal pest task completed"; } } class WeedPest extends Pest { public WeedPest(SetWriter writer) { super(writer); } public String handleTask() { return "Weed pest: task completed"; } } // Other crop management strategies class CropGrowthManagement extends CropManagement { public String handleTask() { return "Managing crop growth: Apply fertilizer and monitor soil health."; } } class PlantingTechniqueManagement extends CropManagement { public String handleTask() { return "Handling planting: Use proper planting depth and spacing."; } }

Use Quizgecko on...
Browser
Browser