commit
823d344084
@ -0,0 +1 @@ |
|||||||
|
.vscode |
@ -0,0 +1,2 @@ |
|||||||
|
--add-opens=java.base/java.util=ALL-UNNAMED |
||||||
|
--add-opens=java.base/java.lang=ALL-UNNAMED |
@ -0,0 +1,229 @@ |
|||||||
|
import java.io.BufferedInputStream; |
||||||
|
import java.io.DataInputStream; |
||||||
|
import java.io.DataOutputStream; |
||||||
|
import java.io.IOException; |
||||||
|
import java.net.ServerSocket; |
||||||
|
import java.net.Socket; |
||||||
|
import java.util.Map.Entry; |
||||||
|
import java.awt.AWTException; |
||||||
|
import java.awt.Robot; |
||||||
|
import java.awt.event.KeyEvent; |
||||||
|
|
||||||
|
import lc.kra.system.keyboard.GlobalKeyboardHook; |
||||||
|
import lc.kra.system.keyboard.event.GlobalKeyAdapter; |
||||||
|
import lc.kra.system.keyboard.event.GlobalKeyEvent; |
||||||
|
|
||||||
|
class Client { |
||||||
|
// initialize socket and input output streams
|
||||||
|
private Socket socket = null; |
||||||
|
private DataInputStream input = null; |
||||||
|
private DataOutputStream out = null; |
||||||
|
|
||||||
|
private static boolean run = true; |
||||||
|
// constructor to put ip address and port
|
||||||
|
public Client(String address, int port) |
||||||
|
{ |
||||||
|
GlobalKeyboardHook keyboardHook = new GlobalKeyboardHook(true); // Use false here to switch to hook instead of raw input
|
||||||
|
|
||||||
|
System.out.println("Global keyboard hook successfully started, press [escape] key to shutdown. Connected keyboards:"); |
||||||
|
for (Entry<Long, String> keyboard : GlobalKeyboardHook.listKeyboards().entrySet()) { |
||||||
|
System.out.format("%d: %s\n", keyboard.getKey(), keyboard.getValue()); |
||||||
|
} |
||||||
|
|
||||||
|
keyboardHook.addKeyListener(new GlobalKeyAdapter() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void keyPressed(GlobalKeyEvent event) { |
||||||
|
try { |
||||||
|
switch (event.getVirtualKeyCode()){ |
||||||
|
case GlobalKeyEvent.VK_RETURN:{ |
||||||
|
out.writeUTF("FOLLOW"); |
||||||
|
}break; |
||||||
|
case GlobalKeyEvent.VK_NUMPAD8: |
||||||
|
case GlobalKeyEvent.VK_UP:{ |
||||||
|
out.writeUTF("FORWARD"); |
||||||
|
}break; |
||||||
|
case GlobalKeyEvent.VK_NUMPAD5: |
||||||
|
case GlobalKeyEvent.VK_DOWN:{ |
||||||
|
out.writeUTF("BACKWARD"); |
||||||
|
}break; |
||||||
|
case GlobalKeyEvent.VK_NUMPAD4: |
||||||
|
case GlobalKeyEvent.VK_LEFT:{ |
||||||
|
out.writeUTF("LEFT"); |
||||||
|
}break; |
||||||
|
case GlobalKeyEvent.VK_NUMPAD6: |
||||||
|
case GlobalKeyEvent.VK_RIGHT:{ |
||||||
|
out.writeUTF("RIGHT"); |
||||||
|
}break; |
||||||
|
case GlobalKeyEvent.VK_NUMPAD0: |
||||||
|
case GlobalKeyEvent.VK_NUMPAD1: |
||||||
|
case GlobalKeyEvent.VK_1: |
||||||
|
case GlobalKeyEvent.VK_2: |
||||||
|
case GlobalKeyEvent.VK_3: |
||||||
|
case GlobalKeyEvent.VK_Z:{ |
||||||
|
out.writeUTF("FIGHT"); |
||||||
|
}break; |
||||||
|
case GlobalKeyEvent.VK_NUMPAD3: |
||||||
|
case 110: |
||||||
|
case GlobalKeyEvent.VK_DELETE:{ |
||||||
|
out.writeUTF("CHILL"); |
||||||
|
}break; |
||||||
|
} |
||||||
|
} catch (IOException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
if (event.getVirtualKeyCode() == GlobalKeyEvent.VK_ESCAPE) { |
||||||
|
run = false; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void keyReleased(GlobalKeyEvent event) { |
||||||
|
System.out.println(event); |
||||||
|
} |
||||||
|
}); |
||||||
|
// establish a connection
|
||||||
|
try { |
||||||
|
socket = new Socket(address, port); |
||||||
|
System.out.println("Connected"); |
||||||
|
|
||||||
|
// takes input from terminal
|
||||||
|
input = new DataInputStream(System.in); |
||||||
|
|
||||||
|
// sends output to the socket
|
||||||
|
out = new DataOutputStream( |
||||||
|
socket.getOutputStream()); |
||||||
|
} |
||||||
|
catch (IOException u) { |
||||||
|
System.out.println(u); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
// string to read message from input
|
||||||
|
String line = ""; |
||||||
|
|
||||||
|
// keep reading until "Over" is input
|
||||||
|
while (!line.equals("Over")) { |
||||||
|
try { |
||||||
|
line = input.readLine(); |
||||||
|
out.writeUTF(line); |
||||||
|
} |
||||||
|
catch (IOException i) { |
||||||
|
System.out.println(i); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// close the connection
|
||||||
|
try { |
||||||
|
input.close(); |
||||||
|
out.close(); |
||||||
|
socket.close(); |
||||||
|
keyboardHook.shutdownHook(); |
||||||
|
} |
||||||
|
catch (IOException i) { |
||||||
|
System.out.println(i); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void main(String args[]) |
||||||
|
{ |
||||||
|
Client client = new Client("127.0.0.1", 5000); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
class Server |
||||||
|
{ |
||||||
|
//initialize socket and input stream
|
||||||
|
private Socket socket = null; |
||||||
|
private ServerSocket server = null; |
||||||
|
private DataInputStream in = null; |
||||||
|
Robot r; |
||||||
|
|
||||||
|
private void PressKeyWithModifier(int modifier,int keycode) { |
||||||
|
r.keyPress(modifier); |
||||||
|
r.keyPress(keycode); |
||||||
|
r.keyRelease(keycode);r.delay(100); |
||||||
|
r.keyRelease(modifier); |
||||||
|
} |
||||||
|
|
||||||
|
// constructor with port
|
||||||
|
public Server(int port) |
||||||
|
{ |
||||||
|
try { |
||||||
|
r = new Robot(); |
||||||
|
} catch (AWTException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
// starts server and waits for a connection
|
||||||
|
try |
||||||
|
{ |
||||||
|
server = new ServerSocket(port); |
||||||
|
System.out.println("Server started"); |
||||||
|
|
||||||
|
System.out.println("Waiting for a client ..."); |
||||||
|
|
||||||
|
socket = server.accept(); |
||||||
|
System.out.println("Client accepted"); |
||||||
|
|
||||||
|
// takes input from the client socket
|
||||||
|
in = new DataInputStream( |
||||||
|
new BufferedInputStream(socket.getInputStream())); |
||||||
|
|
||||||
|
String line = ""; |
||||||
|
|
||||||
|
// reads message from client until "Over" is sent
|
||||||
|
while (!line.equals("Over")) |
||||||
|
{ |
||||||
|
try |
||||||
|
{ |
||||||
|
line = in.readUTF(); |
||||||
|
switch (line){ |
||||||
|
case "FOLLOW":{ |
||||||
|
PressKeyWithModifier(KeyEvent.VK_CONTROL,KeyEvent.VK_7); |
||||||
|
}break; |
||||||
|
case "FORWARD":{ |
||||||
|
|
||||||
|
}break; |
||||||
|
case "BACKWARD":{ |
||||||
|
|
||||||
|
}break; |
||||||
|
case "LEFT":{ |
||||||
|
|
||||||
|
}break; |
||||||
|
case "RIGHT":{ |
||||||
|
|
||||||
|
}break; |
||||||
|
case "FIGHT":{ |
||||||
|
|
||||||
|
}break; |
||||||
|
case "CHILL":{ |
||||||
|
|
||||||
|
}break; |
||||||
|
default:{ |
||||||
|
System.out.println("Unknown command: "+line); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
catch(IOException i) |
||||||
|
{ |
||||||
|
System.out.println(i); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
System.out.println("Closing connection"); |
||||||
|
|
||||||
|
// close connection
|
||||||
|
socket.close(); |
||||||
|
in.close(); |
||||||
|
} |
||||||
|
catch(IOException i) |
||||||
|
{ |
||||||
|
System.out.println(i); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void main(String args[]) |
||||||
|
{ |
||||||
|
Server server = new Server(5000); |
||||||
|
} |
||||||
|
} |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue