diff --git a/ChatApp/.gitignore b/ChatApp/.gitignore new file mode 100644 index 0000000..8e0825e --- /dev/null +++ b/ChatApp/.gitignore @@ -0,0 +1,3 @@ +.vscode +bin +lib \ No newline at end of file diff --git a/ChatApp/README.md b/ChatApp/README.md new file mode 100644 index 0000000..7c03a53 --- /dev/null +++ b/ChatApp/README.md @@ -0,0 +1,18 @@ +## Getting Started + +Welcome to the VS Code Java world. Here is a guideline to help you get started to write Java code in Visual Studio Code. + +## Folder Structure + +The workspace contains two folders by default, where: + +- `src`: the folder to maintain sources +- `lib`: the folder to maintain dependencies + +Meanwhile, the compiled output files will be generated in the `bin` folder by default. + +> If you want to customize the folder structure, open `.vscode/settings.json` and update the related settings there. + +## Dependency Management + +The `JAVA PROJECTS` view allows you to manage your dependencies. More details can be found [here](https://github.com/microsoft/vscode-java-dependency#manage-dependencies). diff --git a/ChatApp/src/App.java b/ChatApp/src/App.java new file mode 100644 index 0000000..0a839f9 --- /dev/null +++ b/ChatApp/src/App.java @@ -0,0 +1,5 @@ +public class App { + public static void main(String[] args) throws Exception { + System.out.println("Hello, World!"); + } +} diff --git a/ChatApp/src/network/protocol/Packet.java b/ChatApp/src/network/protocol/Packet.java new file mode 100644 index 0000000..dc1d7f2 --- /dev/null +++ b/ChatApp/src/network/protocol/Packet.java @@ -0,0 +1,9 @@ +package network.protocol; + +import java.io.Serializable; + +public abstract class Packet implements Serializable { + + public abstract void accept(PacketVisitor packetVisitor); + +} diff --git a/ChatApp/src/network/protocol/PacketVisitor.java b/ChatApp/src/network/protocol/PacketVisitor.java new file mode 100644 index 0000000..d073f6a --- /dev/null +++ b/ChatApp/src/network/protocol/PacketVisitor.java @@ -0,0 +1,29 @@ +package network.protocol; + +import network.protocol.packets.ChatMessagePacket; +import network.protocol.packets.CreateRoomPacket; +import network.protocol.packets.JoinRoomPacket; +import network.protocol.packets.LeaveRoomPacket; +import network.protocol.packets.LoginPacket; +import network.protocol.packets.RequestRoomListPacket; +import network.protocol.packets.RoomListPacket; +import network.protocol.packets.SendChatMessagePacket; +import network.protocol.packets.ServerResponsePacket; + +public interface PacketVisitor { + + default void visit(Packet packet) { + packet.accept(this); + } + + void visitPacket(ChatMessagePacket packet); + void visitPacket(CreateRoomPacket packet); + void visitPacket(JoinRoomPacket packet); + void visitPacket(LeaveRoomPacket packet); + void visitPacket(LoginPacket packet); + void visitPacket(RequestRoomListPacket packet); + void visitPacket(RoomListPacket packet); + void visitPacket(SendChatMessagePacket packet); + void visitPacket(ServerResponsePacket packet); + +} diff --git a/ChatApp/src/network/protocol/Packets.java b/ChatApp/src/network/protocol/Packets.java new file mode 100644 index 0000000..8a1effb --- /dev/null +++ b/ChatApp/src/network/protocol/Packets.java @@ -0,0 +1,15 @@ +package network.protocol; + +public enum Packets { + + ChatMessage, + CreateRoom, + JoinRoom, + LeaveRoom, + Login, + RequestRoom, + Response, + RoomList, + SendChatMessage, + +} \ No newline at end of file diff --git a/ChatApp/src/network/protocol/packets/ChatMessagePacket.java b/ChatApp/src/network/protocol/packets/ChatMessagePacket.java new file mode 100644 index 0000000..ee79aeb --- /dev/null +++ b/ChatApp/src/network/protocol/packets/ChatMessagePacket.java @@ -0,0 +1,40 @@ +package network.protocol.packets; + +import java.time.Instant; + +import network.protocol.Packet; +import network.protocol.PacketVisitor; +import network.protocol.Packets; + +public class ChatMessagePacket extends Packet { + + static private final long serialVersionUID = Packets.Login.ordinal(); + + private final Instant time; + private final String chatter; + private final String content; + + public ChatMessagePacket(Instant time, String chatter, String content) { + this.time = time; + this.chatter = chatter; + this.content = content; + } + + public Instant getTime() { + return time; + } + + public String getChatter() { + return chatter; + } + + public String getContent() { + return content; + } + + @Override + public void accept(PacketVisitor packetVisitor) { + packetVisitor.visitPacket(this); + } + +} diff --git a/ChatApp/src/network/protocol/packets/CreateRoomPacket.java b/ChatApp/src/network/protocol/packets/CreateRoomPacket.java new file mode 100644 index 0000000..046a7b5 --- /dev/null +++ b/ChatApp/src/network/protocol/packets/CreateRoomPacket.java @@ -0,0 +1,26 @@ +package network.protocol.packets; + +import network.protocol.Packet; +import network.protocol.PacketVisitor; +import network.protocol.Packets; + +public class CreateRoomPacket extends Packet { + + static private final long serialVersionUID = Packets.Login.ordinal(); + + private final String roomName; + + public CreateRoomPacket(String roomName) { + this.roomName = roomName; + } + + public String getRoomName() { + return roomName; + } + + @Override + public void accept(PacketVisitor packetVisitor) { + packetVisitor.visitPacket(this); + } + +} diff --git a/ChatApp/src/network/protocol/packets/JoinRoomPacket.java b/ChatApp/src/network/protocol/packets/JoinRoomPacket.java new file mode 100644 index 0000000..a3b3173 --- /dev/null +++ b/ChatApp/src/network/protocol/packets/JoinRoomPacket.java @@ -0,0 +1,26 @@ +package network.protocol.packets; + +import network.protocol.Packet; +import network.protocol.PacketVisitor; +import network.protocol.Packets; + +public class JoinRoomPacket extends Packet { + + static private final long serialVersionUID = Packets.Login.ordinal(); + + private final String roomName; + + public JoinRoomPacket(String roomName) { + this.roomName = roomName; + } + + public String getRoomName() { + return roomName; + } + + @Override + public void accept(PacketVisitor packetVisitor) { + packetVisitor.visitPacket(this); + } + +} diff --git a/ChatApp/src/network/protocol/packets/LeaveRoomPacket.java b/ChatApp/src/network/protocol/packets/LeaveRoomPacket.java new file mode 100644 index 0000000..2200dc8 --- /dev/null +++ b/ChatApp/src/network/protocol/packets/LeaveRoomPacket.java @@ -0,0 +1,19 @@ +package network.protocol.packets; + +import network.protocol.Packet; +import network.protocol.PacketVisitor; +import network.protocol.Packets; + +public class LeaveRoomPacket extends Packet { + + static private final long serialVersionUID = Packets.Login.ordinal(); + + public LeaveRoomPacket() { + } + + @Override + public void accept(PacketVisitor packetVisitor) { + packetVisitor.visitPacket(this); + } + +} diff --git a/ChatApp/src/network/protocol/packets/LoginPacket.java b/ChatApp/src/network/protocol/packets/LoginPacket.java new file mode 100644 index 0000000..237dd3f --- /dev/null +++ b/ChatApp/src/network/protocol/packets/LoginPacket.java @@ -0,0 +1,26 @@ +package network.protocol.packets; + +import network.protocol.Packet; +import network.protocol.PacketVisitor; +import network.protocol.Packets; + +public class LoginPacket extends Packet { + + static private final long serialVersionUID = Packets.Login.ordinal(); + + private final String pseudo; + + public LoginPacket(String pseudo) { + this.pseudo = pseudo; + } + + public String getPseudo() { + return pseudo; + } + + @Override + public void accept(PacketVisitor packetVisitor) { + packetVisitor.visitPacket(this); + } + +} diff --git a/ChatApp/src/network/protocol/packets/RequestRoomListPacket.java b/ChatApp/src/network/protocol/packets/RequestRoomListPacket.java new file mode 100644 index 0000000..da267ba --- /dev/null +++ b/ChatApp/src/network/protocol/packets/RequestRoomListPacket.java @@ -0,0 +1,20 @@ +package network.protocol.packets; + +import network.protocol.Packet; +import network.protocol.PacketVisitor; +import network.protocol.Packets; + +public class RequestRoomListPacket extends Packet { + + static private final long serialVersionUID = Packets.Login.ordinal(); + + + public RequestRoomListPacket() { + } + + @Override + public void accept(PacketVisitor packetVisitor) { + packetVisitor.visitPacket(this); + } + +} diff --git a/ChatApp/src/network/protocol/packets/RoomListPacket.java b/ChatApp/src/network/protocol/packets/RoomListPacket.java new file mode 100644 index 0000000..1ee7008 --- /dev/null +++ b/ChatApp/src/network/protocol/packets/RoomListPacket.java @@ -0,0 +1,28 @@ +package network.protocol.packets; + +import java.util.ArrayList; + +import network.protocol.Packet; +import network.protocol.PacketVisitor; +import network.protocol.Packets; + +public class RoomListPacket extends Packet { + + static private final long serialVersionUID = Packets.Login.ordinal(); + + private final ArrayList roomNames; + + public RoomListPacket(ArrayList roomNames) { + this.roomNames = roomNames; + } + + public ArrayList getRoomNames() { + return roomNames; + } + + @Override + public void accept(PacketVisitor packetVisitor) { + packetVisitor.visitPacket(this); + } + +} diff --git a/ChatApp/src/network/protocol/packets/SendChatMessagePacket.java b/ChatApp/src/network/protocol/packets/SendChatMessagePacket.java new file mode 100644 index 0000000..52a6b0b --- /dev/null +++ b/ChatApp/src/network/protocol/packets/SendChatMessagePacket.java @@ -0,0 +1,26 @@ +package network.protocol.packets; + +import network.protocol.Packet; +import network.protocol.PacketVisitor; +import network.protocol.Packets; + +public class SendChatMessagePacket extends Packet { + + static private final long serialVersionUID = Packets.Login.ordinal(); + + private final String content; + + public SendChatMessagePacket(String content) { + this.content = content; + } + + public String getContent() { + return content; + } + + @Override + public void accept(PacketVisitor packetVisitor) { + packetVisitor.visitPacket(this); + } + +} diff --git a/ChatApp/src/network/protocol/packets/ServerResponsePacket.java b/ChatApp/src/network/protocol/packets/ServerResponsePacket.java new file mode 100644 index 0000000..e45f73d --- /dev/null +++ b/ChatApp/src/network/protocol/packets/ServerResponsePacket.java @@ -0,0 +1,30 @@ +package network.protocol.packets; + +import network.protocol.Packet; +import network.protocol.PacketVisitor; +import network.protocol.Packets; + +public class ServerResponsePacket extends Packet { + + static private final long serialVersionUID = Packets.Login.ordinal(); + + public static enum Response { + AuthSuccess, AuthError, RoomCreated, RoomNotCreated, RoomJoined, RoomNotJoined, NotInRoom; + }; + + private final Response response; + + public ServerResponsePacket(Response response) { + this.response = response; + } + + public Response getResponse() { + return response; + } + + @Override + public void accept(PacketVisitor packetVisitor) { + packetVisitor.visitPacket(this); + } + +}