diff --git a/.gitattributes b/.gitattributes
index 47e507e727a..59f27d1e79b 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -14323,21 +14323,22 @@ src/main/java/forge/net/client/state/InLobbyClientState.java -text
src/main/java/forge/net/client/state/UnauthorizedClientState.java -text
src/main/java/forge/net/client/state/package-info.java -text
src/main/java/forge/net/package-info.java -text
-src/main/java/forge/net/protocol/incoming/AuthorizePacket.java -text
-src/main/java/forge/net/protocol/incoming/ChatPacket.java -text
-src/main/java/forge/net/protocol/incoming/EchoPacket.java -text
-src/main/java/forge/net/protocol/incoming/IPacket.java -text
-src/main/java/forge/net/protocol/incoming/IncorrectPacket.java -text
-src/main/java/forge/net/protocol/incoming/PacketOpcode.java -text
-src/main/java/forge/net/protocol/incoming/UnknownPacket.java -text
-src/main/java/forge/net/protocol/incoming/package-info.java -text
-src/main/java/forge/net/protocol/outcoming/AuthorizationSuccessfulMessage.java -text
-src/main/java/forge/net/protocol/outcoming/ChatMessage.java -text
-src/main/java/forge/net/protocol/outcoming/EchoMessage.java -text
-src/main/java/forge/net/protocol/outcoming/IMessage.java -text
-src/main/java/forge/net/protocol/outcoming/IncorrectPacketMessage.java -text
-src/main/java/forge/net/protocol/outcoming/UnknownPacketMessage.java -text
+src/main/java/forge/net/protocol/ClientProtocol.java -text
+src/main/java/forge/net/protocol/ClientProtocolJson.java -text
src/main/java/forge/net/protocol/package-info.java -text
+src/main/java/forge/net/protocol/toclient/AuthResultPacketClt.java -text
+src/main/java/forge/net/protocol/toclient/ChatPacketClt.java -text
+src/main/java/forge/net/protocol/toclient/EchoPacketClt.java -text
+src/main/java/forge/net/protocol/toclient/ErrorIncorrectPacketClt.java -text
+src/main/java/forge/net/protocol/toclient/ErrorUnknownPacketClt.java -text
+src/main/java/forge/net/protocol/toclient/IPacketClt.java -text
+src/main/java/forge/net/protocol/toserver/AuthorizePacketSrv.java -text
+src/main/java/forge/net/protocol/toserver/ChatPacketSrv.java -text
+src/main/java/forge/net/protocol/toserver/EchoPacketSrv.java -text
+src/main/java/forge/net/protocol/toserver/IPacketSrv.java -text
+src/main/java/forge/net/protocol/toserver/IncorrectPacketSrv.java -text
+src/main/java/forge/net/protocol/toserver/UnknownPacketSrv.java -text
+src/main/java/forge/net/protocol/toserver/package-info.java -text
src/main/java/forge/package-info.java svneol=native#text/plain
src/main/java/forge/properties/ForgePreferences.java svneol=native#text/plain
src/main/java/forge/properties/NewConstants.java svneol=native#text/plain
diff --git a/pom.xml b/pom.xml
index 056ae556679..9b1469108e0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -701,6 +701,11 @@
guava
13.0.1
+
+ com.google.code.gson
+ gson
+ 2.2.3
+
com.thoughtworks.xstream
xstream
diff --git a/src/main/java/forge/game/player/LobbyPlayerRemote.java b/src/main/java/forge/game/player/LobbyPlayerRemote.java
index 5d704bfc6ae..65531e41b7a 100644
--- a/src/main/java/forge/game/player/LobbyPlayerRemote.java
+++ b/src/main/java/forge/game/player/LobbyPlayerRemote.java
@@ -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));
}
}
\ No newline at end of file
diff --git a/src/main/java/forge/net/client/INetClient.java b/src/main/java/forge/net/client/INetClient.java
index 46798a53c54..4140fd3642e 100644
--- a/src/main/java/forge/net/client/INetClient.java
+++ b/src/main/java/forge/net/client/INetClient.java
@@ -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);
diff --git a/src/main/java/forge/net/client/NetClient.java b/src/main/java/forge/net/client/NetClient.java
index 9aa28373669..11c8508eb93 100644
--- a/src/main/java/forge/net/client/NetClient.java
+++ b/src/main/java/forge/net/client/NetClient.java
@@ -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 state = new LinkedBlockingDeque();
+ private final BlockingDeque state = new LinkedBlockingDeque();
private LobbyPlayer player = null;
+ private final ClientProtocol 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)
diff --git a/src/main/java/forge/net/client/state/ConnectedClientState.java b/src/main/java/forge/net/client/state/ConnectedClientState.java
index 91b4abbc7ea..7336ac4f5a3 100644
--- a/src/main/java/forge/net/client/state/ConnectedClientState.java
+++ b/src/main/java/forge/net/client/state/ConnectedClientState.java
@@ -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;
}
}
diff --git a/src/main/java/forge/net/client/state/IClientState.java b/src/main/java/forge/net/client/state/IClientState.java
index f200743f362..3a65cdbfeb1 100644
--- a/src/main/java/forge/net/client/state/IClientState.java
+++ b/src/main/java/forge/net/client/state/IClientState.java
@@ -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);
}
diff --git a/src/main/java/forge/net/client/state/InLobbyClientState.java b/src/main/java/forge/net/client/state/InLobbyClientState.java
index 75fe7e01043..306f7046037 100644
--- a/src/main/java/forge/net/client/state/InLobbyClientState.java
+++ b/src/main/java/forge/net/client/state/InLobbyClientState.java
@@ -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
diff --git a/src/main/java/forge/net/client/state/UnauthorizedClientState.java b/src/main/java/forge/net/client/state/UnauthorizedClientState.java
index 5cd40ba9294..25309cd94d8 100644
--- a/src/main/java/forge/net/client/state/UnauthorizedClientState.java
+++ b/src/main/java/forge/net/client/state/UnauthorizedClientState.java
@@ -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());
diff --git a/src/main/java/forge/net/protocol/ClientProtocol.java b/src/main/java/forge/net/protocol/ClientProtocol.java
new file mode 100644
index 00000000000..54df742267a
--- /dev/null
+++ b/src/main/java/forge/net/protocol/ClientProtocol.java
@@ -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 decodePacket(String data);
+ String encodePacket(TOutComing packet);
+}
\ No newline at end of file
diff --git a/src/main/java/forge/net/protocol/ClientProtocolJson.java b/src/main/java/forge/net/protocol/ClientProtocolJson.java
new file mode 100644
index 00000000000..75e436f52bb
--- /dev/null
+++ b/src/main/java/forge/net/protocol/ClientProtocolJson.java
@@ -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 {
+ private final static Map> headerToClassInbound = new HashMap>();
+ private final static Map, String> classToHeaderOutbound = new HashMap, 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));
+ }
+
+}
diff --git a/src/main/java/forge/net/protocol/incoming/AuthorizePacket.java b/src/main/java/forge/net/protocol/incoming/AuthorizePacket.java
deleted file mode 100644
index 46c3b0e1273..00000000000
--- a/src/main/java/forge/net/protocol/incoming/AuthorizePacket.java
+++ /dev/null
@@ -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;
- }
-
-}
diff --git a/src/main/java/forge/net/protocol/incoming/ChatPacket.java b/src/main/java/forge/net/protocol/incoming/ChatPacket.java
deleted file mode 100644
index 7dc7db24210..00000000000
--- a/src/main/java/forge/net/protocol/incoming/ChatPacket.java
+++ /dev/null
@@ -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;
- }
-
-
-}
diff --git a/src/main/java/forge/net/protocol/incoming/EchoPacket.java b/src/main/java/forge/net/protocol/incoming/EchoPacket.java
deleted file mode 100644
index 7bb14e314bb..00000000000
--- a/src/main/java/forge/net/protocol/incoming/EchoPacket.java
+++ /dev/null
@@ -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;
- }
-
-}
diff --git a/src/main/java/forge/net/protocol/incoming/IPacket.java b/src/main/java/forge/net/protocol/incoming/IPacket.java
deleted file mode 100644
index 1e77554e879..00000000000
--- a/src/main/java/forge/net/protocol/incoming/IPacket.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package forge.net.protocol.incoming;
-
-
-/**
- * TODO: Write javadoc for this type.
- *
- */
-public interface IPacket {
- PacketOpcode getOpCode();
-}
diff --git a/src/main/java/forge/net/protocol/incoming/IncorrectPacket.java b/src/main/java/forge/net/protocol/incoming/IncorrectPacket.java
deleted file mode 100644
index 6f2beedf17e..00000000000
--- a/src/main/java/forge/net/protocol/incoming/IncorrectPacket.java
+++ /dev/null
@@ -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;
- }
-
-}
diff --git a/src/main/java/forge/net/protocol/incoming/PacketOpcode.java b/src/main/java/forge/net/protocol/incoming/PacketOpcode.java
deleted file mode 100644
index 656cdce45ee..00000000000
--- a/src/main/java/forge/net/protocol/incoming/PacketOpcode.java
+++ /dev/null
@@ -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);
- }
- }
-}
diff --git a/src/main/java/forge/net/protocol/incoming/UnknownPacket.java b/src/main/java/forge/net/protocol/incoming/UnknownPacket.java
deleted file mode 100644
index 046029868a4..00000000000
--- a/src/main/java/forge/net/protocol/incoming/UnknownPacket.java
+++ /dev/null
@@ -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;
- }
-
-
-}
diff --git a/src/main/java/forge/net/protocol/outcoming/AuthorizationSuccessfulMessage.java b/src/main/java/forge/net/protocol/outcoming/AuthorizationSuccessfulMessage.java
deleted file mode 100644
index 22ae896f133..00000000000
--- a/src/main/java/forge/net/protocol/outcoming/AuthorizationSuccessfulMessage.java
+++ /dev/null
@@ -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;
- }
-
-}
diff --git a/src/main/java/forge/net/protocol/outcoming/ChatMessage.java b/src/main/java/forge/net/protocol/outcoming/ChatMessage.java
deleted file mode 100644
index aea189e2134..00000000000
--- a/src/main/java/forge/net/protocol/outcoming/ChatMessage.java
+++ /dev/null
@@ -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);
- }
-
-}
diff --git a/src/main/java/forge/net/protocol/outcoming/EchoMessage.java b/src/main/java/forge/net/protocol/outcoming/EchoMessage.java
deleted file mode 100644
index 915c9594eb2..00000000000
--- a/src/main/java/forge/net/protocol/outcoming/EchoMessage.java
+++ /dev/null
@@ -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);
- }
-
-}
diff --git a/src/main/java/forge/net/protocol/outcoming/IMessage.java b/src/main/java/forge/net/protocol/outcoming/IMessage.java
deleted file mode 100644
index deaba591a45..00000000000
--- a/src/main/java/forge/net/protocol/outcoming/IMessage.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package forge.net.protocol.outcoming;
-
-/**
- * TODO: Write javadoc for this type.
- *
- */
-public interface IMessage {
- public String toNetString();
-}
diff --git a/src/main/java/forge/net/protocol/outcoming/IncorrectPacketMessage.java b/src/main/java/forge/net/protocol/outcoming/IncorrectPacketMessage.java
deleted file mode 100644
index 065bff4013e..00000000000
--- a/src/main/java/forge/net/protocol/outcoming/IncorrectPacketMessage.java
+++ /dev/null
@@ -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());
- }
-
-}
diff --git a/src/main/java/forge/net/protocol/outcoming/UnknownPacketMessage.java b/src/main/java/forge/net/protocol/outcoming/UnknownPacketMessage.java
deleted file mode 100644
index da4b0a7562f..00000000000
--- a/src/main/java/forge/net/protocol/outcoming/UnknownPacketMessage.java
+++ /dev/null
@@ -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";
- }
-
-}
diff --git a/src/main/java/forge/net/protocol/toclient/AuthResultPacketClt.java b/src/main/java/forge/net/protocol/toclient/AuthResultPacketClt.java
new file mode 100644
index 00000000000..8f201b563c2
--- /dev/null
+++ b/src/main/java/forge/net/protocol/toclient/AuthResultPacketClt.java
@@ -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;
+ }
+}
diff --git a/src/main/java/forge/net/protocol/toclient/ChatPacketClt.java b/src/main/java/forge/net/protocol/toclient/ChatPacketClt.java
new file mode 100644
index 00000000000..e503f555a05
--- /dev/null
+++ b/src/main/java/forge/net/protocol/toclient/ChatPacketClt.java
@@ -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;
+ }
+}
diff --git a/src/main/java/forge/net/protocol/toclient/EchoPacketClt.java b/src/main/java/forge/net/protocol/toclient/EchoPacketClt.java
new file mode 100644
index 00000000000..396f3f29724
--- /dev/null
+++ b/src/main/java/forge/net/protocol/toclient/EchoPacketClt.java
@@ -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;
+ }
+}
diff --git a/src/main/java/forge/net/protocol/toclient/ErrorIncorrectPacketClt.java b/src/main/java/forge/net/protocol/toclient/ErrorIncorrectPacketClt.java
new file mode 100644
index 00000000000..37c47a332cf
--- /dev/null
+++ b/src/main/java/forge/net/protocol/toclient/ErrorIncorrectPacketClt.java
@@ -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;
+ }
+}
diff --git a/src/main/java/forge/net/protocol/toclient/ErrorUnknownPacketClt.java b/src/main/java/forge/net/protocol/toclient/ErrorUnknownPacketClt.java
new file mode 100644
index 00000000000..f7a4a9b717e
--- /dev/null
+++ b/src/main/java/forge/net/protocol/toclient/ErrorUnknownPacketClt.java
@@ -0,0 +1,11 @@
+package forge.net.protocol.toclient;
+
+/**
+ * TODO: Write javadoc for this type.
+ *
+ */
+public class ErrorUnknownPacketClt implements IPacketClt {
+
+
+
+}
diff --git a/src/main/java/forge/net/protocol/toclient/IPacketClt.java b/src/main/java/forge/net/protocol/toclient/IPacketClt.java
new file mode 100644
index 00000000000..c20946d0772
--- /dev/null
+++ b/src/main/java/forge/net/protocol/toclient/IPacketClt.java
@@ -0,0 +1,8 @@
+package forge.net.protocol.toclient;
+
+/**
+ * TODO: Write javadoc for this type.
+ *
+ */
+public interface IPacketClt {
+}
diff --git a/src/main/java/forge/net/protocol/toserver/AuthorizePacketSrv.java b/src/main/java/forge/net/protocol/toserver/AuthorizePacketSrv.java
new file mode 100644
index 00000000000..c424b0f70a6
--- /dev/null
+++ b/src/main/java/forge/net/protocol/toserver/AuthorizePacketSrv.java
@@ -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;
+ }
+
+}
diff --git a/src/main/java/forge/net/protocol/toserver/ChatPacketSrv.java b/src/main/java/forge/net/protocol/toserver/ChatPacketSrv.java
new file mode 100644
index 00000000000..1846b6c1a5d
--- /dev/null
+++ b/src/main/java/forge/net/protocol/toserver/ChatPacketSrv.java
@@ -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;
+ }
+}
diff --git a/src/main/java/forge/net/protocol/toserver/EchoPacketSrv.java b/src/main/java/forge/net/protocol/toserver/EchoPacketSrv.java
new file mode 100644
index 00000000000..a51cb23151d
--- /dev/null
+++ b/src/main/java/forge/net/protocol/toserver/EchoPacketSrv.java
@@ -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;
+ }
+}
diff --git a/src/main/java/forge/net/protocol/toserver/IPacketSrv.java b/src/main/java/forge/net/protocol/toserver/IPacketSrv.java
new file mode 100644
index 00000000000..3db7ef901ad
--- /dev/null
+++ b/src/main/java/forge/net/protocol/toserver/IPacketSrv.java
@@ -0,0 +1,5 @@
+package forge.net.protocol.toserver;
+
+
+/** A common ancestor for all packets directed to server */
+public interface IPacketSrv {}
\ No newline at end of file
diff --git a/src/main/java/forge/net/protocol/toserver/IncorrectPacketSrv.java b/src/main/java/forge/net/protocol/toserver/IncorrectPacketSrv.java
new file mode 100644
index 00000000000..995c948c728
--- /dev/null
+++ b/src/main/java/forge/net/protocol/toserver/IncorrectPacketSrv.java
@@ -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;
+ }
+}
diff --git a/src/main/java/forge/net/protocol/toserver/UnknownPacketSrv.java b/src/main/java/forge/net/protocol/toserver/UnknownPacketSrv.java
new file mode 100644
index 00000000000..e5942dc12a3
--- /dev/null
+++ b/src/main/java/forge/net/protocol/toserver/UnknownPacketSrv.java
@@ -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;
+ }
+
+}
diff --git a/src/main/java/forge/net/protocol/incoming/package-info.java b/src/main/java/forge/net/protocol/toserver/package-info.java
similarity index 57%
rename from src/main/java/forge/net/protocol/incoming/package-info.java
rename to src/main/java/forge/net/protocol/toserver/package-info.java
index 575936006bb..647c3a50f50 100644
--- a/src/main/java/forge/net/protocol/incoming/package-info.java
+++ b/src/main/java/forge/net/protocol/toserver/package-info.java
@@ -1,3 +1,3 @@
/** Model (as in model-view-controller) for Forge. */
-package forge.net.protocol.incoming;
+package forge.net.protocol.toserver;