Initial commit
This commit is contained in:
3
Java/DarkNetApp/.idea/.gitignore
generated
vendored
Normal file
3
Java/DarkNetApp/.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
11
Java/DarkNetApp/.idea/artifacts/Client_jar.xml
generated
Normal file
11
Java/DarkNetApp/.idea/artifacts/Client_jar.xml
generated
Normal file
@@ -0,0 +1,11 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="Client:jar">
|
||||
<output-path>$PROJECT_DIR$/out/artifacts/Client_jar</output-path>
|
||||
<root id="archive" name="Client.jar">
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/rsc/client/META-INF/MANIFEST.MF" />
|
||||
</element>
|
||||
<element id="module-output" name="DarkNetApp" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
11
Java/DarkNetApp/.idea/artifacts/Server_jar.xml
generated
Normal file
11
Java/DarkNetApp/.idea/artifacts/Server_jar.xml
generated
Normal file
@@ -0,0 +1,11 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="Server:jar">
|
||||
<output-path>$PROJECT_DIR$/out/artifacts/Server_jar</output-path>
|
||||
<root id="archive" name="Server.jar">
|
||||
<element id="directory" name="META-INF">
|
||||
<element id="file-copy" path="$PROJECT_DIR$/rsc/server/META-INF/MANIFEST.MF" />
|
||||
</element>
|
||||
<element id="module-output" name="DarkNetApp" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
9
Java/DarkNetApp/.idea/libraries/mysqlConnector.xml
generated
Normal file
9
Java/DarkNetApp/.idea/libraries/mysqlConnector.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="mysqlConnector">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/../mysqlConnector.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
||||
6
Java/DarkNetApp/.idea/misc.xml
generated
Normal file
6
Java/DarkNetApp/.idea/misc.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
||||
8
Java/DarkNetApp/.idea/modules.xml
generated
Normal file
8
Java/DarkNetApp/.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/DarkNetApp.iml" filepath="$PROJECT_DIR$/DarkNetApp.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
124
Java/DarkNetApp/.idea/uiDesigner.xml
generated
Normal file
124
Java/DarkNetApp/.idea/uiDesigner.xml
generated
Normal file
@@ -0,0 +1,124 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Palette2">
|
||||
<group name="Swing">
|
||||
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
|
||||
</item>
|
||||
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
|
||||
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
|
||||
<initial-values>
|
||||
<property name="text" value="Button" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="RadioButton" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="CheckBox" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="Label" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||
<preferred-size width="200" height="200" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||
<preferred-size width="200" height="200" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
|
||||
<preferred-size width="-1" height="20" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
|
||||
</item>
|
||||
</group>
|
||||
</component>
|
||||
</project>
|
||||
12
Java/DarkNetApp/DarkNetApp.iml
Normal file
12
Java/DarkNetApp/DarkNetApp.iml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" exported="" name="mysqlConnector" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
BIN
Java/DarkNetApp/chats/room1.chat
Normal file
BIN
Java/DarkNetApp/chats/room1.chat
Normal file
Binary file not shown.
BIN
Java/DarkNetApp/out/artifacts/Client_jar/Client.jar
Normal file
BIN
Java/DarkNetApp/out/artifacts/Client_jar/Client.jar
Normal file
Binary file not shown.
BIN
Java/DarkNetApp/out/artifacts/Server_jar/Server.jar
Normal file
BIN
Java/DarkNetApp/out/artifacts/Server_jar/Server.jar
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
3
Java/DarkNetApp/rsc/client/META-INF/MANIFEST.MF
Normal file
3
Java/DarkNetApp/rsc/client/META-INF/MANIFEST.MF
Normal file
@@ -0,0 +1,3 @@
|
||||
Manifest-Version: 1.0
|
||||
Main-Class: de.craftix.netapp.client.Client
|
||||
|
||||
3
Java/DarkNetApp/rsc/server/META-INF/MANIFEST.MF
Normal file
3
Java/DarkNetApp/rsc/server/META-INF/MANIFEST.MF
Normal file
@@ -0,0 +1,3 @@
|
||||
Manifest-Version: 1.0
|
||||
Main-Class: de.craftix.netapp.server.Server
|
||||
|
||||
33
Java/DarkNetApp/src/de/craftix/netapp/Chat.java
Normal file
33
Java/DarkNetApp/src/de/craftix/netapp/Chat.java
Normal file
@@ -0,0 +1,33 @@
|
||||
package de.craftix.netapp;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.sql.Timestamp;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Chat implements Serializable {
|
||||
|
||||
private final ArrayList<Message> messages = new ArrayList<>();
|
||||
private final String serverIP;
|
||||
private final String name;
|
||||
|
||||
public Chat(String serverIP, String name) { this.serverIP = Methods.encrypt(serverIP); this.name = Methods.encrypt(name); }
|
||||
|
||||
public void updateChat() {
|
||||
Methods.clearConsole();
|
||||
System.out.println("---------------------------" + getName() + "---------------------------");
|
||||
System.out.println("Server: " + getServerIP());
|
||||
for (Message message : messages) {
|
||||
String time = DateTimeFormatter.ofPattern("HH:mm:ss").format(new Timestamp(message.getTime()).toLocalDateTime());
|
||||
System.out.println("[" + time + "] - " + message.getSender().getUser() + ": " + message.getText() + "\n");
|
||||
}
|
||||
}
|
||||
|
||||
public void addMessage(Message message) { messages.add(message); }
|
||||
public void removeMessage(Message message) { messages.add(message); }
|
||||
public Message[] getMessages() { return messages.toArray(new Message[0]); }
|
||||
|
||||
public String getServerIP() { return Methods.decrypt(serverIP); }
|
||||
public String getName() { return Methods.decrypt(name); }
|
||||
|
||||
}
|
||||
36
Java/DarkNetApp/src/de/craftix/netapp/Logger.java
Normal file
36
Java/DarkNetApp/src/de/craftix/netapp/Logger.java
Normal file
@@ -0,0 +1,36 @@
|
||||
package de.craftix.netapp;
|
||||
|
||||
import java.awt.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
public class Logger {
|
||||
protected String applicationName;
|
||||
|
||||
public Logger(String applicationName) {
|
||||
this.applicationName = applicationName;
|
||||
}
|
||||
|
||||
public void info(String message) {
|
||||
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
System.out.println("[" + dtf.format(now) + "] [INFO] [" + applicationName + "] " + message);
|
||||
}
|
||||
|
||||
public void warning(String message) {
|
||||
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
System.out.println("\u001B[33m" + "[" + dtf.format(now) + "] [WARNING] [" + applicationName + "] " + message + "\u001B[0m");
|
||||
}
|
||||
|
||||
public void error(String message) {
|
||||
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
System.err.println("[" + dtf.format(now) + "] [ERROR] [" + applicationName + "] " + message);
|
||||
}
|
||||
|
||||
public static void globalInfo(String message) { new Logger("Global").info(message); }
|
||||
public static void globalWarning(String message) { new Logger("Global").warning(message); }
|
||||
public static void globalError(String message) { new Logger("Global").error(message); }
|
||||
|
||||
}
|
||||
21
Java/DarkNetApp/src/de/craftix/netapp/Message.java
Normal file
21
Java/DarkNetApp/src/de/craftix/netapp/Message.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package de.craftix.netapp;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class Message implements Serializable {
|
||||
|
||||
private User sender;
|
||||
private String text;
|
||||
private long time;
|
||||
|
||||
public Message(User sender, String text) { setTime(System.currentTimeMillis()); setSender(sender); setText(text); }
|
||||
|
||||
public void setSender(User sender) { this.sender = sender; }
|
||||
public void setText(String text) { this.text = Methods.encrypt(text); }
|
||||
public void setTime(long time) { this.time = time; }
|
||||
|
||||
public User getSender() { return sender; }
|
||||
public String getText() { return Methods.decrypt(text); }
|
||||
public long getTime() { return time; }
|
||||
|
||||
}
|
||||
31
Java/DarkNetApp/src/de/craftix/netapp/Methods.java
Normal file
31
Java/DarkNetApp/src/de/craftix/netapp/Methods.java
Normal file
@@ -0,0 +1,31 @@
|
||||
package de.craftix.netapp;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public class Methods {
|
||||
|
||||
public static void sleep(int time) { try { Thread.sleep(time); } catch (Exception ignored) {} }
|
||||
|
||||
public static String encrypt(String msg) {
|
||||
long time = System.currentTimeMillis();
|
||||
Random rand = new Random(time);
|
||||
char[] chars = msg.toCharArray();
|
||||
StringBuilder out = new StringBuilder(time + " - ");
|
||||
for (int i = 0; i < chars.length; i++) out.append(chars[i] += rand.nextInt());
|
||||
return out.toString();
|
||||
}
|
||||
|
||||
public static String decrypt(String msg) {
|
||||
String[] seq = msg.split(" - ");
|
||||
Random rand = new Random(Long.parseLong(seq[0]));
|
||||
char[] chars = seq[1].toCharArray();
|
||||
StringBuilder out = new StringBuilder();
|
||||
for (int i = 0; i < chars.length; i++) out.append(chars[i] -= rand.nextInt());
|
||||
return out.toString();
|
||||
}
|
||||
|
||||
public static void clearConsole() {
|
||||
for (int i = 0; i < 1000; i++) System.out.println(" ");
|
||||
}
|
||||
|
||||
}
|
||||
25
Java/DarkNetApp/src/de/craftix/netapp/User.java
Normal file
25
Java/DarkNetApp/src/de/craftix/netapp/User.java
Normal file
@@ -0,0 +1,25 @@
|
||||
package de.craftix.netapp;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class User implements Serializable {
|
||||
|
||||
private String username;
|
||||
private String password;
|
||||
private String adminPass;
|
||||
public boolean admin = false;
|
||||
|
||||
public User() {}
|
||||
public User(String username, String password) { setUser(username); setPass(password); }
|
||||
public User(String username, String password, boolean admin) { setUser(username); setPass(password); this.admin = admin; }
|
||||
public User(String username, String password, String adminPass, boolean admin) { setUser(username); setPass(password); setAdmin(adminPass); this.admin = admin; }
|
||||
|
||||
public void setUser(String user) { this.username = Methods.encrypt(user); }
|
||||
public void setPass(String pass) { this.password = Methods.encrypt(pass); }
|
||||
public void setAdmin(String admin) { this.adminPass = Methods.encrypt(admin); }
|
||||
|
||||
public String getUser() { return Methods.decrypt(username); }
|
||||
public String getPass() { return Methods.decrypt(password); }
|
||||
public String getAdmin() { return Methods.decrypt(adminPass); }
|
||||
|
||||
}
|
||||
149
Java/DarkNetApp/src/de/craftix/netapp/client/Client.java
Normal file
149
Java/DarkNetApp/src/de/craftix/netapp/client/Client.java
Normal file
@@ -0,0 +1,149 @@
|
||||
package de.craftix.netapp.client;
|
||||
|
||||
import de.craftix.netapp.*;
|
||||
import de.craftix.netapp.client.commands.*;
|
||||
import de.craftix.netapp.packets.Packet;
|
||||
import de.craftix.netapp.packets.PacketType;
|
||||
import de.craftix.netapp.server.Server;
|
||||
|
||||
import javax.sound.sampled.AudioInputStream;
|
||||
import javax.sound.sampled.AudioSystem;
|
||||
import javax.sound.sampled.Clip;
|
||||
import java.io.*;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Client implements Runnable {
|
||||
public static String serverAddress;
|
||||
public static User user;
|
||||
public static Chat currentChat;
|
||||
|
||||
private static final List<Command> commands = new ArrayList<>();
|
||||
private static Logger commandLog;
|
||||
private static Thread commandThread;
|
||||
private static Thread updateThread;
|
||||
|
||||
public static void main(String[] args) {
|
||||
Logger.globalInfo("Starting Client...");
|
||||
registerCommands();
|
||||
commandLog = new Logger("CommandThread");
|
||||
commandThread = new Thread(new Client());
|
||||
updateThread = new Thread(getUpdateRunnable());
|
||||
|
||||
commandThread.start();
|
||||
Logger.globalInfo("Client started");
|
||||
}
|
||||
|
||||
private static void registerCommands() {
|
||||
addCommand(new StopCmd("Stop", "Shutdown", "End", "Close"));
|
||||
addCommand(new SendPacketCmd("SendPacket", "Send", "Packet"));
|
||||
addCommand(new ConnectCmd("Connect", "Server"));
|
||||
addCommand(new RegisterCmd("Register"));
|
||||
addCommand(new LoginCmd("Login"));
|
||||
addCommand(new CreateAdminCmd("CreateAdmin", "cadmin"));
|
||||
addCommand(new JoinChatCmd("JoinChat", "join", "chat"));
|
||||
addCommand(new CreateChat("CreateChat", "create"));
|
||||
}
|
||||
|
||||
public static Packet sendObjectToServer(Object data, String ip) {
|
||||
try {
|
||||
Socket server = new Socket();
|
||||
server.connect(new InetSocketAddress(ip, Server.getPort()), 500);
|
||||
ObjectOutputStream stream = new ObjectOutputStream(new BufferedOutputStream(server.getOutputStream()));
|
||||
stream.writeObject(data);
|
||||
stream.flush();
|
||||
ObjectInputStream input = new ObjectInputStream(new BufferedInputStream(server.getInputStream()));
|
||||
Packet out = (Packet) input.readObject();
|
||||
input.close();
|
||||
stream.close();
|
||||
server.close();
|
||||
return out;
|
||||
}catch (Exception e) { new Logger("Server Connection").error(e.getMessage()); }
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void stop() {
|
||||
commandThread.interrupt();
|
||||
updateThread.interrupt();
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
while (!Thread.currentThread().isInterrupted()) {
|
||||
try {
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
|
||||
String qry = reader.readLine();
|
||||
handleCommand(qry);
|
||||
}catch (Exception e) { commandLog.error(e.getMessage()); }
|
||||
}
|
||||
}
|
||||
|
||||
private static void addCommand(Command cmd) { commands.add(cmd); }
|
||||
private static void handleCommand(String qry) {
|
||||
if (currentChat == null) {
|
||||
String[] raw = qry.split(" ");
|
||||
String cmd = raw[0];
|
||||
String[] args = new String[raw.length - 1];
|
||||
for (int i = 1; i < raw.length; i++) args[i - 1] = raw[i];
|
||||
boolean success = false;
|
||||
for (Command c : commands) {
|
||||
if (c.getName().equalsIgnoreCase(cmd)) {
|
||||
c.onCommand(cmd, args);
|
||||
success = true;
|
||||
}
|
||||
if (c.getAlias() == null || c.getAlias().length == 0) continue;
|
||||
for (String alias : c.getAlias()) if (alias.equalsIgnoreCase(cmd)) {
|
||||
c.onCommand(cmd, args);
|
||||
success = true;
|
||||
}
|
||||
}
|
||||
if (!success) commandLog.error("This command does not exists");
|
||||
}else {
|
||||
if (qry.startsWith("/")) {
|
||||
qry = qry.replace("/", "");
|
||||
String[] raw = qry.split(" ");
|
||||
String cmd = raw[0];
|
||||
String[] args = new String[raw.length - 1];
|
||||
for (int i = 1; i < raw.length; i++) args[i - 1] = raw[i];
|
||||
boolean success = false;
|
||||
for (Command c : commands) {
|
||||
if (c.getName().equalsIgnoreCase(cmd)) {
|
||||
c.onCommand(cmd, args);
|
||||
success = true;
|
||||
}
|
||||
if (c.getAlias() == null || c.getAlias().length == 0) continue;
|
||||
for (String alias : c.getAlias()) if (alias.equalsIgnoreCase(cmd)) {
|
||||
c.onCommand(cmd, args);
|
||||
success = true;
|
||||
}
|
||||
}
|
||||
if (!success) commandLog.error("This command does not exists");
|
||||
}else {
|
||||
Packet answer = sendObjectToServer(new Packet(new Message(user, qry), currentChat.getName()), serverAddress);
|
||||
assert answer != null;
|
||||
if (!answer.value) Logger.globalError("Something went wrong");
|
||||
}
|
||||
}
|
||||
}
|
||||
private static Runnable getUpdateRunnable() {
|
||||
return () -> {
|
||||
while (!Thread.currentThread().isInterrupted()) {
|
||||
Methods.sleep(1000);
|
||||
if (user != null && currentChat != null) {
|
||||
Packet answer = sendObjectToServer(new Packet(currentChat, user, PacketType.CHATUPDATE), serverAddress);
|
||||
assert answer != null;
|
||||
if (answer.chat.getMessages().length != currentChat.getMessages().length && answer.value) {
|
||||
currentChat = answer.chat;
|
||||
currentChat.updateChat();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static Thread getCommandThread() { return commandThread; }
|
||||
public static Thread getUpdateThread() { return updateThread; }
|
||||
}
|
||||
22
Java/DarkNetApp/src/de/craftix/netapp/client/Command.java
Normal file
22
Java/DarkNetApp/src/de/craftix/netapp/client/Command.java
Normal file
@@ -0,0 +1,22 @@
|
||||
package de.craftix.netapp.client;
|
||||
|
||||
import de.craftix.netapp.Logger;
|
||||
|
||||
public abstract class Command {
|
||||
|
||||
protected final String name;
|
||||
protected final String[] alias;
|
||||
protected final Logger log;
|
||||
|
||||
public String getName() { return name; }
|
||||
public String[] getAlias() { return alias; }
|
||||
|
||||
public Command(String name, String... alias) {
|
||||
this.name = name;
|
||||
this.alias = alias;
|
||||
this.log = new Logger("Command_" + name);
|
||||
}
|
||||
|
||||
public abstract void onCommand(String cmd, String[] args);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package de.craftix.netapp.client.commands;
|
||||
|
||||
import de.craftix.netapp.client.Client;
|
||||
import de.craftix.netapp.client.Command;
|
||||
import de.craftix.netapp.packets.Packet;
|
||||
import de.craftix.netapp.packets.PacketType;
|
||||
|
||||
public class ConnectCmd extends Command {
|
||||
public ConnectCmd(String name, String... args) { super(name, args); }
|
||||
|
||||
@Override
|
||||
public void onCommand(String cmd, String[] args) {
|
||||
if (args.length < 1) log.warning("Usage: connect [ip]");
|
||||
Client.user = null;
|
||||
Packet answer = Client.sendObjectToServer(new Packet(PacketType.PING), args[0]);
|
||||
if (answer == null) log.error("Server Not Available");
|
||||
else {
|
||||
Client.serverAddress = args[0];
|
||||
log.info("Server successfully set");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package de.craftix.netapp.client.commands;
|
||||
|
||||
import de.craftix.netapp.User;
|
||||
import de.craftix.netapp.client.Client;
|
||||
import de.craftix.netapp.client.Command;
|
||||
import de.craftix.netapp.packets.Packet;
|
||||
import de.craftix.netapp.packets.PacketType;
|
||||
|
||||
public class CreateAdminCmd extends Command {
|
||||
public CreateAdminCmd(String name, String... args) { super(name, args); }
|
||||
|
||||
@Override
|
||||
public void onCommand(String cmd, String[] args) {
|
||||
if (args.length < 3) log.error("Usage: createadmin [username] [password] [adminpassword]");
|
||||
else if (Client.serverAddress != null) {
|
||||
log.info("Sending Register request...");
|
||||
Packet answer = Client.sendObjectToServer(new Packet(PacketType.REGISTER, new User(args[0], args[1], args[2], true)), Client.serverAddress);
|
||||
assert answer != null;
|
||||
if (answer.value) log.info("Account successfully registered");
|
||||
else log.error("Registration failed");
|
||||
}else log.warning("No server set");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package de.craftix.netapp.client.commands;
|
||||
|
||||
import de.craftix.netapp.Chat;
|
||||
import de.craftix.netapp.client.Client;
|
||||
import de.craftix.netapp.client.Command;
|
||||
import de.craftix.netapp.packets.Packet;
|
||||
|
||||
public class CreateChat extends Command {
|
||||
public CreateChat(String name, String... args) { super(name, args); }
|
||||
|
||||
@Override
|
||||
public void onCommand(String cmd, String[] args) {
|
||||
if (Client.user != null && Client.user.admin) {
|
||||
|
||||
if (args.length > 0) {
|
||||
Packet answer = Client.sendObjectToServer(new Packet(new Chat(Client.serverAddress, args[0]), Client.user), Client.serverAddress);
|
||||
assert answer != null;
|
||||
if (answer.value) log.info("Chat created successfully");
|
||||
else log.error("Chat could not be created");
|
||||
}else log.warning("Usage: createchat [name]");
|
||||
|
||||
}else log.warning("You don't have the permission to do that");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package de.craftix.netapp.client.commands;
|
||||
|
||||
import de.craftix.netapp.Chat;
|
||||
import de.craftix.netapp.client.Client;
|
||||
import de.craftix.netapp.client.Command;
|
||||
import de.craftix.netapp.packets.Packet;
|
||||
|
||||
public class JoinChatCmd extends Command {
|
||||
public JoinChatCmd(String name, String... args) { super(name, args); }
|
||||
|
||||
@Override
|
||||
public void onCommand(String cmd, String[] args) {
|
||||
if (Client.serverAddress == null) log.warning("No Server set!");
|
||||
else if (Client.user == null) log.warning("You aren't logged in!");
|
||||
else {
|
||||
if (args.length > 0) {
|
||||
|
||||
Packet answer = Client.sendObjectToServer(new Packet(new Chat(Client.serverAddress, args[0])), Client.serverAddress);
|
||||
assert answer != null;
|
||||
if (answer.value) {
|
||||
Client.currentChat = answer.chat;
|
||||
Client.currentChat.updateChat();
|
||||
Client.getUpdateThread().start();
|
||||
}else log.error("That room doesn't exists");
|
||||
|
||||
}else log.warning("Usage: joinchat [name]");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package de.craftix.netapp.client.commands;
|
||||
|
||||
import de.craftix.netapp.User;
|
||||
import de.craftix.netapp.client.Client;
|
||||
import de.craftix.netapp.client.Command;
|
||||
import de.craftix.netapp.packets.Packet;
|
||||
import de.craftix.netapp.packets.PacketType;
|
||||
|
||||
public class LoginCmd extends Command {
|
||||
public LoginCmd(String name, String... alias) { super(name, alias); }
|
||||
|
||||
@Override
|
||||
public void onCommand(String cmd, String[] args) {
|
||||
if (args.length > 2) log.warning("Usage: login [user] [pass]");
|
||||
else if (Client.serverAddress != null) {
|
||||
log.info("Sending Login request...");
|
||||
Packet answer = Client.sendObjectToServer(new Packet(PacketType.LOGIN, new User(args[0], args[1])), Client.serverAddress);
|
||||
assert answer != null;
|
||||
if (answer.value) {
|
||||
Client.user = answer.user;
|
||||
log.info("Login successfully");
|
||||
}
|
||||
else log.error("Login failed");
|
||||
}else log.warning("No server set");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package de.craftix.netapp.client.commands;
|
||||
|
||||
import de.craftix.netapp.User;
|
||||
import de.craftix.netapp.client.Client;
|
||||
import de.craftix.netapp.client.Command;
|
||||
import de.craftix.netapp.packets.Packet;
|
||||
import de.craftix.netapp.packets.PacketType;
|
||||
|
||||
public class RegisterCmd extends Command {
|
||||
public RegisterCmd(String name, String... args) { super(name, args); }
|
||||
|
||||
@Override
|
||||
public void onCommand(String cmd, String[] args) {
|
||||
if (args.length > 2) log.warning("Usage: register [user] [pass]");
|
||||
else if (Client.serverAddress != null) {
|
||||
log.info("Sending Register request...");
|
||||
Packet answer = Client.sendObjectToServer(new Packet(PacketType.REGISTER, new User(args[0], args[1])), Client.serverAddress);
|
||||
assert answer != null;
|
||||
if (answer.value) log.info("Register successfully, you can login now");
|
||||
else log.error("Register failed");
|
||||
}else log.warning("No server set");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package de.craftix.netapp.client.commands;
|
||||
|
||||
import de.craftix.netapp.client.Client;
|
||||
import de.craftix.netapp.client.Command;
|
||||
import de.craftix.netapp.packets.Packet;
|
||||
import de.craftix.netapp.packets.PacketType;
|
||||
|
||||
public class SendPacketCmd extends Command {
|
||||
public SendPacketCmd(String name, String... args) { super(name, args); }
|
||||
|
||||
@Override
|
||||
public void onCommand(String cmd, String[] args) {
|
||||
if (args.length < 1) { log.warning("You must say, what type of Packet you want to send"); return; }
|
||||
if (Client.serverAddress == null) { log.warning("No Server selected"); return; }
|
||||
|
||||
if (args[0].equalsIgnoreCase("PING")) {
|
||||
log.info("Sending Packet...");
|
||||
Client.sendObjectToServer(new Packet(PacketType.PING), Client.serverAddress);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package de.craftix.netapp.client.commands;
|
||||
|
||||
import de.craftix.netapp.client.Client;
|
||||
import de.craftix.netapp.client.Command;
|
||||
|
||||
public class StopCmd extends Command {
|
||||
public StopCmd(String name, String... args) { super(name, args); }
|
||||
|
||||
@Override
|
||||
public void onCommand(String cmd, String[] args) {
|
||||
log.info("Initialising stop...");
|
||||
Client.stop();
|
||||
}
|
||||
}
|
||||
36
Java/DarkNetApp/src/de/craftix/netapp/packets/Packet.java
Normal file
36
Java/DarkNetApp/src/de/craftix/netapp/packets/Packet.java
Normal file
@@ -0,0 +1,36 @@
|
||||
package de.craftix.netapp.packets;
|
||||
|
||||
import de.craftix.netapp.Chat;
|
||||
import de.craftix.netapp.Message;
|
||||
import de.craftix.netapp.User;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class Packet implements Serializable {
|
||||
|
||||
public PacketType type;
|
||||
public boolean value;
|
||||
|
||||
public Packet() { this.type = PacketType.BOOLEAN; }
|
||||
public Packet(Boolean value) { super(); this.value = value; }
|
||||
public Packet(PacketType type) { this.type = type; }
|
||||
|
||||
//LOGIN - REGISTER
|
||||
public User user;
|
||||
public Packet(PacketType type, User user) {
|
||||
this.type = type;
|
||||
this.user = user;
|
||||
}
|
||||
public Packet(User user, boolean value) { this(value); this.user = user; }
|
||||
|
||||
//CHAT
|
||||
public String chatName;
|
||||
public Chat chat;
|
||||
public Message message;
|
||||
public Packet(Message message, String chatName) { this.message = message; this.chatName = chatName; this.type = PacketType.CHATMESSAGE; }
|
||||
public Packet(Chat chat) { this.chat = chat; type = PacketType.CHATCONNECT; }
|
||||
public Packet(Chat chat, User user) { this.chat = chat; type = PacketType.CHATCREATE; this.user = user; }
|
||||
public Packet(Chat chat, boolean value) { this(value); this.chat = chat; }
|
||||
public Packet(Chat chat, User user, PacketType type) { this.chat = chat; this.user = user; this.type = type; }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package de.craftix.netapp.packets;
|
||||
|
||||
public enum PacketType {
|
||||
|
||||
REGISTER,
|
||||
LOGIN,
|
||||
CHATCONNECT,
|
||||
CHATCREATE,
|
||||
CHATMESSAGE,
|
||||
CHATUPDATE,
|
||||
BOOLEAN,
|
||||
PING;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
package de.craftix.netapp.server;
|
||||
|
||||
import de.craftix.netapp.Chat;
|
||||
import de.craftix.netapp.User;
|
||||
|
||||
import java.io.*;
|
||||
|
||||
public class FileManager {
|
||||
|
||||
private static final String uPrefix = "./users/";
|
||||
private static final String cPrefix = "./chats/";
|
||||
|
||||
public static void setup() {
|
||||
new File(uPrefix).mkdirs();
|
||||
new File(cPrefix).mkdirs();
|
||||
}
|
||||
|
||||
public static boolean userExists(String name) {
|
||||
return new File(uPrefix + name + ".user").exists();
|
||||
}
|
||||
public static User getUser(String name) {
|
||||
return (User) ReadObjectFromFile(uPrefix + name + ".user");
|
||||
}
|
||||
public static void saveUser(User user) {
|
||||
File file = new File(uPrefix + user.getUser() + ".user");
|
||||
if (file.exists()) file.delete();
|
||||
WriteObjectToFile(user, uPrefix + user.getUser() + ".user");
|
||||
}
|
||||
|
||||
public static boolean chatExists(String name) { return new File(cPrefix + name + ".chat").exists(); }
|
||||
public static Chat getChat(String name) { return (Chat) ReadObjectFromFile(cPrefix + name + ".chat"); }
|
||||
public static void saveChat(Chat chat) {
|
||||
File file = new File(cPrefix + chat.getName() + ".chat");
|
||||
if (file.exists()) file.delete();
|
||||
WriteObjectToFile(chat, cPrefix + chat.getName() + ".chat");
|
||||
}
|
||||
|
||||
private static void WriteObjectToFile(Object serObj, String filepath) {
|
||||
|
||||
try {
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream(filepath);
|
||||
ObjectOutputStream objectOut = new ObjectOutputStream(fileOut);
|
||||
objectOut.writeObject(serObj);
|
||||
objectOut.close();
|
||||
//System.out.println("[Arena] The Object was succesfully written to a file");
|
||||
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private static Object ReadObjectFromFile(String filepath) {
|
||||
|
||||
try {
|
||||
|
||||
FileInputStream fileIn = new FileInputStream(filepath);
|
||||
ObjectInputStream objectIn = new ObjectInputStream(fileIn);
|
||||
|
||||
Object obj = objectIn.readObject();
|
||||
|
||||
//System.out.println("[Arena] The Object has been read from the file");
|
||||
objectIn.close();
|
||||
return obj;
|
||||
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
111
Java/DarkNetApp/src/de/craftix/netapp/server/Server.java
Normal file
111
Java/DarkNetApp/src/de/craftix/netapp/server/Server.java
Normal file
@@ -0,0 +1,111 @@
|
||||
package de.craftix.netapp.server;
|
||||
|
||||
import de.craftix.netapp.Chat;
|
||||
import de.craftix.netapp.Logger;
|
||||
import de.craftix.netapp.packets.Packet;
|
||||
import de.craftix.netapp.packets.PacketType;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
|
||||
public class Server implements Runnable {
|
||||
private static Thread serverThread;
|
||||
private static Logger log;
|
||||
private static ServerSocket server;
|
||||
private static final int port = 187;
|
||||
private static final String adminPassword = "Admin";
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
log = new Logger("ServerThread");
|
||||
log.info("Starting Server...");
|
||||
FileManager.setup();
|
||||
server = new ServerSocket(port);
|
||||
serverThread = new Thread(new Server());
|
||||
|
||||
serverThread.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
log.info("Server started");
|
||||
while (!Thread.currentThread().isInterrupted()) {
|
||||
try {
|
||||
Socket client = server.accept();
|
||||
log.info("Client connected [" + client.getRemoteSocketAddress() + "]");
|
||||
ObjectInputStream stream = new ObjectInputStream(new BufferedInputStream(client.getInputStream()));
|
||||
Object data = stream.readObject();
|
||||
Object answer = onConnection(client, data);
|
||||
if (answer != null) {
|
||||
ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(client.getOutputStream()));
|
||||
out.writeObject(answer);
|
||||
out.flush();
|
||||
out.close();
|
||||
}
|
||||
stream.close();
|
||||
client.close();
|
||||
}catch (Exception e) { log.error("Something went wrong while server is running: " + e.getMessage()); }
|
||||
}
|
||||
}
|
||||
|
||||
private static Object onConnection(Socket client, Object data) {
|
||||
if (!(data instanceof Packet)) return null;
|
||||
Packet packet = (Packet) data;
|
||||
|
||||
if (packet.type.equals(PacketType.PING)) return new Packet(PacketType.PING);
|
||||
|
||||
if (packet.type.equals(PacketType.REGISTER)) {
|
||||
assert packet.user != null;
|
||||
if (packet.user.admin) {
|
||||
if (FileManager.userExists(packet.user.getUser())) return new Packet(false);
|
||||
if (!adminPassword.equals(packet.user.getAdmin())) return new Packet(false);
|
||||
FileManager.saveUser(packet.user);
|
||||
return new Packet(true);
|
||||
}else {
|
||||
if (FileManager.userExists(packet.user.getUser())) return new Packet(false);
|
||||
FileManager.saveUser(packet.user);
|
||||
return new Packet(true);
|
||||
}
|
||||
}
|
||||
|
||||
if (packet.type.equals(PacketType.LOGIN)) {
|
||||
assert packet.user != null;
|
||||
if (!FileManager.userExists(packet.user.getUser())) return new Packet(false);
|
||||
if (FileManager.getUser(packet.user.getUser()).getPass().equals(packet.user.getPass())) return new Packet(FileManager.getUser(packet.user.getUser()), true);
|
||||
else return new Packet(false);
|
||||
}
|
||||
|
||||
if (packet.type.equals(PacketType.CHATCONNECT)) {
|
||||
assert packet.chat != null;
|
||||
if (FileManager.chatExists(packet.chat.getName())) return new Packet(FileManager.getChat(packet.chat.getName()), true);
|
||||
else return new Packet(false);
|
||||
}
|
||||
|
||||
if (packet.type.equals(PacketType.CHATCREATE)) {
|
||||
assert packet.chat != null;
|
||||
if (FileManager.chatExists(packet.chat.getName())) return new Packet(false);
|
||||
if (!packet.user.admin) return new Packet(false);
|
||||
FileManager.saveChat(packet.chat);
|
||||
return new Packet(true);
|
||||
}
|
||||
|
||||
if (packet.type.equals(PacketType.CHATUPDATE)) {
|
||||
assert packet.chat != null;
|
||||
return new Packet(FileManager.getChat(packet.chat.getName()), true);
|
||||
}
|
||||
|
||||
if (packet.type.equals(PacketType.CHATMESSAGE)) {
|
||||
assert packet.chat != null;
|
||||
Chat chat = FileManager.getChat(packet.chatName);
|
||||
if (chat == null) return new Packet(false);
|
||||
chat.addMessage(packet.message);
|
||||
FileManager.saveChat(chat);
|
||||
return new Packet(true);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Thread getServerThread() { return serverThread; }
|
||||
public static int getPort() { return port; }
|
||||
}
|
||||
BIN
Java/DarkNetApp/users/leon.user
Normal file
BIN
Java/DarkNetApp/users/leon.user
Normal file
Binary file not shown.
Reference in New Issue
Block a user