SocketServer

mail@pastecode.io avatar
unknown
plain_text
a year ago
7.2 kB
2
Indexable
Never
public class SocketServer {
    private static final Path JSON_FILE_PATH = Paths.get("C:\\Users\\juhns\\IntelliJ Projects\\Java WebService Task Server\\src\\favorite_music.json");

    public static void main(String[] args) {
        // Define the server port
        int port = 8080;
        // Try with resources block to automatically close the server socket
        try (ServerSocket serverSocket = new ServerSocket(port)) {
            // Print a message indicating the server has started
            System.out.println("Server started on port " + port);
            // Keep accepting client connections indefinitely
            while (true) {
                // Try with resources block to automatically close client sockets and streams
                try (Socket clientSocket = serverSocket.accept();
                     BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                     PrintWriter out = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream()), true)) {

                    // Variable to store client request
                    String request;
                    // Process client requests until the connection is closed
                    while ((request = in.readLine()) != null) {
                        // Print the received request
                        System.out.println("Received request: " + request);

                        // Process the client request and respond accordingly
                        if ("/GET/ALLSONGS".equalsIgnoreCase(request)) {
                            // Read favorite music from the JSON file
                            JSONArray favoriteMusic = readFavoriteMusicJsonArray();
                            // Send the favorite music data to the client
                            out.println(favoriteMusic.toJSONString());
                        } else if ("GETARTIST".equalsIgnoreCase(request)) {
                            // Prompt the client for the artist name
                            out.println("Enter artist name:");
                            // Read the artist name from the client
                            String artistName = in.readLine();

                            // Read favorite music from the JSON file
                            JSONArray favoriteMusic = readFavoriteMusicJsonArray();
                            // Filter songs by the provided artist name
                            JSONArray artistSongs = new JSONArray();
                            for (Object obj : favoriteMusic) {
                                JSONObject song = (JSONObject) obj;
                                if (artistName.equalsIgnoreCase((String) song.get("artist"))) {
                                    artistSongs.add(song);
                                }
                            }
                            // Send the filtered songs to the client
                            out.println(artistSongs.toJSONString());
                        } else if ("GETSONG".equalsIgnoreCase(request)) {
                            // Prompt the client for the song name
                            out.println("Enter song name:");
                            // Read the song name from the client
                            String songName = in.readLine();

                            // Read favorite music from the JSON file
                            JSONArray favoriteMusic = readFavoriteMusicJsonArray();
                            // Find the requested song
                            JSONObject targetSong = null;
                            for (Object obj : favoriteMusic) {
                                JSONObject song = (JSONObject) obj;
                                if (songName.equalsIgnoreCase((String) song.get("song"))) {
                                    targetSong = song;
                                    break;
                                }
                            }
                            // Send the requested song to the client or a "not found" message
                            if (targetSong != null) {
                                out.println(targetSong.toJSONString());
                            } else {
                                out.println("Song not found");
                            }
                        } else if ("ADDSONG".equalsIgnoreCase(request)) {
                            // Prompt the client for the song name
                            out.println("Enter song name:");
                            // Read the song name from the client
                            String songName = in.readLine();

                            // Prompt the client for the artist name
                            out.println("Enter artist name:");
                            // Read the artist name from the client
                            String artistName = in.readLine();

                            // Create a new JSONObject for the new song
                            JSONObject newMusic = new JSONObject();
                            newMusic.put("song", songName);
                            newMusic.put("artist", artistName);

                            // Read favorite music from the JSON file
                            JSONArray favoriteMusic = readFavoriteMusicJsonArray();
                            // Add the new song to the favorite music array
                            favoriteMusic.add(newMusic);
                            // Write the updated favorite music array back to the JSON file
                            Files.write(JSON_FILE_PATH, favoriteMusic.toJSONString().getBytes(StandardCharsets.UTF_8));

                            // Send a confirmation message to the client
                            out.println("Song added");
                        } else {
                            // Send a generic message to the client if the request is not recognized
                            out.println("Message received!");
                        }
                    }
                    // Catch any IOExceptions that occur while processing client requests
                } catch (IOException e) {
                    // Print an error message with the exception details
                    System.err.println("Error processing request: " + e.getMessage());
                }
            }
            // Catch any IOExceptions that occur while starting the server
        } catch (IOException e) {
            // Print an error message with the exception details
            System.err.println("Error starting server: " + e.getMessage());
        }
    }

    // Define a method to read the favorite music JSON array from the JSON file
    private static JSONArray readFavoriteMusicJsonArray() throws IOException {
        // Read the contents of the JSON file into a string
        String content = new String(Files.readAllBytes(JSON_FILE_PATH), StandardCharsets.UTF_8);
        // Parse the JSON string and return it as a JSONArray
        return (JSONArray) JSONValue.parse(content);
    }
}