add packet structure

This commit is contained in:
2025-02-27 12:14:07 +01:00
parent 24dddfa3f7
commit 2917535e05
15 changed files with 320 additions and 0 deletions

3
ChatApp/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
.vscode
bin
lib

18
ChatApp/README.md Normal file
View File

@@ -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).

5
ChatApp/src/App.java Normal file
View File

@@ -0,0 +1,5 @@
public class App {
public static void main(String[] args) throws Exception {
System.out.println("Hello, World!");
}
}

View File

@@ -0,0 +1,9 @@
package network.protocol;
import java.io.Serializable;
public abstract class Packet implements Serializable {
public abstract void accept(PacketVisitor packetVisitor);
}

View File

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

View File

@@ -0,0 +1,15 @@
package network.protocol;
public enum Packets {
ChatMessage,
CreateRoom,
JoinRoom,
LeaveRoom,
Login,
RequestRoom,
Response,
RoomList,
SendChatMessage,
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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<String> roomNames;
public RoomListPacket(ArrayList<String> roomNames) {
this.roomNames = roomNames;
}
public ArrayList<String> getRoomNames() {
return roomNames;
}
@Override
public void accept(PacketVisitor packetVisitor) {
packetVisitor.visitPacket(this);
}
}

View File

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

View File

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