SocketServer
unknown
plain_text
3 years ago
7.2 kB
13
Indexable
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);
}
}Editor is loading...