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.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
import java.net.*;
import java.util.List;
import java.util.stream.Collectors;
import org.bukkit.Bukkit;
@@ -26,61 +23,47 @@ public class MCbot extends JavaPlugin {
// Stop your socket server here if needed
}
private void startSocketServer() {
// Implement your socket server logic here
// Example: Create a new thread for socket server
new Thread(() -> {
try {
try (// Create a socket server on port 8888
ServerSocket serverSocket = new ServerSocket(8888)) {
getLogger().info("Socket server started on port 8888");
while (true) {
// Accept incoming client connections
Socket clientSocket = serverSocket.accept();
getLogger().info("Client connected: " + clientSocket.getInetAddress());
// Handle client communication (e.g., read commands and send responses)
handleClient(clientSocket);
}
}
} catch (IOException e) {
getLogger().severe("Error starting socket server: " + e.getMessage());
}
}).start();
}
private void handleClient(Socket clientSocket) {
// Implement logic to handle client communication here
// Example: Read commands from client and send responses
public void startSocketServer() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter writer = new PrintWriter(clientSocket.getOutputStream(), true);
ServerSocket serverSocket = new ServerSocket(8888); // Port for socket communication
// Read command from client
String command = reader.readLine();
getLogger().info("Received command from client: " + command);
while (true) {
Socket clientSocket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
// Process command and send response
String response = processCommand(command);
writer.println(response);
String command = in.readLine();
// Close client connection
clientSocket.close();
// Process the command
String response = processCommand(command);
// Send the response back to the client
out.println(response);
clientSocket.close();
}
} catch (IOException e) {
getLogger().severe("Error handling client: " + e.getMessage());
e.printStackTrace();
}
}
private String processCommand(String command) {
// Implement logic to process commands here
// Example: If command is "!players", return player list from Minecraft server
if (command.equals("!players")) {
// Use Spigot API to get player list
String playerList = String.join(", ", getServer().getOnlinePlayers().stream()
.map(player -> player.getName())
.collect(Collectors.toList()));
return "Players online: " + playerList;
List<Player> onlinePlayers = Bukkit.getServer().getOnlinePlayers().stream().collect(Collectors.toList()));
if (onlinePlayers.isEmpty()) {
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 ")) {
// 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.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.googleapis.http.HttpRequest;
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.MessageTextDetails;
import java.io.IOException;
import java.io.*;
import java.net.*;
import java.security.GeneralSecurityException;
import java.util.List;
@@ -87,4 +89,25 @@ public class MCchatbotyt {
LiveChatMessageListResponse response = liveChatRequest.execute();
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();
}
}
}