started web socket implementation

will look at splitting files at a later stage
This commit is contained in:
nzBryce101
2024-04-05 19:30:22 +13:00
parent f62d480b23
commit 2ab9822a55
2 changed files with 56 additions and 50 deletions

View File

@@ -1,9 +1,6 @@
import java.io.BufferedReader; import java.io.*;
import java.io.IOException; import java.net.*;
import java.io.InputStreamReader; import java.util.List;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@@ -26,50 +23,27 @@ public class MCbot extends JavaPlugin {
// Stop your socket server here if needed // Stop your socket server here if needed
} }
private void startSocketServer() { public void startSocketServer() {
// Implement your socket server logic here
// Example: Create a new thread for socket server
new Thread(() -> {
try { try {
try (// Create a socket server on port 8888 ServerSocket serverSocket = new ServerSocket(8888); // Port for socket communication
ServerSocket serverSocket = new ServerSocket(8888)) {
getLogger().info("Socket server started on port 8888");
while (true) { while (true) {
// Accept incoming client connections
Socket clientSocket = serverSocket.accept(); Socket clientSocket = serverSocket.accept();
getLogger().info("Client connected: " + clientSocket.getInetAddress()); BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
// Handle client communication (e.g., read commands and send responses) String command = in.readLine();
handleClient(clientSocket);
}
}
} catch (IOException e) {
getLogger().severe("Error starting socket server: " + e.getMessage());
}
}).start();
}
private void handleClient(Socket clientSocket) { // Process the command
// Implement logic to handle client communication here
// Example: Read commands from client and send responses
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter writer = new PrintWriter(clientSocket.getOutputStream(), true);
// Read command from client
String command = reader.readLine();
getLogger().info("Received command from client: " + command);
// Process command and send response
String response = processCommand(command); String response = processCommand(command);
writer.println(response);
// Close client connection // Send the response back to the client
out.println(response);
clientSocket.close(); clientSocket.close();
} catch (IOException e) {
getLogger().severe("Error handling client: " + e.getMessage());
} }
} catch (IOException e) {
e.printStackTrace();
} }
private String processCommand(String command) { private String processCommand(String command) {
@@ -77,10 +51,19 @@ public class MCbot extends JavaPlugin {
// Example: If command is "!players", return player list from Minecraft server // Example: If command is "!players", return player list from Minecraft server
if (command.equals("!players")) { if (command.equals("!players")) {
// Use Spigot API to get player list // Use Spigot API to get player list
String playerList = String.join(", ", getServer().getOnlinePlayers().stream() List<Player> onlinePlayers = Bukkit.getServer().getOnlinePlayers().stream().collect(Collectors.toList()));
.map(player -> player.getName())
.collect(Collectors.toList())); if (onlinePlayers.isEmpty()) {
return "Players online: " + playerList; return "No players are currently online.";
} else {
StringBuilder playerList = new StringBuilder("Players online: ");
for (Player player : onlinePlayers) {
playerList.append(player.getName()).append(", ");
}
// Remove the trailing comma and space
playerList.setLength(playerList.length() - 2);
return playerList.toString();
}
} }
if (command.startsWith("!exp ")) { if (command.startsWith("!exp ")) {
// Extract player name from command // Extract player name from command

View File

@@ -1,4 +1,5 @@
import com.google.api.client.googleapis.auth.oauth2.Credential; import com.google.api.client.googleapis.auth.oauth2.Credential;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.googleapis.http.HttpRequest; import com.google.api.client.googleapis.http.HttpRequest;
import com.google.api.client.googleapis.http.HttpRequestInitializer; import com.google.api.client.googleapis.http.HttpRequestInitializer;
@@ -11,7 +12,8 @@ import com.google.api.services.youtube.model.LiveChatMessageSnippet;
import com.google.api.services.youtube.model.LiveChatTextMessageDetails; import com.google.api.services.youtube.model.LiveChatTextMessageDetails;
import com.google.api.services.youtube.model.LiveChatTextMessageDetails.MessageTextDetails; import com.google.api.services.youtube.model.LiveChatTextMessageDetails.MessageTextDetails;
import java.io.IOException; import java.io.*;
import java.net.*;
import java.security.GeneralSecurityException; import java.security.GeneralSecurityException;
import java.util.List; import java.util.List;
@@ -87,4 +89,25 @@ public class MCchatbotyt {
LiveChatMessageListResponse response = liveChatRequest.execute(); LiveChatMessageListResponse response = liveChatRequest.execute();
return response.getItems(); return response.getItems();
} }
// Connect to the socket server in MCbot.java
Socket socket = new Socket("localhost", 12345); // Connect to localhost on port 12345
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// Send command to MCbot.java
out.println("!players");
// Receive response from MCbot.java
String response = in.readLine();
System.out.println("Response from MCbot.java: " + response);
socket.close();
} catch (IOException | GeneralSecurityException e) {
e.printStackTrace();
} }
}
}