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 out) throws Exception { + int startIndex = -1; + int endIndex = -1; + if((startIndex = in.indexOf(in.readerIndex(), in.writerIndex(), TransferProtocolUtils.PROTOCOL_HAED)) != -1 && + (endIndex = in.indexOf(startIndex + 1, in.writerIndex(), TransferProtocolUtils.PROTOCOL_TAIL)) != -1) { + endIndex ++; + byte[] bytes = new byte[endIndex - startIndex]; + in.skipBytes(startIndex - in.readerIndex()); + in.readBytes(bytes, 0, bytes.length); + out.add(bytes); + } + } + +} diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/trap/landlords/transfer/ByteKit.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/transfer/ByteKit.java similarity index 72% rename from ratel-landlords/landlords-common/src/main/java/org/nico/trap/landlords/transfer/ByteKit.java rename to ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/transfer/ByteKit.java index 6be5400..5fc301d 100644 --- a/ratel-landlords/landlords-common/src/main/java/org/nico/trap/landlords/transfer/ByteKit.java +++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/transfer/ByteKit.java @@ -1,4 +1,4 @@ -package org.nico.trap.landlords.transfer; +package org.nico.ratel.landlords.transfer; /** * Byte manipulation tool @@ -39,10 +39,22 @@ public class ByteKit { } } if(isEquals) { - targetIndex = index; + targetIndex = index; + break; } } } return targetIndex; } + + /** + * Gets the position of the byte byte in the byte array + * + * @param b Byte + * @param start Matching start index + * @return Match index, not match to return -1 + */ + public int indexOf(byte b, int start) { + return indexOf(new byte[] {b}, start); + } } diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/trap/landlords/transfer/ByteLink.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/transfer/ByteLink.java similarity index 96% rename from ratel-landlords/landlords-common/src/main/java/org/nico/trap/landlords/transfer/ByteLink.java rename to ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/transfer/ByteLink.java index 07dbbd8..06df462 100644 --- a/ratel-landlords/landlords-common/src/main/java/org/nico/trap/landlords/transfer/ByteLink.java +++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/transfer/ByteLink.java @@ -1,4 +1,4 @@ -package org.nico.trap.landlords.transfer; +package org.nico.ratel.landlords.transfer; public class ByteLink{ diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/transfer/TransferProtocolUtils.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/transfer/TransferProtocolUtils.java new file mode 100644 index 0000000..b77777f --- /dev/null +++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/transfer/TransferProtocolUtils.java @@ -0,0 +1,72 @@ +package org.nico.ratel.landlords.transfer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.nico.noson.Noson; +import org.nico.noson.entity.NoType; +import org.nico.ratel.landlords.entity.Poker; +import org.nico.ratel.landlords.enums.PokerLevel; +import org.nico.ratel.landlords.enums.PokerType; +import org.nico.ratel.landlords.exception.LandlordException; + +/** + * Protocol transport related tools + * + * @author nico + * @time 2018-11-01 20:43 + */ +public class TransferProtocolUtils { + + /** + * A protocol header that represents the beginning of an available stream of data + */ + public static final byte PROTOCOL_HAED = "#".getBytes()[0]; + + /** + * The end of the protocol used to represent the end of an available stream of data + */ + public static final byte PROTOCOL_TAIL = "$".getBytes()[0]; + + /** + * Serialize the poker list to transportable bytes + * + * @param pokers Poker list + * @return Transportable byte array + */ + public static byte[] serialize(Object obj) { + ByteLink bl = new ByteLink(); + bl.append(PROTOCOL_HAED); + bl.append(Noson.reversal(obj).getBytes()); + bl.append(PROTOCOL_TAIL); + return bl.toArray(); + } + + /** + * Deserialize the byte stream as an object + * + * @param bytes Byte array + * @return Genericity + */ + public static T unserialize(byte[] bytes, Class clazz) { + ByteKit bk = new ByteKit(bytes); + int start = -1; + int end = -1; + + int index = bk.indexOf(PROTOCOL_HAED, 0); + if(index != -1) start = index + 1; + + index = bk.indexOf(PROTOCOL_TAIL, 0); + if(index != -1) end = index; + + if(start != -1 && end != -1 && start > end) { + throw new LandlordException("Message format error, head and tail error."); + }else { + byte[] content = new byte[end - start]; + System.arraycopy(bytes, start, content, 0, content.length); + return Noson.convert(new String(content), clazz); + } + } + +} diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/view/ViewPrinter.java b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/view/ViewPrinter.java new file mode 100644 index 0000000..75d046f --- /dev/null +++ b/ratel-landlords/landlords-common/src/main/java/org/nico/ratel/landlords/view/ViewPrinter.java @@ -0,0 +1,8 @@ +package org.nico.ratel.landlords.view; + +public class ViewPrinter { + + public static void view(String msg) { + System.out.println(msg); + } +} diff --git a/ratel-landlords/landlords-common/src/main/java/org/nico/trap/landlords/transfer/TransferProtocolUtils.java b/ratel-landlords/landlords-common/src/main/java/org/nico/trap/landlords/transfer/TransferProtocolUtils.java deleted file mode 100644 index 8e7b617..0000000 --- a/ratel-landlords/landlords-common/src/main/java/org/nico/trap/landlords/transfer/TransferProtocolUtils.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.nico.trap.landlords.transfer; - -import org.nico.noson.Noson; - -/** - * Protocol transport related tools - * - * @author nico - * @time 2018-11-01 20:43 - */ -public class TransferProtocolUtils { - - /** - * A protocol header that represents the beginning of an available stream of data - */ - public static final byte[] PROTOCOL_HAED = "#".getBytes(); - - /** - * The end of the protocol used to represent the end of an available stream of data - */ - public static final byte[] PROTOCOL_TAIL = "$".getBytes(); - - /** - * Serialize the poker list to transportable bytes - * - * @param pokers Poker list - * @return Transportable byte array - */ - public static byte[] serialize(T object) { - ByteLink bl = new ByteLink(); - bl.append(PROTOCOL_HAED); - bl.append(Noson.reversal(object).getBytes()); - bl.append(PROTOCOL_TAIL); - return bl.toArray(); - } - - public static T unserialize(byte[] bytes) { - ByteLink bl = new ByteLink(); - - return null; - } - -} diff --git a/ratel-landlords/landlords-server/pom.xml b/ratel-landlords/landlords-server/pom.xml index 020543b..ed6bb5b 100644 --- a/ratel-landlords/landlords-server/pom.xml +++ b/ratel-landlords/landlords-server/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-server/src/main/java/org/nico/ratel/landlords/server/ServerContains.java b/ratel-landlords/landlords-server/src/main/java/org/nico/ratel/landlords/server/ServerContains.java new file mode 100644 index 0000000..5ba317b --- /dev/null +++ b/ratel-landlords/landlords-server/src/main/java/org/nico/ratel/landlords/server/ServerContains.java @@ -0,0 +1,40 @@ +package org.nico.ratel.landlords.server; + +import java.util.Map; +import java.util.Queue; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.atomic.AtomicInteger; + +import org.nico.ratel.landlords.entity.ClientSide; +import org.nico.ratel.landlords.entity.ServerSide; + +public class ServerContains { + + /** + * Server port + */ + public final static int PORT = 1024; + + /** + * The map of server side + */ + public final static Map SERVER_SIDE_MAP = new ConcurrentHashMap<>(); + + /** + * The list of client side + */ + public final static Queue CLIENT_SIDE_LIST = new ConcurrentLinkedQueue(); + + private final static AtomicInteger CLIENT_ATOMIC_ID = new AtomicInteger(0); + + private final static AtomicInteger SERVER_ATOMIC_ID = new AtomicInteger(0); + + public final static int getClientId() { + return CLIENT_ATOMIC_ID.getAndIncrement(); + } + + public final static int getServerId() { + return SERVER_ATOMIC_ID.getAndIncrement(); + } +} diff --git a/ratel-landlords/landlords-server/src/main/java/org/nico/trap/landlords/server/SimpleServer.java b/ratel-landlords/landlords-server/src/main/java/org/nico/ratel/landlords/server/SimpleServer.java similarity index 50% rename from ratel-landlords/landlords-server/src/main/java/org/nico/trap/landlords/server/SimpleServer.java rename to ratel-landlords/landlords-server/src/main/java/org/nico/ratel/landlords/server/SimpleServer.java index 58da28f..ab263df 100644 --- a/ratel-landlords/landlords-server/src/main/java/org/nico/trap/landlords/server/SimpleServer.java +++ b/ratel-landlords/landlords-server/src/main/java/org/nico/ratel/landlords/server/SimpleServer.java @@ -1,16 +1,13 @@ -package org.nico.trap.landlords.server; +package org.nico.ratel.landlords.server; import java.net.InetSocketAddress; -import org.nico.trap.landlords.handler.EchoHandler; -import org.nico.trap.landlords.handler.ServerDecoder; +import org.nico.ratel.landlords.server.handler.DefaultChannelInitializer; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; -import io.netty.channel.ChannelInitializer; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; public class SimpleServer { @@ -20,17 +17,11 @@ public class SimpleServer { EventLoopGroup group = new NioEventLoopGroup(); try { - ServerBootstrap b = new ServerBootstrap(); - b.group(group) + ServerBootstrap b = new ServerBootstrap() + .group(group) .channel(NioServerSocketChannel.class) - .localAddress(new InetSocketAddress(8000)) - .childHandler(new ChannelInitializer() { - @Override - protected void initChannel(SocketChannel ch) throws Exception { - ch.pipeline().addLast(new ServerDecoder()); - ch.pipeline().addLast(new EchoHandler()); - } - }); + .localAddress(new InetSocketAddress(ServerContains.PORT)) + .childHandler(new DefaultChannelInitializer()); ChannelFuture f = b.bind().sync(); f.channel().closeFuture().sync(); diff --git a/ratel-landlords/landlords-server/src/main/java/org/nico/ratel/landlords/server/handler/DefaultChannelInitializer.java b/ratel-landlords/landlords-server/src/main/java/org/nico/ratel/landlords/server/handler/DefaultChannelInitializer.java new file mode 100644 index 0000000..7b821bf --- /dev/null +++ b/ratel-landlords/landlords-server/src/main/java/org/nico/ratel/landlords/server/handler/DefaultChannelInitializer.java @@ -0,0 +1,35 @@ +package org.nico.ratel.landlords.server.handler; + +import org.nico.ratel.landlords.entity.ClientSide; +import org.nico.ratel.landlords.enums.ClientStatus; +import org.nico.ratel.landlords.handler.DefaultDecoder; +import org.nico.ratel.landlords.server.ServerContains; +import org.nico.ratel.landlords.view.ViewPrinter; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.socket.SocketChannel; +import io.netty.handler.codec.bytes.ByteArrayEncoder; + +public class DefaultChannelInitializer extends ChannelInitializer{ + + @Override + public void handlerAdded(ChannelHandlerContext ctx) throws Exception { + ClientSide clientSide = new ClientSide(); + clientSide.setId(ServerContains.getClientId()); + clientSide.setStatus(ClientStatus.TO_CHOOSE); + clientSide.setChannel(ctx.channel()); + ServerContains.CLIENT_SIDE_LIST.add(clientSide); + + ViewPrinter.view("One client join nico landlord world "); + } + + @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()); + } +} diff --git a/ratel-landlords/landlords-server/src/main/java/org/nico/trap/landlords/handler/ServerDecoder.java b/ratel-landlords/landlords-server/src/main/java/org/nico/ratel/landlords/server/handler/ServerDecoder.java similarity index 100% rename from ratel-landlords/landlords-server/src/main/java/org/nico/trap/landlords/handler/ServerDecoder.java rename to ratel-landlords/landlords-server/src/main/java/org/nico/ratel/landlords/server/handler/ServerDecoder.java diff --git a/ratel-landlords/landlords-server/src/main/java/org/nico/ratel/landlords/server/handler/TransferHandler.java b/ratel-landlords/landlords-server/src/main/java/org/nico/ratel/landlords/server/handler/TransferHandler.java new file mode 100644 index 0000000..bf7b670 --- /dev/null +++ b/ratel-landlords/landlords-server/src/main/java/org/nico/ratel/landlords/server/handler/TransferHandler.java @@ -0,0 +1,31 @@ +package org.nico.ratel.landlords.server.handler; + +import org.nico.ratel.landlords.entity.ClientTransferData; +import org.nico.ratel.landlords.entity.ServerTransferData; +import org.nico.ratel.landlords.enums.ServerEventCode; +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; + System.out.println(new String(bs)); + ClientTransferData clientTransferData = TransferProtocolUtils.unserialize(bs, ClientTransferData.class); + System.out.println(clientTransferData.getData()); + System.out.println(clientTransferData.getServerId()); + System.out.println(clientTransferData.getCode()); + + ServerTransferData serverTransferData = new ServerTransferData(); + serverTransferData.setCode(ServerEventCode.CODE_INTO); + serverTransferData.setData("ok"); + + byte[] to = TransferProtocolUtils.serialize(serverTransferData); + ctx.writeAndFlush(to); + } + +} diff --git a/ratel-landlords/landlords-server/src/main/java/org/nico/trap/landlords/handler/EchoHandler.java b/ratel-landlords/landlords-server/src/main/java/org/nico/trap/landlords/handler/EchoHandler.java deleted file mode 100644 index fec486c..0000000 --- a/ratel-landlords/landlords-server/src/main/java/org/nico/trap/landlords/handler/EchoHandler.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.nico.trap.landlords.handler; - -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; - -public class EchoHandler extends ChannelInboundHandlerAdapter{ - - @Override - public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { - System.out.println( - "Server received: " + msg); - ctx.writeAndFlush("ok"); - } - -} diff --git a/ratel-landlords/pom.xml b/ratel-landlords/pom.xml index 45b12c0..f9271ae 100644 --- a/ratel-landlords/pom.xml +++ b/ratel-landlords/pom.xml @@ -52,6 +52,11 @@ io.netty netty-all + + com.google.protobuf + protobuf-java + 3.6.1 +