mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
Network protocol rewrite:
* packets don't depend on serialization any longer (and they shouldn't since they are simple DTOs) * support for multiple serialization types - add custom protocols when needed * web client serialization protocol uses gSon
This commit is contained in:
@@ -4,7 +4,7 @@ import org.apache.commons.lang.NotImplementedException;
|
||||
|
||||
import forge.game.GameState;
|
||||
import forge.net.client.INetClient;
|
||||
import forge.net.protocol.outcoming.ChatMessage;
|
||||
import forge.net.protocol.toclient.ChatPacketClt;
|
||||
|
||||
public class LobbyPlayerRemote extends LobbyPlayer {
|
||||
|
||||
@@ -31,6 +31,6 @@ public class LobbyPlayerRemote extends LobbyPlayer {
|
||||
|
||||
@Override
|
||||
public void hear(LobbyPlayer player, String message) {
|
||||
connection.send(new ChatMessage(player.getName(), message));
|
||||
connection.send(new ChatPacketClt(player.getName(), message));
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@ package forge.net.client;
|
||||
|
||||
import forge.game.player.LobbyPlayer;
|
||||
import forge.net.client.state.IClientState;
|
||||
import forge.net.protocol.outcoming.IMessage;
|
||||
import forge.net.protocol.toclient.IPacketClt;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
@@ -14,7 +14,7 @@ public interface INetClient {
|
||||
* TODO: Write javadoc for this method.
|
||||
* @param echoMessage
|
||||
*/
|
||||
void send(IMessage message);
|
||||
void send(IPacketClt message);
|
||||
|
||||
|
||||
void createPlayer(String playerName);
|
||||
|
||||
@@ -10,20 +10,24 @@ import forge.net.IConnectionObserver;
|
||||
import forge.net.client.state.ConnectedClientState;
|
||||
import forge.net.client.state.UnauthorizedClientState;
|
||||
import forge.net.client.state.IClientState;
|
||||
import forge.net.protocol.incoming.IPacket;
|
||||
import forge.net.protocol.incoming.PacketOpcode;
|
||||
import forge.net.protocol.outcoming.IMessage;
|
||||
import forge.net.protocol.ClientProtocol;
|
||||
import forge.net.protocol.ClientProtocolJson;
|
||||
import forge.net.protocol.toclient.IPacketClt;
|
||||
import forge.net.protocol.toserver.IPacketSrv;
|
||||
|
||||
public class NetClient implements IConnectionObserver, INetClient{
|
||||
|
||||
private final IClientSocket socket;
|
||||
private BlockingDeque<IClientState> state = new LinkedBlockingDeque<IClientState>();
|
||||
private final BlockingDeque<IClientState> state = new LinkedBlockingDeque<IClientState>();
|
||||
private LobbyPlayer player = null;
|
||||
private final ClientProtocol<IPacketSrv, IPacketClt> protocol;
|
||||
|
||||
|
||||
public NetClient(IClientSocket clientSocket) {
|
||||
socket = clientSocket;
|
||||
state.push(new ConnectedClientState(this));
|
||||
state.push(new UnauthorizedClientState(this));
|
||||
protocol = new ClientProtocolJson();
|
||||
}
|
||||
|
||||
public void autorized() {
|
||||
@@ -48,7 +52,7 @@ public class NetClient implements IConnectionObserver, INetClient{
|
||||
/** Receives input from network client */
|
||||
@Override
|
||||
public void onMessage(String data) {
|
||||
IPacket p = PacketOpcode.decode(data);
|
||||
IPacketSrv p = protocol.decodePacket(data);
|
||||
for(IClientState s : state) {
|
||||
if ( s.processPacket(p) )
|
||||
break;
|
||||
@@ -57,8 +61,9 @@ public class NetClient implements IConnectionObserver, INetClient{
|
||||
|
||||
|
||||
@Override
|
||||
public void send(IMessage message) {
|
||||
socket.send(message.toNetString());
|
||||
public void send(IPacketClt message) {
|
||||
String rawData = protocol.encodePacket(message);
|
||||
socket.send(rawData);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package forge.net.client.state;
|
||||
|
||||
import forge.net.client.INetClient;
|
||||
import forge.net.protocol.incoming.EchoPacket;
|
||||
import forge.net.protocol.incoming.IncorrectPacket;
|
||||
import forge.net.protocol.incoming.IPacket;
|
||||
import forge.net.protocol.outcoming.EchoMessage;
|
||||
import forge.net.protocol.outcoming.IncorrectPacketMessage;
|
||||
import forge.net.protocol.outcoming.UnknownPacketMessage;
|
||||
import forge.net.protocol.toclient.EchoPacketClt;
|
||||
import forge.net.protocol.toclient.ErrorIncorrectPacketClt;
|
||||
import forge.net.protocol.toclient.ErrorUnknownPacketClt;
|
||||
import forge.net.protocol.toserver.EchoPacketSrv;
|
||||
import forge.net.protocol.toserver.IPacketSrv;
|
||||
import forge.net.protocol.toserver.IncorrectPacketSrv;
|
||||
|
||||
|
||||
|
||||
@@ -19,22 +19,20 @@ public class ConnectedClientState implements IClientState {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean processPacket(IPacket packet ) {
|
||||
switch( packet.getOpCode() ) {
|
||||
case Echo:
|
||||
EchoPacket pe = (EchoPacket)packet;
|
||||
client.send(new EchoMessage(pe.getMessage()));
|
||||
return true;
|
||||
|
||||
case Incorrect:
|
||||
IncorrectPacket pi = (IncorrectPacket)packet;
|
||||
client.send(new IncorrectPacketMessage(pi));
|
||||
return true;
|
||||
|
||||
default:
|
||||
client.send(new UnknownPacketMessage());
|
||||
return true;
|
||||
public boolean processPacket(IPacketSrv packet ) {
|
||||
if( packet instanceof EchoPacketSrv) {
|
||||
EchoPacketSrv pe = (EchoPacketSrv)packet;
|
||||
client.send(new EchoPacketClt(pe.getMessage()));
|
||||
return true;
|
||||
}
|
||||
if( packet instanceof IncorrectPacketSrv) {
|
||||
IncorrectPacketSrv pi = (IncorrectPacketSrv)packet;
|
||||
client.send(new ErrorIncorrectPacketClt(pi.getMessage()));
|
||||
return true;
|
||||
}
|
||||
|
||||
client.send(new ErrorUnknownPacketClt());
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package forge.net.client.state;
|
||||
|
||||
import forge.net.protocol.incoming.IPacket;
|
||||
import forge.net.protocol.toserver.IPacketSrv;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public interface IClientState {
|
||||
boolean processPacket(IPacket data);
|
||||
boolean processPacket(IPacketSrv data);
|
||||
}
|
||||
|
||||
@@ -3,9 +3,8 @@ package forge.net.client.state;
|
||||
import forge.Singletons;
|
||||
import forge.control.ChatArea;
|
||||
import forge.net.client.INetClient;
|
||||
import forge.net.protocol.incoming.ChatPacket;
|
||||
import forge.net.protocol.incoming.IPacket;
|
||||
import forge.net.protocol.incoming.PacketOpcode;
|
||||
import forge.net.protocol.toserver.ChatPacketSrv;
|
||||
import forge.net.protocol.toserver.IPacketSrv;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
@@ -19,10 +18,9 @@ public class InLobbyClientState implements IClientState {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean processPacket(IPacket data) {
|
||||
if( data.getOpCode() == PacketOpcode.Chat)
|
||||
{
|
||||
ChatPacket cp = (ChatPacket) data;
|
||||
public boolean processPacket(IPacketSrv data) {
|
||||
if( data instanceof ChatPacketSrv) {
|
||||
ChatPacketSrv cp = (ChatPacketSrv) data;
|
||||
// if ( not muted )
|
||||
Singletons.getControl().getLobby().speak(ChatArea.Room, client.getPlayer(), cp.getMessage());
|
||||
// else
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
package forge.net.client.state;
|
||||
|
||||
import forge.net.client.INetClient;
|
||||
import forge.net.protocol.incoming.AuthorizePacket;
|
||||
import forge.net.protocol.incoming.IPacket;
|
||||
import forge.net.protocol.incoming.PacketOpcode;
|
||||
import forge.net.protocol.outcoming.AuthorizationSuccessfulMessage;
|
||||
import forge.net.protocol.toclient.AuthResultPacketClt;
|
||||
import forge.net.protocol.toserver.AuthorizePacketSrv;
|
||||
import forge.net.protocol.toserver.IPacketSrv;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
@@ -23,11 +22,11 @@ public class UnauthorizedClientState implements IClientState {
|
||||
|
||||
|
||||
@Override
|
||||
public boolean processPacket(IPacket packet) {
|
||||
if( packet.getOpCode() == PacketOpcode.Authorize ) {
|
||||
AuthorizePacket p = (AuthorizePacket)packet;
|
||||
public boolean processPacket(IPacketSrv packet) {
|
||||
if( packet instanceof AuthorizePacketSrv ) {
|
||||
AuthorizePacketSrv p = (AuthorizePacketSrv)packet;
|
||||
if( true ) { // check credentials here!
|
||||
client.send(new AuthorizationSuccessfulMessage(p.getUsername()));
|
||||
client.send(new AuthResultPacketClt(p.getUsername(), true));
|
||||
|
||||
|
||||
client.createPlayer(p.getUsername());
|
||||
|
||||
9
src/main/java/forge/net/protocol/ClientProtocol.java
Normal file
9
src/main/java/forge/net/protocol/ClientProtocol.java
Normal file
@@ -0,0 +1,9 @@
|
||||
package forge.net.protocol;
|
||||
|
||||
|
||||
/** The protocol is in charge of serialization of internal classes into whatever remote client understands.
|
||||
* Descendants may use different techniques to serialize data, be it Gson, ProtoBuf or common Java serialization */
|
||||
public interface ClientProtocol<TIncoming, TOutComing> {
|
||||
TIncoming decodePacket(String data);
|
||||
String encodePacket(TOutComing packet);
|
||||
}
|
||||
82
src/main/java/forge/net/protocol/ClientProtocolJson.java
Normal file
82
src/main/java/forge/net/protocol/ClientProtocolJson.java
Normal file
@@ -0,0 +1,82 @@
|
||||
package forge.net.protocol;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonParseException;
|
||||
import com.google.gson.JsonSyntaxException;
|
||||
|
||||
import forge.net.protocol.toclient.AuthResultPacketClt;
|
||||
import forge.net.protocol.toclient.ChatPacketClt;
|
||||
import forge.net.protocol.toclient.EchoPacketClt;
|
||||
import forge.net.protocol.toclient.ErrorIncorrectPacketClt;
|
||||
import forge.net.protocol.toclient.ErrorUnknownPacketClt;
|
||||
import forge.net.protocol.toclient.IPacketClt;
|
||||
import forge.net.protocol.toserver.AuthorizePacketSrv;
|
||||
import forge.net.protocol.toserver.ChatPacketSrv;
|
||||
import forge.net.protocol.toserver.EchoPacketSrv;
|
||||
import forge.net.protocol.toserver.IPacketSrv;
|
||||
import forge.net.protocol.toserver.IncorrectPacketSrv;
|
||||
import forge.net.protocol.toserver.UnknownPacketSrv;
|
||||
import forge.util.TextUtil;
|
||||
|
||||
/**
|
||||
* The expected incoming message format is: /{opcode} {json-object}, where opcode is a string among keys of headerToClassInbound
|
||||
* If string starts with a non-slash character, the whole line is considered a chat packet
|
||||
*
|
||||
*/
|
||||
public class ClientProtocolJson implements ClientProtocol<IPacketSrv, IPacketClt> {
|
||||
private final static Map<String, Class<? extends IPacketSrv>> headerToClassInbound = new HashMap<String, Class<? extends IPacketSrv>>();
|
||||
private final static Map<Class<? extends IPacketClt>, String> classToHeaderOutbound = new HashMap<Class<? extends IPacketClt>, String>();
|
||||
|
||||
// Static ctor to fill maps
|
||||
static {
|
||||
// The what remote part sends us
|
||||
headerToClassInbound.put("echo", EchoPacketSrv.class);
|
||||
headerToClassInbound.put("s", ChatPacketSrv.class);
|
||||
headerToClassInbound.put("auth", AuthorizePacketSrv.class);
|
||||
|
||||
// The what we reply there
|
||||
classToHeaderOutbound.put(AuthResultPacketClt.class, "auth");
|
||||
classToHeaderOutbound.put(ChatPacketClt.class, "s");
|
||||
classToHeaderOutbound.put(EchoPacketClt.class, "echo");
|
||||
classToHeaderOutbound.put(ErrorIncorrectPacketClt.class, "err:packet_args");
|
||||
classToHeaderOutbound.put(ErrorUnknownPacketClt.class, "err:packet");
|
||||
}
|
||||
|
||||
private final Gson gson = new Gson(); // looks like a single instance per class is enough
|
||||
|
||||
@Override
|
||||
public IPacketSrv decodePacket(String data) {
|
||||
if ( '/' != data.charAt(0) )
|
||||
return new ChatPacketSrv(data);
|
||||
|
||||
data = data.substring(1);
|
||||
String[] parts = TextUtil.split(data, ' ', 2);
|
||||
|
||||
Class<? extends IPacketSrv> packetClass = headerToClassInbound.get(parts[0]);
|
||||
if( null == packetClass )
|
||||
return new IncorrectPacketSrv("Unknown header: " + parts[0]);
|
||||
|
||||
String args = parts.length > 1 ? parts[1] : null;
|
||||
if ( StringUtils.isBlank(args) )
|
||||
args = "{}"; // assume default empty object
|
||||
|
||||
try {
|
||||
return gson.fromJson(parts[1].trim(), packetClass);
|
||||
} catch( JsonParseException ex ) {
|
||||
return new IncorrectPacketSrv("Invalid json: " + args);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String encodePacket(IPacketClt packet) {
|
||||
Class<? extends IPacketClt> packetClass = packet.getClass();
|
||||
String prefix = classToHeaderOutbound.get(packetClass);
|
||||
return String.format("%s %s", prefix != null ? prefix : "/!unserialized!: " + packetClass.getName(), gson.toJson(packet));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
package forge.net.protocol.incoming;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.util.TextUtil;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class AuthorizePacket implements IPacket {
|
||||
private final String username;
|
||||
private final String password;
|
||||
|
||||
private AuthorizePacket(String name, String pass) {
|
||||
username = name;
|
||||
password = pass;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
|
||||
public static IPacket parse(String data) {
|
||||
String[] parts = TextUtil.splitWithParenthesis(data, ' ', '\"', '\"');
|
||||
if(parts.length == 1 || parts.length == 2) {
|
||||
if(!StringUtils.isAlphanumericSpace(parts[0]))
|
||||
return new IncorrectPacket(PacketOpcode.Authorize, 0, parts[0]);
|
||||
if( parts.length == 1)
|
||||
return new AuthorizePacket(parts[0], null);
|
||||
|
||||
if(!StringUtils.isAsciiPrintable(parts[1]))
|
||||
return new IncorrectPacket(PacketOpcode.Authorize, 1, parts[1]);
|
||||
else
|
||||
return new AuthorizePacket(parts[0], parts[1]);
|
||||
}
|
||||
return UnknownPacket.parse(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PacketOpcode getOpCode() {
|
||||
return PacketOpcode.Authorize;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
package forge.net.protocol.incoming;
|
||||
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class ChatPacket implements IPacket {
|
||||
private final String message;
|
||||
public ChatPacket(String data) {
|
||||
message = data;
|
||||
}
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PacketOpcode getOpCode() {
|
||||
return PacketOpcode.Chat;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
package forge.net.protocol.incoming;
|
||||
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class EchoPacket implements IPacket {
|
||||
|
||||
private final String message;
|
||||
private EchoPacket(String data) {
|
||||
message = data;
|
||||
}
|
||||
|
||||
public static EchoPacket parse(String data) {
|
||||
return new EchoPacket(data);
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PacketOpcode getOpCode() {
|
||||
return PacketOpcode.Echo;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
package forge.net.protocol.incoming;
|
||||
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public interface IPacket {
|
||||
PacketOpcode getOpCode();
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
package forge.net.protocol.incoming;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class IncorrectPacket implements IPacket {
|
||||
|
||||
private final PacketOpcode intendedCode;
|
||||
private final int index;
|
||||
private final String sParam;
|
||||
|
||||
public IncorrectPacket(PacketOpcode code, int iParameter, String value) {
|
||||
intendedCode = code;
|
||||
index = iParameter;
|
||||
sParam = value;
|
||||
}
|
||||
|
||||
public String getString() {
|
||||
return sParam;
|
||||
}
|
||||
|
||||
public int getIndex() {
|
||||
return index;
|
||||
}
|
||||
|
||||
public PacketOpcode getIntendedCode() {
|
||||
return intendedCode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PacketOpcode getOpCode() {
|
||||
return PacketOpcode.Incorrect;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
package forge.net.protocol.incoming;
|
||||
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public enum PacketOpcode {
|
||||
Echo("/echo"),
|
||||
Chat("/s"),
|
||||
Authorize("/auth"),
|
||||
|
||||
Incorrect(null),
|
||||
Unknown(null);
|
||||
|
||||
|
||||
|
||||
private final String opcode;
|
||||
|
||||
private PacketOpcode(String code) {
|
||||
opcode = code;
|
||||
}
|
||||
|
||||
public final String getOpcode() {
|
||||
return opcode;
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this method.
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
public static IPacket decode(String data) {
|
||||
for(PacketOpcode s : PacketOpcode.values()) {
|
||||
if ( s.opcode != null && data.startsWith(s.opcode) )
|
||||
return decodePacket(s, data.substring(s.opcode.length()).trim());
|
||||
}
|
||||
if( data.startsWith("/") )
|
||||
return UnknownPacket.parse(data.substring(1));
|
||||
else
|
||||
return new ChatPacket(data);
|
||||
}
|
||||
|
||||
|
||||
private static IPacket decodePacket(PacketOpcode code, String data) {
|
||||
switch(code) {
|
||||
case Echo: return EchoPacket.parse(data);
|
||||
case Authorize: return AuthorizePacket.parse(data);
|
||||
|
||||
default: return UnknownPacket.parse(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
package forge.net.protocol.incoming;
|
||||
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class UnknownPacket implements IPacket {
|
||||
|
||||
private final String message;
|
||||
private UnknownPacket(String data) {
|
||||
message = data;
|
||||
}
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
/**
|
||||
* TODO: Write javadoc for this method.
|
||||
* @param substring
|
||||
* @return
|
||||
*/
|
||||
public static IPacket parse(String substring) {
|
||||
return new UnknownPacket(substring);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PacketOpcode getOpCode() {
|
||||
return PacketOpcode.Unknown;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
package forge.net.protocol.outcoming;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class AuthorizationSuccessfulMessage implements IMessage {
|
||||
|
||||
private final String username;
|
||||
|
||||
public AuthorizationSuccessfulMessage(String user) {
|
||||
username = user;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toNetString() {
|
||||
// TODO Auto-generated method stub
|
||||
return "Authorization Successful. Welcome, " + username;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
package forge.net.protocol.outcoming;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class ChatMessage implements IMessage {
|
||||
|
||||
private final String player;
|
||||
private final String message;
|
||||
|
||||
public ChatMessage(String playerName, String message) {
|
||||
// TODO Auto-generated constructor stub
|
||||
this.message = message;
|
||||
this.player = playerName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toNetString() {
|
||||
// TODO Auto-generated method stub
|
||||
return String.format("%s: %s", player, message);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
package forge.net.protocol.outcoming;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class EchoMessage implements IMessage {
|
||||
|
||||
private final String message;
|
||||
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for Constructor.
|
||||
* @param message2
|
||||
*/
|
||||
public EchoMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String toNetString() {
|
||||
return String.format("Echo: %s", message);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
package forge.net.protocol.outcoming;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public interface IMessage {
|
||||
public String toNetString();
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
package forge.net.protocol.outcoming;
|
||||
|
||||
import forge.net.protocol.incoming.IncorrectPacket;
|
||||
|
||||
|
||||
public class IncorrectPacketMessage implements IMessage {
|
||||
|
||||
IncorrectPacket badPacket;
|
||||
public IncorrectPacketMessage(IncorrectPacket packet) {
|
||||
badPacket = packet;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toNetString() {
|
||||
return String.format("Wrong syntax for %s command: parameter #%d is %s", badPacket.getIntendedCode().getOpcode(), 1+badPacket.getIndex(), badPacket.getString());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
package forge.net.protocol.outcoming;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class UnknownPacketMessage implements IMessage {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.net.protocol.outcoming.Message#toNetString()
|
||||
*/
|
||||
@Override
|
||||
public String toNetString() {
|
||||
return "Unkown packet received";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package forge.net.protocol.toclient;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class AuthResultPacketClt implements IPacketClt {
|
||||
private final boolean successful;
|
||||
private final String username;
|
||||
|
||||
public AuthResultPacketClt(String user, boolean success) {
|
||||
username = user;
|
||||
successful = success;
|
||||
}
|
||||
|
||||
public boolean isSuccessful() {
|
||||
return successful;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
}
|
||||
25
src/main/java/forge/net/protocol/toclient/ChatPacketClt.java
Normal file
25
src/main/java/forge/net/protocol/toclient/ChatPacketClt.java
Normal file
@@ -0,0 +1,25 @@
|
||||
package forge.net.protocol.toclient;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class ChatPacketClt implements IPacketClt {
|
||||
|
||||
private final String actor;
|
||||
private final String message;
|
||||
|
||||
public ChatPacketClt(String playerName, String message) {
|
||||
// TODO Auto-generated constructor stub
|
||||
this.message = message;
|
||||
this.actor = playerName;
|
||||
}
|
||||
|
||||
public String getActor() {
|
||||
return actor;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
}
|
||||
24
src/main/java/forge/net/protocol/toclient/EchoPacketClt.java
Normal file
24
src/main/java/forge/net/protocol/toclient/EchoPacketClt.java
Normal file
@@ -0,0 +1,24 @@
|
||||
package forge.net.protocol.toclient;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class EchoPacketClt implements IPacketClt {
|
||||
|
||||
private final String message;
|
||||
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for Constructor.
|
||||
* @param message2
|
||||
*/
|
||||
public EchoPacketClt(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package forge.net.protocol.toclient;
|
||||
|
||||
/**
|
||||
* A response packet to an Incorrect packet client had sent to server
|
||||
*/
|
||||
public class ErrorIncorrectPacketClt implements IPacketClt {
|
||||
|
||||
private final String message;
|
||||
|
||||
public ErrorIncorrectPacketClt(String msg) {
|
||||
message = msg;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package forge.net.protocol.toclient;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class ErrorUnknownPacketClt implements IPacketClt {
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package forge.net.protocol.toclient;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public interface IPacketClt {
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package forge.net.protocol.toserver;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class AuthorizePacketSrv implements IPacketSrv {
|
||||
private final String username;
|
||||
private final String password;
|
||||
|
||||
private AuthorizePacketSrv(String name, String pass) {
|
||||
username = name;
|
||||
password = pass;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
}
|
||||
16
src/main/java/forge/net/protocol/toserver/ChatPacketSrv.java
Normal file
16
src/main/java/forge/net/protocol/toserver/ChatPacketSrv.java
Normal file
@@ -0,0 +1,16 @@
|
||||
package forge.net.protocol.toserver;
|
||||
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class ChatPacketSrv implements IPacketSrv {
|
||||
private final String message;
|
||||
public ChatPacketSrv(String data) {
|
||||
message = data;
|
||||
}
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
}
|
||||
22
src/main/java/forge/net/protocol/toserver/EchoPacketSrv.java
Normal file
22
src/main/java/forge/net/protocol/toserver/EchoPacketSrv.java
Normal file
@@ -0,0 +1,22 @@
|
||||
package forge.net.protocol.toserver;
|
||||
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class EchoPacketSrv implements IPacketSrv {
|
||||
|
||||
private final String message;
|
||||
private EchoPacketSrv(String data) {
|
||||
message = data;
|
||||
}
|
||||
|
||||
public static EchoPacketSrv parse(String data) {
|
||||
return new EchoPacketSrv(data);
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package forge.net.protocol.toserver;
|
||||
|
||||
|
||||
/** A common ancestor for all packets directed to server */
|
||||
public interface IPacketSrv {}
|
||||
@@ -0,0 +1,18 @@
|
||||
package forge.net.protocol.toserver;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class IncorrectPacketSrv implements IPacketSrv {
|
||||
|
||||
private final String message;
|
||||
|
||||
public IncorrectPacketSrv(String errorMessage) {
|
||||
message = errorMessage;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package forge.net.protocol.toserver;
|
||||
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class UnknownPacketSrv implements IPacketSrv {
|
||||
|
||||
private final String message;
|
||||
public UnknownPacketSrv(String data) {
|
||||
message = data;
|
||||
}
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,3 +1,3 @@
|
||||
/** Model (as in model-view-controller) for Forge. */
|
||||
package forge.net.protocol.incoming;
|
||||
package forge.net.protocol.toserver;
|
||||
|
||||
Reference in New Issue
Block a user