package org.ironbrain.client; import com.tulskiy.keymaster.common.Provider; import org.glassfish.tyrus.server.Server; import javax.imageio.ImageIO; import javax.swing.*; import javax.websocket.DeploymentException; import java.awt.*; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.ClipboardOwner; import java.awt.datatransfer.Transferable; import java.awt.event.ActionEvent; import java.awt.image.BufferedImage; import java.io.IOException; public class Main implements ClipboardOwner { public static final String SCREEN_SHOT_FILE_FORMAT = "jpg"; int port = 9993;//Default port public static void main(String[] args) throws Throwable { EventQueue.invokeLater(()-> new Main(args)); } public Main(String[] args) { if (args.length != 0) { port = Integer.valueOf(args[0]); } //URL like ws://localhost:9993/websockets/ib Server server = new Server("localhost", port, "/websockets", null, IBServerEndpoint.class); try { server.start(); createTray(); registerGlobalHotkeys(); loadClasses(); } catch (DeploymentException exc) { JOptionPane.showMessageDialog(null, String.format("Port %d already in use", port)); } catch (AWTException | IOException e) { e.printStackTrace(); } } private void loadClasses() { //For speed-up new JFrame(); } private void registerGlobalHotkeys() { Provider provider = Provider.getCurrentProvider(true); provider.register(KeyStroke.getKeyStroke("control PRINTSCREEN"), key ->{ captureScreen(null); }); } private void createTray() throws IOException, AWTException { if (SystemTray.isSupported()) { Image image = ImageIO.read(getClass().getResource("/gear.png")); final PopupMenu popup = new PopupMenu(); final TrayIcon trayIcon = new TrayIcon(image); final SystemTray tray = SystemTray.getSystemTray(); MenuItem portInfo = new MenuItem("Port - " + port); popup.add(portInfo); popup.addSeparator(); MenuItem captureScreenItem = new MenuItem("Capture screen (Ctrl + PrtScr)"); captureScreenItem.addActionListener(this::captureScreen); popup.add(captureScreenItem); popup.addSeparator(); MenuItem exitItem = new MenuItem("Exit"); exitItem.addActionListener(event -> { System.exit(0); }); popup.add(exitItem); trayIcon.setPopupMenu(popup); tray.add(trayIcon); /* trayIcon.displayMessage("Client successfully launched", "Web socket port - " + port, TrayIcon.MessageType.INFO);*/ } } private void captureScreen(ActionEvent e) { ScreenCapture screenCapture = new ScreenCapture(img -> { try { saveImage(img); } catch (IOException e1) { e1.printStackTrace(); } }); screenCapture.setVisible(true); } private void saveImage(BufferedImage bufferedImage) throws IOException { TransferableImage trans = new TransferableImage(bufferedImage); Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); c.setContents(trans, this); } @Override public void lostOwnership(Clipboard clipboard, Transferable contents) { } }