115 lines
3.0 KiB
Java
115 lines
3.0 KiB
Java
package client;
|
|
|
|
import java.io.IOException;
|
|
import java.net.InetSocketAddress;
|
|
|
|
import network.PacketHandler;
|
|
import network.Socket;
|
|
import network.protocol.Packet;
|
|
import network.protocol.PacketVisitor;
|
|
import network.protocol.packets.*;
|
|
import network.protocol.packets.ServerResponsePacket.Response;
|
|
|
|
public class ClientConnexion implements PacketVisitor, PacketHandler {
|
|
|
|
private final InetSocketAddress serverAddress;
|
|
private final Socket socket;
|
|
private final ClientListener callback;
|
|
|
|
public ClientConnexion(Socket socket, InetSocketAddress serverAddress, ClientListener callback) {
|
|
this.serverAddress = serverAddress;
|
|
this.socket = socket;
|
|
this.callback = callback;
|
|
this.socket.onClose.connect(this::onSocketClose);
|
|
this.socket.addHandler(this);
|
|
}
|
|
|
|
private void onSocketClose() {
|
|
this.callback.handleConnexionError();
|
|
}
|
|
|
|
public void close() {
|
|
this.socket.close();
|
|
}
|
|
|
|
public void sendPacket(Packet packet) {
|
|
try {
|
|
this.socket.sendPacket(packet, serverAddress);
|
|
} catch (IOException e) {
|
|
this.close();
|
|
this.callback.handleConnexionError();
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void handlePacket(Packet packet, InetSocketAddress address) {
|
|
// we assume that the packet comes from the server
|
|
visit(packet);
|
|
}
|
|
|
|
@Override
|
|
public void visitPacket(ChatMessagePacket packet) {
|
|
this.callback.handleChatMessage(packet.getTime(), packet.getChatter(), packet.getContent());
|
|
}
|
|
|
|
@Override
|
|
public void visitPacket(RoomListPacket packet) {
|
|
this.callback.handleRoomList(packet.getRoomNames());
|
|
}
|
|
|
|
@Override
|
|
public void visitPacket(ServerResponsePacket packet) {
|
|
this.callback.handleServerResponse(packet.getResponse());
|
|
if (packet.getResponse() == Response.AuthSuccess)
|
|
this.callback.handleConnect();
|
|
}
|
|
|
|
@Override
|
|
public void visitPacket(RequestActualRoomPacket packet) {
|
|
throw new UnsupportedOperationException("Unimplemented method 'visitPacket'");
|
|
}
|
|
|
|
@Override
|
|
public void visitPacket(ActualRoomPacket packet) {
|
|
this.callback.handleActualRoom(packet.getRoomName());
|
|
}
|
|
|
|
@Override
|
|
public void visitPacket(DisconnectPacket packet) {
|
|
this.close();
|
|
this.callback.handleDisconnect();
|
|
}
|
|
|
|
@Override
|
|
public void visitPacket(CreateRoomPacket packet) {
|
|
throw new UnsupportedOperationException("Unimplemented method 'visitPacket'");
|
|
}
|
|
|
|
@Override
|
|
public void visitPacket(JoinRoomPacket packet) {
|
|
throw new UnsupportedOperationException("Unimplemented method 'visitPacket'");
|
|
}
|
|
|
|
@Override
|
|
public void visitPacket(LeaveRoomPacket packet) {
|
|
throw new UnsupportedOperationException("Unimplemented method 'visitPacket'");
|
|
}
|
|
|
|
@Override
|
|
public void visitPacket(LoginPacket packet) {
|
|
throw new UnsupportedOperationException("Unimplemented method 'visitPacket'");
|
|
}
|
|
|
|
@Override
|
|
public void visitPacket(RequestRoomListPacket packet) {
|
|
throw new UnsupportedOperationException("Unimplemented method 'visitPacket'");
|
|
}
|
|
|
|
@Override
|
|
public void visitPacket(SendChatMessagePacket packet) {
|
|
throw new UnsupportedOperationException("Unimplemented method 'visitPacket'");
|
|
}
|
|
|
|
}
|