Archived
Private
Public Access
1
0

Initial commit

This commit is contained in:
2022-09-04 12:45:01 +02:00
commit f4a01d6a69
11601 changed files with 4206660 additions and 0 deletions

3
Java/DarkNetApp/.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

View 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>

View 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>

View 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
View 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
View 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
View 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>

View 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>

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: de.craftix.netapp.client.Client

View File

@@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: de.craftix.netapp.server.Server

View 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); }
}

View 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); }
}

View 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; }
}

View 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(" ");
}
}

View 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); }
}

View 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; }
}

View 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);
}

View File

@@ -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");
}
}
}

View File

@@ -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");
}
}

View File

@@ -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");
}
}

View File

@@ -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]");
}
}
}

View File

@@ -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");
}
}

View File

@@ -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");
}
}

View File

@@ -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);
}
}
}

View File

@@ -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();
}
}

View 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; }
}

View File

@@ -0,0 +1,14 @@
package de.craftix.netapp.packets;
public enum PacketType {
REGISTER,
LOGIN,
CHATCONNECT,
CHATCREATE,
CHATMESSAGE,
CHATUPDATE,
BOOLEAN,
PING;
}

View File

@@ -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;
}
}
}

View 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; }
}

Binary file not shown.