diff --git a/ratel-landlords/landlords-client/pom.xml b/ratel-landlords/landlords-client/pom.xml
index 064db3b..a83bc3f 100644
--- a/ratel-landlords/landlords-client/pom.xml
+++ b/ratel-landlords/landlords-client/pom.xml
@@ -9,4 +9,12 @@
landlords
1.0.0
+
+
+
+ com.smallnico.ratel
+ landlords-common
+ 1.0.0
+
+
\ No newline at end of file
diff --git a/ratel-landlords/landlords-client/src/main/java/org/nico/ratel/landlords/client/ClientContains.java b/ratel-landlords/landlords-client/src/main/java/org/nico/ratel/landlords/client/ClientContains.java
new file mode 100644
index 0000000..19c854c
--- /dev/null
+++ b/ratel-landlords/landlords-client/src/main/java/org/nico/ratel/landlords/client/ClientContains.java
@@ -0,0 +1,14 @@
+package org.nico.ratel.landlords.client;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.nico.ratel.landlords.entity.ServerSide;
+
+public class ClientContains {
+
+ public final static int port = 1024;
+
+ public final static Map serverSides = new LinkedHashMap<>();
+
+}
diff --git a/ratel-landlords/landlords-client/src/main/java/org/nico/ratel/landlords/client/SimpleClient.java b/ratel-landlords/landlords-client/src/main/java/org/nico/ratel/landlords/client/SimpleClient.java
new file mode 100644
index 0000000..6ba9e30
--- /dev/null
+++ b/ratel-landlords/landlords-client/src/main/java/org/nico/ratel/landlords/client/SimpleClient.java
@@ -0,0 +1,52 @@
+package org.nico.ratel.landlords.client;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+import org.nico.ratel.landlords.client.handler.TransferHandler;
+import org.nico.ratel.landlords.handler.DefaultDecoder;
+
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import io.netty.handler.codec.bytes.ByteArrayEncoder;
+
+public class SimpleClient {
+
+ public static void main(String[] args) throws InterruptedException, IOException {
+
+ EventLoopGroup group = new NioEventLoopGroup();
+
+ try {
+ Bootstrap b = new Bootstrap()
+ .group(group)
+ .channel(NioSocketChannel.class)
+ .handler(new ChannelInitializer(){
+
+ @Override
+ protected void initChannel(SocketChannel ch) throws Exception {
+ ChannelPipeline pipeline = ch.pipeline();
+ pipeline.addLast("decoder", new DefaultDecoder());
+ pipeline.addLast("encoder", new ByteArrayEncoder());
+ pipeline.addLast("handler", new TransferHandler());
+ }
+
+ });
+ Channel channel = b.connect("127.0.0.1", 1024).sync().channel();
+ BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
+ while (true) {
+ channel.writeAndFlush(reader.readLine().getBytes());
+ }
+ } finally {
+ group.shutdownGracefully().sync();
+ }
+
+
+ }
+}
diff --git a/ratel-landlords/landlords-client/src/main/java/org/nico/ratel/landlords/client/handler/TransferHandler.java b/ratel-landlords/landlords-client/src/main/java/org/nico/ratel/landlords/client/handler/TransferHandler.java
new file mode 100644
index 0000000..3e53942
--- /dev/null
+++ b/ratel-landlords/landlords-client/src/main/java/org/nico/ratel/landlords/client/handler/TransferHandler.java
@@ -0,0 +1,19 @@
+package org.nico.ratel.landlords.client.handler;
+
+import org.nico.ratel.landlords.entity.ServerTransferData;
+import org.nico.ratel.landlords.transfer.TransferProtocolUtils;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+
+public class TransferHandler extends ChannelInboundHandlerAdapter{
+
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+
+ byte[] bs = (byte[]) msg;
+
+ ServerTransferData serverTransferData = TransferProtocolUtils.unserialize(bs, ServerTransferData.class);
+ System.out.println(serverTransferData);
+ }
+}
diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/Default.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/Default.java
new file mode 100644
index 0000000..392def7
--- /dev/null
+++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/Default.java
@@ -0,0 +1,5 @@
+package org.nico.ratel.landlords;
+
+public class Default {
+
+}
diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/entity/ClientSide.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/entity/ClientSide.java
new file mode 100644
index 0000000..a30d0b2
--- /dev/null
+++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/entity/ClientSide.java
@@ -0,0 +1,92 @@
+package org.nico.ratel.landlords.entity;
+
+import java.util.List;
+
+import org.nico.ratel.landlords.enums.ClientStatus;
+import org.nico.ratel.landlords.enums.ClientType;
+
+import io.netty.channel.Channel;
+
+public class ClientSide {
+
+ private int id;
+
+ private int serverId;
+
+ private List pokers;
+
+ private ClientStatus status;
+
+ private ClientType type;
+
+ private ClientSide next;
+
+ private ClientSide pre;
+
+ private Channel channel;
+
+ public final Channel getChannel() {
+ return channel;
+ }
+
+ public final void setChannel(Channel channel) {
+ this.channel = channel;
+ }
+
+ public final int getServerId() {
+ return serverId;
+ }
+
+ public final void setServerId(int serverId) {
+ this.serverId = serverId;
+ }
+
+ public final List getPokers() {
+ return pokers;
+ }
+
+ public final void setPokers(List pokers) {
+ this.pokers = pokers;
+ }
+
+ public final ClientStatus getStatus() {
+ return status;
+ }
+
+ public final void setStatus(ClientStatus status) {
+ this.status = status;
+ }
+
+ public final ClientType getType() {
+ return type;
+ }
+
+ public final void setType(ClientType type) {
+ this.type = type;
+ }
+
+ public final int getId() {
+ return id;
+ }
+
+ public final void setId(int id) {
+ this.id = id;
+ }
+
+ public final ClientSide getNext() {
+ return next;
+ }
+
+ public final void setNext(ClientSide next) {
+ this.next = next;
+ }
+
+ public final ClientSide getPre() {
+ return pre;
+ }
+
+ public final void setPre(ClientSide pre) {
+ this.pre = pre;
+ }
+
+}
diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/entity/ClientTransferData.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/entity/ClientTransferData.java
new file mode 100644
index 0000000..a565900
--- /dev/null
+++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/entity/ClientTransferData.java
@@ -0,0 +1,50 @@
+package org.nico.ratel.landlords.entity;
+
+import org.nico.ratel.landlords.enums.ClientEventCode;
+
+public class ClientTransferData {
+
+ private int serverId;
+
+ private ClientEventCode code;
+
+ private String data;
+
+ public ClientTransferData() {}
+
+ public ClientTransferData(int serverId, ClientEventCode code, String data) {
+ this.serverId = serverId;
+ this.code = code;
+ this.data = data;
+ }
+
+ public final int getServerId() {
+ return serverId;
+ }
+
+ public final void setServerId(int serverId) {
+ this.serverId = serverId;
+ }
+
+ public final ClientEventCode getCode() {
+ return code;
+ }
+
+ public final void setCode(ClientEventCode code) {
+ this.code = code;
+ }
+
+ public final String getData() {
+ return data;
+ }
+
+ public final void setData(String data) {
+ this.data = data;
+ }
+
+ @Override
+ public String toString() {
+ return "ClientTransferData [serverId=" + serverId + ", code=" + code + ", data=" + data + "]";
+ }
+
+}
diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/trap/landlords/entity/Poker.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/entity/Poker.java
similarity index 65%
rename from ratel-landlords/landlords-common/src/main/java/org/nico/trap/landlords/entity/Poker.java
rename to ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/entity/Poker.java
index 5762b6b..d38f485 100644
--- a/ratel-landlords/landlords-common/src/main/java/org/nico/trap/landlords/entity/Poker.java
+++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/entity/Poker.java
@@ -1,7 +1,7 @@
-package org.nico.trap.landlords.entity;
+package org.nico.ratel.landlords.entity;
-import org.nico.trap.landlords.enums.PokerLevel;
-import org.nico.trap.landlords.enums.PokerType;
+import org.nico.ratel.landlords.enums.PokerLevel;
+import org.nico.ratel.landlords.enums.PokerType;
/**
* Poke, with {@link PokerLevel} and {@link PokerType}
@@ -14,6 +14,14 @@ public class Poker {
private PokerType type;
+ public Poker() {
+ }
+
+ public Poker(PokerLevel level, PokerType type) {
+ this.level = level;
+ this.type = type;
+ }
+
public final PokerLevel getLevel() {
return level;
}
@@ -43,5 +51,10 @@ public class Poker {
return false;
return true;
}
+
+ @Override
+ public String toString() {
+ return "Poker [level=" + level + ", type=" + type + "]";
+ }
}
diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/entity/ServerSide.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/entity/ServerSide.java
new file mode 100644
index 0000000..240c83f
--- /dev/null
+++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/entity/ServerSide.java
@@ -0,0 +1,46 @@
+package org.nico.ratel.landlords.entity;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.nico.ratel.landlords.enums.ServerStatus;
+
+public class ServerSide {
+
+ private int id;
+
+ private ServerStatus status;
+
+ private Map pokers;
+
+ public ServerSide(int id) {
+ this.id = id;
+ this.pokers = new LinkedHashMap<>(3);
+ this.status = ServerStatus.BLANK;
+ }
+
+ public final int getId() {
+ return id;
+ }
+
+ public final void setId(int id) {
+ this.id = id;
+ }
+
+ public final ServerStatus getStatus() {
+ return status;
+ }
+
+ public final void setStatus(ServerStatus status) {
+ this.status = status;
+ }
+
+ public final Map getPokers() {
+ return pokers;
+ }
+
+ public final void setPokers(Map pokers) {
+ this.pokers = pokers;
+ }
+
+}
diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/entity/ServerTransferData.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/entity/ServerTransferData.java
new file mode 100644
index 0000000..1f61ab6
--- /dev/null
+++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/entity/ServerTransferData.java
@@ -0,0 +1,32 @@
+package org.nico.ratel.landlords.entity;
+
+import org.nico.ratel.landlords.enums.ServerEventCode;
+
+public class ServerTransferData {
+
+ private ServerEventCode code;
+
+ private String data;
+
+ public final ServerEventCode getCode() {
+ return code;
+ }
+
+ public final void setCode(ServerEventCode code) {
+ this.code = code;
+ }
+
+ public final String getData() {
+ return data;
+ }
+
+ public final void setData(String data) {
+ this.data = data;
+ }
+
+ @Override
+ public String toString() {
+ return "ServerTransferData [code=" + code + ", data=" + data + "]";
+ }
+
+}
diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/ClientEventCode.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/ClientEventCode.java
new file mode 100644
index 0000000..7c0e213
--- /dev/null
+++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/ClientEventCode.java
@@ -0,0 +1,7 @@
+package org.nico.ratel.landlords.enums;
+
+public enum ClientEventCode {
+
+ CODE_INTO
+
+}
diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/ClientStatus.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/ClientStatus.java
new file mode 100644
index 0000000..d7ebbb5
--- /dev/null
+++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/ClientStatus.java
@@ -0,0 +1,16 @@
+package org.nico.ratel.landlords.enums;
+
+public enum ClientStatus {
+
+ TO_CHOOSE,
+
+ NO_READY,
+
+ READY,
+
+ WAIT,
+
+ CALL_LANDLORD,
+
+
+}
diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/ClientType.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/ClientType.java
new file mode 100644
index 0000000..8dacbd3
--- /dev/null
+++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/ClientType.java
@@ -0,0 +1,9 @@
+package org.nico.ratel.landlords.enums;
+
+public enum ClientType {
+
+ LANDLORD,
+
+ PEASANT
+
+}
diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/trap/landlords/enums/PokerLevel.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/PokerLevel.java
similarity index 95%
rename from ratel-landlords/landlords-common/src/main/java/org/nico/trap/landlords/enums/PokerLevel.java
rename to ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/PokerLevel.java
index a69584d..7f683a1 100644
--- a/ratel-landlords/landlords-common/src/main/java/org/nico/trap/landlords/enums/PokerLevel.java
+++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/PokerLevel.java
@@ -1,4 +1,4 @@
-package org.nico.trap.landlords.enums;
+package org.nico.ratel.landlords.enums;
/**
* Poker level
diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/trap/landlords/enums/PokerType.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/PokerType.java
similarity index 88%
rename from ratel-landlords/landlords-common/src/main/java/org/nico/trap/landlords/enums/PokerType.java
rename to ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/PokerType.java
index ee19996..6d3a484 100644
--- a/ratel-landlords/landlords-common/src/main/java/org/nico/trap/landlords/enums/PokerType.java
+++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/PokerType.java
@@ -1,4 +1,4 @@
-package org.nico.trap.landlords.enums;
+package org.nico.ratel.landlords.enums;
/**
* Poker type Spade、 Heart、 Diamond、 Club
diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/ServerEventCode.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/ServerEventCode.java
new file mode 100644
index 0000000..52e8dcc
--- /dev/null
+++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/ServerEventCode.java
@@ -0,0 +1,7 @@
+package org.nico.ratel.landlords.enums;
+
+public enum ServerEventCode {
+
+ CODE_INTO
+
+}
diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/ServerStatus.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/ServerStatus.java
new file mode 100644
index 0000000..245d5aa
--- /dev/null
+++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/enums/ServerStatus.java
@@ -0,0 +1,11 @@
+package org.nico.ratel.landlords.enums;
+
+public enum ServerStatus {
+
+ BLANK,
+
+ WAIT,
+
+ STARTING
+
+}
diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/exception/LandlordException.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/exception/LandlordException.java
new file mode 100644
index 0000000..20a7eb3
--- /dev/null
+++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/exception/LandlordException.java
@@ -0,0 +1,27 @@
+package org.nico.ratel.landlords.exception;
+
+public class LandlordException extends RuntimeException{
+
+ private static final long serialVersionUID = -5643145833569293539L;
+
+ public LandlordException() {
+ super();
+ }
+
+ public LandlordException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ }
+
+ public LandlordException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public LandlordException(String message) {
+ super(message);
+ }
+
+ public LandlordException(Throwable cause) {
+ super(cause);
+ }
+
+}
diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/handler/DefaultDecoder.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/handler/DefaultDecoder.java
new file mode 100644
index 0000000..3d0b8e6
--- /dev/null
+++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/handler/DefaultDecoder.java
@@ -0,0 +1,27 @@
+package org.nico.ratel.landlords.handler;
+
+import java.util.List;
+
+import org.nico.ratel.landlords.transfer.TransferProtocolUtils;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.ByteToMessageDecoder;
+
+public class DefaultDecoder extends ByteToMessageDecoder{
+
+ @Override
+ protected void decode(ChannelHandlerContext ctx, ByteBuf in, List