From e11b976bbd93d419551bd0d8efebd31ae57105e2 Mon Sep 17 00:00:00 2001 From: doveeeee Date: Tue, 13 Jul 2021 19:23:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=95=B4=E4=BD=93=E9=87=8D?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ntEventListener_CODE_SHOW_OPTIONS_PVE.java | 29 +- ...ntEventListener_CODE_SHOW_OPTIONS_PVP.java | 99 +-- .../handler/ProtobufTransferHandler.java | 48 +- .../client/handler/SecondProtobufCodec.java | 4 +- .../ratel/landlords/helper/PokerHelper.java | 571 +++++++++--------- .../helper/tests/PokerHelperTest.java | 361 +++++------ .../ServerEventListener_CODE_CLIENT_EXIT.java | 33 +- ...ventListener_CODE_CLIENT_NICKNAME_SET.java | 10 +- ...rverEventListener_CODE_CLIENT_OFFLINE.java | 37 +- ...ventListener_CODE_GAME_LANDLORD_ELECT.java | 135 +++-- ...verEventListener_CODE_GAME_POKER_PLAY.java | 188 +++--- .../ServerEventListener_CODE_ROOM_CREATE.java | 7 +- ...verEventListener_CODE_ROOM_CREATE_PVE.java | 85 ++- .../ServerEventListener_CODE_ROOM_JOIN.java | 101 ++-- .../handler/ProtobufTransferHandler.java | 64 +- .../landlords/server/timer/RoomClearTask.java | 181 +++--- 16 files changed, 964 insertions(+), 989 deletions(-) diff --git a/landlords-client/src/main/java/org/nico/ratel/landlords/client/event/ClientEventListener_CODE_SHOW_OPTIONS_PVE.java b/landlords-client/src/main/java/org/nico/ratel/landlords/client/event/ClientEventListener_CODE_SHOW_OPTIONS_PVE.java index d293609..50aa9d7 100644 --- a/landlords-client/src/main/java/org/nico/ratel/landlords/client/event/ClientEventListener_CODE_SHOW_OPTIONS_PVE.java +++ b/landlords-client/src/main/java/org/nico/ratel/landlords/client/event/ClientEventListener_CODE_SHOW_OPTIONS_PVE.java @@ -8,7 +8,7 @@ import org.nico.ratel.landlords.utils.OptionsUtils; import io.netty.channel.Channel; -public class ClientEventListener_CODE_SHOW_OPTIONS_PVE extends ClientEventListener{ +public class ClientEventListener_CODE_SHOW_OPTIONS_PVE extends ClientEventListener { @Override public void call(Channel channel, String data) { @@ -18,23 +18,20 @@ public class ClientEventListener_CODE_SHOW_OPTIONS_PVE extends ClientEventListen SimplePrinter.printNotice("3. Hard Mode"); SimplePrinter.printNotice("Please select an option above (enter [back|b] to return to options list)"); String line = SimpleWriter.write("pve"); - + if(line.equalsIgnoreCase("back") || line.equalsIgnoreCase("b")) { get(ClientEventCode.CODE_SHOW_OPTIONS).call(channel, data); - }else { - int choose = OptionsUtils.getOptions(line); - - if(0 < choose && choose < 4) { - initLastSellInfo(); - pushToServer(channel, ServerEventCode.CODE_ROOM_CREATE_PVE, String.valueOf(choose)); - }else { - SimplePrinter.printNotice("Invalid option, please choose again:"); - call(channel, data); - } + return; } - + + int choose = OptionsUtils.getOptions(line); + + if (choose < 0 || choose >= 4) { + SimplePrinter.printNotice("Invalid option, please choose again:"); + call(channel, data); + return; + } + initLastSellInfo(); + pushToServer(channel, ServerEventCode.CODE_ROOM_CREATE_PVE, String.valueOf(choose)); } - - - } diff --git a/landlords-client/src/main/java/org/nico/ratel/landlords/client/event/ClientEventListener_CODE_SHOW_OPTIONS_PVP.java b/landlords-client/src/main/java/org/nico/ratel/landlords/client/event/ClientEventListener_CODE_SHOW_OPTIONS_PVP.java index 572e378..06a6f46 100644 --- a/landlords-client/src/main/java/org/nico/ratel/landlords/client/event/ClientEventListener_CODE_SHOW_OPTIONS_PVP.java +++ b/landlords-client/src/main/java/org/nico/ratel/landlords/client/event/ClientEventListener_CODE_SHOW_OPTIONS_PVP.java @@ -8,7 +8,7 @@ import org.nico.ratel.landlords.utils.OptionsUtils; import io.netty.channel.Channel; -public class ClientEventListener_CODE_SHOW_OPTIONS_PVP extends ClientEventListener{ +public class ClientEventListener_CODE_SHOW_OPTIONS_PVP extends ClientEventListener { @Override public void call(Channel channel, String data) { @@ -19,54 +19,67 @@ public class ClientEventListener_CODE_SHOW_OPTIONS_PVP extends ClientEventListen SimplePrinter.printNotice("4. Spectate Game"); SimplePrinter.printNotice("Please select an option above (enter [back|b] to return to options list)"); String line = SimpleWriter.write("pvp"); - - if(line.equalsIgnoreCase("back") || line.equalsIgnoreCase("b")) { - get(ClientEventCode.CODE_SHOW_OPTIONS).call(channel, data); - }else { - int choose = OptionsUtils.getOptions(line); - - if(choose == 1) { - pushToServer(channel, ServerEventCode.CODE_ROOM_CREATE, null); - }else if(choose == 2){ - pushToServer(channel, ServerEventCode.CODE_GET_ROOMS, null); - }else if(choose == 3){ - SimplePrinter.printNotice("Please enter the room id you wish to join (enter [back|b] to return to options list)"); - line = SimpleWriter.write("roomid"); - - if(line.equalsIgnoreCase("back") || line.equalsIgnoreCase("b")) { - call(channel, data); - }else { - int option = OptionsUtils.getOptions(line); - if(line == null || option < 1) { - SimplePrinter.printNotice("Invalid option, please choose again:"); - call(channel, data); - }else{ - pushToServer(channel, ServerEventCode.CODE_ROOM_JOIN, String.valueOf(option)); - } - } - } else if (choose == 4) { - SimplePrinter.printNotice("Please enter the room id you want to spectate (enter [back] to return to options list)"); - line = SimpleWriter.write("roomid"); + if (line == null) { + SimplePrinter.printNotice("Invalid options, please choose again:"); + call(channel, data); + return; + } - if(line.equalsIgnoreCase("back") || line.equalsIgnoreCase("b")) { - call(channel, data); - }else { - int option = OptionsUtils.getOptions(line); - if(line == null || option < 1) { - SimplePrinter.printNotice("Invalid option, please choose again:"); - call(channel, data); - }else{ - pushToServer(channel, ServerEventCode.CODE_GAME_WATCH, String.valueOf(option)); - } - } - } else { + if (line.equalsIgnoreCase("BACK") || line.equalsIgnoreCase("b")) { + get(ClientEventCode.CODE_SHOW_OPTIONS).call(channel, data); + return; + } + + int choose = OptionsUtils.getOptions(line); + switch (choose) { + case 1: + pushToServer(channel, ServerEventCode.CODE_ROOM_CREATE, null); + break; + case 2: + pushToServer(channel, ServerEventCode.CODE_GET_ROOMS, null); + break; + case 3: + handleJoinRoom(channel, data); + break; + case 4: + handleJoinRoom(channel, data, true); + break; + default: SimplePrinter.printNotice("Invalid option, please choose again:"); call(channel, data); - } } - } + private void parseInvalid(Channel channel, String data) { + SimplePrinter.printNotice("Invalid options, please choose again:"); + call(channel, data); + } + private void handleJoinRoom(Channel channel, String data) { + handleJoinRoom(channel, data, false); + } + private void handleJoinRoom(Channel channel, String data, Boolean watchMode) { + String notice = String.format("Please enter the room id you want to %s (enter [back|b] return options list)", watchMode ? "spectate" : "join"); + + SimplePrinter.printNotice(notice); + String line = SimpleWriter.write("roomid"); + if (line == null) { + parseInvalid(channel, data); + return; + } + + if (line.equalsIgnoreCase("BACK") || line.equalsIgnoreCase("b")) { + call(channel, data); + return; + } + + int option = OptionsUtils.getOptions(line); + if (option < 1) { + parseInvalid(channel, data); + return; + } + + pushToServer(channel, watchMode? ServerEventCode.CODE_GAME_WATCH : ServerEventCode.CODE_ROOM_JOIN, String.valueOf(option)); + } } diff --git a/landlords-client/src/main/java/org/nico/ratel/landlords/client/handler/ProtobufTransferHandler.java b/landlords-client/src/main/java/org/nico/ratel/landlords/client/handler/ProtobufTransferHandler.java index 6230725..c392920 100644 --- a/landlords-client/src/main/java/org/nico/ratel/landlords/client/handler/ProtobufTransferHandler.java +++ b/landlords-client/src/main/java/org/nico/ratel/landlords/client/handler/ProtobufTransferHandler.java @@ -17,44 +17,42 @@ import io.netty.handler.timeout.IdleStateEvent; import java.util.HashMap; import java.util.Map; -public class ProtobufTransferHandler extends ChannelInboundHandlerAdapter{ +public class ProtobufTransferHandler extends ChannelInboundHandlerAdapter { @Override - public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + public void channelRead(ChannelHandlerContext ctx, Object msg) { - if(msg instanceof ClientTransferDataProtoc) { + if (msg instanceof ClientTransferDataProtoc) { ClientTransferDataProtoc clientTransferData = (ClientTransferDataProtoc) msg; - if(clientTransferData.getInfo() != null && ! clientTransferData.getInfo().isEmpty()) { + if (!clientTransferData.getInfo().isEmpty()) { SimplePrinter.printNotice(clientTransferData.getInfo()); } ClientEventCode code = ClientEventCode.valueOf(clientTransferData.getCode()); - if(code != null) { - if (User.INSTANCE.isWatching()) { - Map wrapMap = new HashMap<>(3); - wrapMap.put("code", code); - wrapMap.put("data", clientTransferData.getData()); + if (User.INSTANCE.isWatching()) { + Map wrapMap = new HashMap<>(3); + wrapMap.put("code", code); + wrapMap.put("data", clientTransferData.getData()); - ClientEventListener.get(ClientEventCode.CODE_GAME_WATCH).call(ctx.channel(), Noson.reversal(wrapMap)); - } else { - ClientEventListener.get(code).call(ctx.channel(), clientTransferData.getData()); - } + ClientEventListener.get(ClientEventCode.CODE_GAME_WATCH).call(ctx.channel(), Noson.reversal(wrapMap)); + } else { + ClientEventListener.get(code).call(ctx.channel(), clientTransferData.getData()); } } } - @Override - public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { - if (evt instanceof IdleStateEvent) { - IdleStateEvent event = (IdleStateEvent) evt; - if (event.state() == IdleState.WRITER_IDLE) { - ChannelUtils.pushToServer(ctx.channel(), ServerEventCode.CODE_CLIENT_HEAD_BEAT, "heartbeat"); - } - } - } - @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { - if(cause instanceof java.io.IOException) { + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) { + if (evt instanceof IdleStateEvent) { + IdleStateEvent event = (IdleStateEvent) evt; + if (event.state() == IdleState.WRITER_IDLE) { + ChannelUtils.pushToServer(ctx.channel(), ServerEventCode.CODE_CLIENT_HEAD_BEAT, "heartbeat"); + } + } + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { + if (cause instanceof java.io.IOException) { SimplePrinter.printNotice("The network is not good or did not operate for a long time, has been offline"); System.exit(0); } diff --git a/landlords-client/src/main/java/org/nico/ratel/landlords/client/handler/SecondProtobufCodec.java b/landlords-client/src/main/java/org/nico/ratel/landlords/client/handler/SecondProtobufCodec.java index 26a3fa4..7f2c968 100644 --- a/landlords-client/src/main/java/org/nico/ratel/landlords/client/handler/SecondProtobufCodec.java +++ b/landlords-client/src/main/java/org/nico/ratel/landlords/client/handler/SecondProtobufCodec.java @@ -12,12 +12,12 @@ import io.netty.handler.codec.MessageToMessageCodec; public class SecondProtobufCodec extends MessageToMessageCodec { @Override - protected void encode(ChannelHandlerContext ctx, MessageLite msg, List out) throws Exception { + protected void encode(ChannelHandlerContext ctx, MessageLite msg, List out) { out.add(msg); } @Override - protected void decode(ChannelHandlerContext ctx, ClientTransferDataProtoc msg, List out) throws Exception { + protected void decode(ChannelHandlerContext ctx, ClientTransferDataProtoc msg, List out) { out.add(msg); } diff --git a/landlords-common/src/main/java/org/nico/ratel/landlords/helper/PokerHelper.java b/landlords-common/src/main/java/org/nico/ratel/landlords/helper/PokerHelper.java index 74c3a89..edeb36d 100644 --- a/landlords-common/src/main/java/org/nico/ratel/landlords/helper/PokerHelper.java +++ b/landlords-common/src/main/java/org/nico/ratel/landlords/helper/PokerHelper.java @@ -53,10 +53,10 @@ public class PokerHelper { } } - public static void sortPoker(List pokers){ - Collections.sort(pokers, pokerComparator); + public static void sortPoker(List pokers) { + pokers.sort(pokerComparator); } - + public static List clonePokers(List pokers){ List newPokers = new ArrayList(pokers.size()); for(Poker poker: pokers) { @@ -64,7 +64,7 @@ public class PokerHelper { } return newPokers; } - + public static List validSells(PokerSell lastPokerSell, List pokers) { List sells = PokerHelper.parsePokerSells(pokers); if(lastPokerSell == null) { @@ -96,22 +96,23 @@ public class PokerHelper { List copyList = new ArrayList<>(pokers.size()); copyList.addAll(pokers); int[] indexes = new int[options.length]; - for(int index = 0; index < options.length; index ++) { + for (int index = 0; index < options.length; index++) { char option = options[index]; boolean isTarget = false; - for(int pi = 0; pi < copyList.size(); pi ++) { + for (int pi = 0; pi < copyList.size(); pi++) { Poker poker = copyList.get(pi); - if(poker != null) { - if(Arrays.asList(poker.getLevel().getAlias()).contains(option)) { - isTarget = true; - //Index start from 1, not 0 - indexes[index] = pi + 1; - copyList.set(pi, null); - break; - } + if (poker == null) { + continue; + } + if (Arrays.asList(poker.getLevel().getAlias()).contains(option)) { + isTarget = true; + //Index start from 1, not 0 + indexes[index] = pi + 1; + copyList.set(pi, null); + break; } } - if(! isTarget) { + if (!isTarget) { return null; } } @@ -119,136 +120,131 @@ public class PokerHelper { return indexes; } - public static boolean checkPokerIndex(int[] indexes, List pokers){ - boolean access = true; - if(indexes == null || indexes.length == 0) { - access = false; - }else { - for(int index: indexes){ - if(index > pokers.size() || index < 1){ - access = false; - } + public static boolean checkPokerIndex(int[] indexes, List pokers) { + if (indexes == null || indexes.length == 0) { + return false; + } + for (int index : indexes) { + if (index > pokers.size() || index < 1) { + return false; } } - return access; + return true; } public static PokerSell checkPokerType(List pokers) { + if (pokers == null || pokers.isEmpty()) { + return new PokerSell(SellType.ILLEGAL, null, -1); + } + sortPoker(pokers); - if(pokers != null && ! pokers.isEmpty()) { - sortPoker(pokers); + int[] levelTable = new int[20]; + for (Poker poker : pokers) { + levelTable[poker.getLevel().getLevel()]++; + } - int[] levelTable = new int[20]; - for(Poker poker: pokers) { - levelTable[poker.getLevel().getLevel()] ++; + int startIndex = -1; + int endIndex = -1; + int count = 0; + + int singleCount = 0; + int doubleCount = 0; + int threeCount = 0; + int threeStartIndex = -1; + int threeEndIndex = -1; + int fourCount = 0; + int fourStartIndex = -1; + int fourEndIndex = -1; + for (int index = 0; index < levelTable.length; index++) { + int value = levelTable[index]; + if (value == 0) { + continue; } + endIndex = index; + count++; + if (startIndex == -1) { + startIndex = index; + } + if (value == 1) { + singleCount++; + } else if (value == 2) { + doubleCount++; + } else if (value == 3) { + if (threeStartIndex == -1) { + threeStartIndex = index; + } + threeEndIndex = index; + threeCount++; + } else if (value == 4) { + if (fourStartIndex == -1) { + fourStartIndex = index; + } + fourEndIndex = index; + fourCount++; + } + } - int startIndex = -1; - int endIndex = -1; - int count = 0; + if (singleCount == doubleCount && singleCount == threeCount && singleCount == 0 && fourCount == 1) { + return new PokerSell(SellType.BOMB, pokers, startIndex); + } - int singleCount = 0; - int doubleCount = 0; - int threeCount = 0; - int threeStartIndex = -1; - int threeEndIndex = -1; - int fourCount = 0; - int fourStartIndex = -1; - int fourEndIndex = -1; - for(int index = 0; index < levelTable.length; index ++) { - int value = levelTable[index]; - if(value != 0) { - endIndex = index; - count ++; - if(startIndex == -1) { - startIndex = index; - } - if(value == 1) { - singleCount ++; - }else if(value == 2) { - doubleCount ++; - }else if(value == 3) { - if(threeStartIndex == -1) { - threeStartIndex = index; - } - threeEndIndex = index; - threeCount ++; - }else if(value == 4) { - if(fourStartIndex == -1) { - fourStartIndex = index; - } - fourEndIndex = index; - fourCount ++; - } + if (singleCount == 2 && startIndex == PokerLevel.LEVEL_SMALL_KING.getLevel() && endIndex == PokerLevel.LEVEL_BIG_KING.getLevel()) { + return new PokerSell(SellType.KING_BOMB, pokers, PokerLevel.LEVEL_SMALL_KING.getLevel()); + } + + if (startIndex == endIndex) { + if (levelTable[startIndex] == 1) { + return new PokerSell(SellType.SINGLE, pokers, startIndex); + } else if (levelTable[startIndex] == 2) { + return new PokerSell(SellType.DOUBLE, pokers, startIndex); + } else if (levelTable[startIndex] == 3) { + return new PokerSell(SellType.THREE, pokers, startIndex); + } + } + if (endIndex - startIndex == count - 1 && endIndex < PokerLevel.LEVEL_2.getLevel()) { + if (levelTable[startIndex] == 1 && singleCount > 4 && doubleCount + threeCount + fourCount == 0) { + return new PokerSell(SellType.SINGLE_STRAIGHT, pokers, endIndex); + } else if (levelTable[startIndex] == 2 && doubleCount > 2 && singleCount + threeCount + fourCount == 0) { + return new PokerSell(SellType.DOUBLE_STRAIGHT, pokers, endIndex); + } else if (levelTable[startIndex] == 3 && threeCount > 1 && doubleCount + singleCount + fourCount == 0) { + return new PokerSell(SellType.THREE_STRAIGHT, pokers, endIndex); + } else if (levelTable[startIndex] == 4 && fourCount > 1 && doubleCount + threeCount + singleCount == 0) { + return new PokerSell(SellType.FOUR_STRAIGHT, pokers, endIndex); + } + } + + if (threeCount != 0) { + if (singleCount != 0 && singleCount == threeCount && doubleCount == 0 && fourCount == 0) { + if (threeCount == 1) { + return new PokerSell(SellType.THREE_ZONES_SINGLE, pokers, threeEndIndex); + } + if (threeEndIndex - threeStartIndex + 1 == threeCount && threeEndIndex < PokerLevel.LEVEL_2.getLevel()) { + return new PokerSell(SellType.THREE_STRAIGHT_WITH_SINGLE, pokers, threeEndIndex); + } + } else if (doubleCount != 0 && doubleCount == threeCount && singleCount == 0 && fourCount == 0) { + if (threeCount == 1) { + return new PokerSell(SellType.THREE_ZONES_DOUBLE, pokers, threeEndIndex); + } + if (threeEndIndex - threeStartIndex + 1 == threeCount && threeEndIndex < PokerLevel.LEVEL_2.getLevel()) { + return new PokerSell(SellType.FOUR_STRAIGHT_WITH_DOUBLE, pokers, threeEndIndex); } } + } - if(singleCount == doubleCount && singleCount == threeCount && singleCount == 0 && fourCount == 1) { - return new PokerSell(SellType.BOMB, pokers, startIndex); - } - - if(singleCount == 2 && startIndex == PokerLevel.LEVEL_SMALL_KING.getLevel() && endIndex == PokerLevel.LEVEL_BIG_KING.getLevel()) { - return new PokerSell(SellType.KING_BOMB, pokers, PokerLevel.LEVEL_SMALL_KING.getLevel()); - } - - if(startIndex == endIndex) { - if(levelTable[startIndex] == 1) { - return new PokerSell(SellType.SINGLE, pokers, startIndex); - }else if(levelTable[startIndex] == 2) { - return new PokerSell(SellType.DOUBLE, pokers, startIndex); - }else if(levelTable[startIndex] == 3) { - return new PokerSell(SellType.THREE, pokers, startIndex); + if (fourCount != 0) { + if (singleCount != 0 && singleCount == fourCount * 2 && doubleCount == 0 && threeCount == 0) { + if (fourCount == 1) { + return new PokerSell(SellType.FOUR_ZONES_SINGLE, pokers, fourEndIndex); } - } - if(endIndex - startIndex == count - 1 && endIndex < PokerLevel.LEVEL_2.getLevel()) { - if(levelTable[startIndex] == 1 && singleCount > 4 && doubleCount + threeCount + fourCount == 0) { - return new PokerSell(SellType.SINGLE_STRAIGHT, pokers, endIndex); - }else if(levelTable[startIndex] == 2 && doubleCount > 2 && singleCount + threeCount + fourCount == 0) { - return new PokerSell(SellType.DOUBLE_STRAIGHT, pokers, endIndex); - }else if(levelTable[startIndex] == 3 && threeCount > 1 && doubleCount + singleCount + fourCount == 0) { - return new PokerSell(SellType.THREE_STRAIGHT, pokers, endIndex); - }else if(levelTable[startIndex] == 4 && fourCount > 1 && doubleCount + threeCount + singleCount == 0) { - return new PokerSell(SellType.FOUR_STRAIGHT, pokers, endIndex); + if (fourEndIndex - fourStartIndex + 1 == fourCount && fourEndIndex < PokerLevel.LEVEL_2.getLevel()) { + return new PokerSell(SellType.FOUR_STRAIGHT_WITH_SINGLE, pokers, fourEndIndex); } - } - - if(threeCount != 0) { - if(singleCount != 0 && singleCount == threeCount && doubleCount == 0 && fourCount == 0) { - if(threeCount == 1) { - return new PokerSell(SellType.THREE_ZONES_SINGLE, pokers, threeEndIndex); - }else { - if(threeEndIndex - threeStartIndex + 1 == threeCount && threeEndIndex < PokerLevel.LEVEL_2.getLevel()) { - return new PokerSell(SellType.THREE_STRAIGHT_WITH_SINGLE, pokers, threeEndIndex); - } - } - }else if(doubleCount != 0 && doubleCount == threeCount && singleCount == 0 && fourCount == 0) { - if(threeCount == 1) { - return new PokerSell(SellType.THREE_ZONES_DOUBLE, pokers, threeEndIndex); - }else { - if(threeEndIndex - threeStartIndex + 1 == threeCount && threeEndIndex < PokerLevel.LEVEL_2.getLevel()) { - return new PokerSell(SellType.FOUR_STRAIGHT_WITH_DOUBLE, pokers, threeEndIndex); - } - } + } else if (doubleCount != 0 && doubleCount == fourCount * 2 && singleCount == 0 && threeCount == 0) { + if (fourCount == 1) { + return new PokerSell(SellType.FOUR_ZONES_DOUBLE, pokers, fourEndIndex); } - } - - if(fourCount != 0) { - if(singleCount != 0 && singleCount == fourCount * 2 && doubleCount == 0 && threeCount == 0) { - if(fourCount == 1) { - return new PokerSell(SellType.FOUR_ZONES_SINGLE, pokers, fourEndIndex); - }else { - if(fourEndIndex - fourStartIndex + 1 == fourCount && fourEndIndex < PokerLevel.LEVEL_2.getLevel()) { - return new PokerSell(SellType.FOUR_STRAIGHT_WITH_SINGLE, pokers, fourEndIndex); - } - } - }else if(doubleCount != 0 && doubleCount == fourCount * 2 && singleCount == 0 && threeCount == 0) { - if(fourCount == 1) { - return new PokerSell(SellType.FOUR_ZONES_DOUBLE, pokers, fourEndIndex); - }else { - if(fourEndIndex - fourStartIndex + 1 == fourCount && fourEndIndex < PokerLevel.LEVEL_2.getLevel()) { - return new PokerSell(SellType.FOUR_STRAIGHT_WITH_DOUBLE, pokers, fourEndIndex); - } - } + if (fourEndIndex - fourStartIndex + 1 == fourCount && fourEndIndex < PokerLevel.LEVEL_2.getLevel()) { + return new PokerSell(SellType.FOUR_STRAIGHT_WITH_DOUBLE, pokers, fourEndIndex); } } } @@ -256,37 +252,37 @@ public class PokerHelper { } public static int parseScore(SellType sellType, int level) { - if(sellType == SellType.BOMB) { + if (sellType == SellType.BOMB) { return level * 4 + 999; - }else if(sellType == SellType.KING_BOMB) { + } else if (sellType == SellType.KING_BOMB) { return Integer.MAX_VALUE; - }else if(sellType == SellType.SINGLE || sellType == SellType.DOUBLE || sellType == SellType.THREE) { + } else if (sellType == SellType.SINGLE || sellType == SellType.DOUBLE || sellType == SellType.THREE) { return level; - }else if(sellType == SellType.SINGLE_STRAIGHT || sellType == SellType.DOUBLE_STRAIGHT || sellType == SellType.THREE_STRAIGHT || sellType == SellType.FOUR_STRAIGHT) { + } else if (sellType == SellType.SINGLE_STRAIGHT || sellType == SellType.DOUBLE_STRAIGHT || sellType == SellType.THREE_STRAIGHT || sellType == SellType.FOUR_STRAIGHT) { return level; - }else if(sellType == SellType.THREE_ZONES_SINGLE || sellType == SellType.THREE_STRAIGHT_WITH_SINGLE || sellType == SellType.THREE_ZONES_DOUBLE || sellType == SellType.FOUR_STRAIGHT_WITH_DOUBLE) { + } else if (sellType == SellType.THREE_ZONES_SINGLE || sellType == SellType.THREE_STRAIGHT_WITH_SINGLE || sellType == SellType.THREE_ZONES_DOUBLE || sellType == SellType.FOUR_STRAIGHT_WITH_DOUBLE) { return level; - }else if(sellType == SellType.FOUR_ZONES_SINGLE || sellType == SellType.FOUR_STRAIGHT_WITH_SINGLE || sellType == SellType.FOUR_ZONES_DOUBLE || sellType == SellType.FOUR_STRAIGHT_WITH_DOUBLE) { + } else if (sellType == SellType.FOUR_ZONES_SINGLE || sellType == SellType.FOUR_STRAIGHT_WITH_SINGLE || sellType == SellType.FOUR_ZONES_DOUBLE || sellType == SellType.FOUR_STRAIGHT_WITH_DOUBLE) { return level; } return -1; } - public static List getPoker(int[] indexes, List pokers){ + public static List getPoker(int[] indexes, List pokers) { List resultPokers = new ArrayList<>(indexes.length); - for(int index: indexes){ + for (int index : indexes) { resultPokers.add(pokers.get(index - 1)); } sortPoker(resultPokers); return resultPokers; } - public static boolean comparePoker(List pres, List currents){ + public static boolean comparePoker(List pres, List currents) { return true; } - public static List> distributePoker(){ + public static List> distributePoker() { Collections.shuffle(basePokers); List> pokersList = new ArrayList>(); List pokers1 = new ArrayList<>(17); @@ -301,7 +297,7 @@ public class PokerHelper { pokersList.add(pokers2); pokersList.add(pokers3); pokersList.add(pokers4); - for(List pokers: pokersList) { + for (List pokers : pokersList) { sortPoker(pokers); } return pokersList; @@ -309,50 +305,51 @@ public class PokerHelper { public static String printPoker(List pokers) { sortPoker(pokers); - switch(pokerPrinterType){ - case 0: - return buildHandStringSharp(pokers); - case 1: - return buildHandStringRounded(pokers); - case 2: - return textOnly(pokers); - case 3: - return textOnlyNoType(pokers); - default: - return buildHandStringSharp(pokers); + switch (pokerPrinterType) { + case 0: + return buildHandStringSharp(pokers); + case 1: + return buildHandStringRounded(pokers); + case 2: + return textOnly(pokers); + case 3: + return textOnlyNoType(pokers); + default: + return buildHandStringSharp(pokers); } } - private static String buildHandStringSharp(List pokers){ - StringBuilder builder = new StringBuilder(); - if(pokers != null && pokers.size() > 0) { - for(int index = 0; index < pokers.size(); index ++) { - if(index == 0) { + private static String buildHandStringSharp(List pokers) { + StringBuilder builder = new StringBuilder(); + if (pokers != null && pokers.size() > 0) { + + for (int index = 0; index < pokers.size(); index++) { + if (index == 0) { builder.append("┌──┐"); - }else { + } else { builder.append("──┐"); } } builder.append(System.lineSeparator()); - for(int index = 0; index < pokers.size(); index ++) { - if(index == 0) { + for (int index = 0; index < pokers.size(); index++) { + if (index == 0) { builder.append("│"); } String name = pokers.get(index).getLevel().getName(); - builder.append(name + (name.length() == 1 ? " " : "" ) + "|"); + builder.append(name).append(name.length() == 1 ? " " : "").append("|"); } builder.append(System.lineSeparator()); - for(int index = 0; index < pokers.size(); index ++) { - if(index == 0) { + for (int index = 0; index < pokers.size(); index++) { + if (index == 0) { builder.append("│"); } - builder.append(pokers.get(index).getType().getName() + " |"); + builder.append(pokers.get(index).getType().getName()).append(" |"); } builder.append(System.lineSeparator()); - for(int index = 0; index < pokers.size(); index ++) { - if(index == 0) { + for (int index = 0; index < pokers.size(); index++) { + if (index == 0) { builder.append("└──┘"); } else { builder.append("──┘"); @@ -361,35 +358,36 @@ public class PokerHelper { } return builder.toString(); } - private static String buildHandStringRounded(List pokers){ - StringBuilder builder = new StringBuilder(); - if(pokers != null && pokers.size() > 0) { - for(int index = 0; index < pokers.size(); index ++) { - if(index == 0) { + private static String buildHandStringRounded(List pokers) { + StringBuilder builder = new StringBuilder(); + if (pokers != null && pokers.size() > 0) { + + for (int index = 0; index < pokers.size(); index++) { + if (index == 0) { builder.append("┌──╮"); - }else { + } else { builder.append("──╮"); } } builder.append(System.lineSeparator()); - for(int index = 0; index < pokers.size(); index ++) { - if(index == 0) { + for (int index = 0; index < pokers.size(); index++) { + if (index == 0) { builder.append("│"); } String name = pokers.get(index).getLevel().getName(); - builder.append(name + (name.length() == 1 ? " " : "" ) + "|"); + builder.append(name).append(name.length() == 1 ? " " : "").append("|"); } builder.append(System.lineSeparator()); - for(int index = 0; index < pokers.size(); index ++) { - if(index == 0) { + for (int index = 0; index < pokers.size(); index++) { + if (index == 0) { builder.append("│"); } - builder.append(pokers.get(index).getType().getName() + " |"); + builder.append(pokers.get(index).getType().getName()).append(" |"); } builder.append(System.lineSeparator()); - for(int index = 0; index < pokers.size(); index ++) { - if(index == 0) { + for (int index = 0; index < pokers.size(); index++) { + if (index == 0) { builder.append("└──╯"); } else { builder.append("──╯"); @@ -399,59 +397,60 @@ public class PokerHelper { return builder.toString(); } - private static String textOnly(List pokers){ + private static String textOnly(List pokers) { StringBuilder builder = new StringBuilder(); - if(pokers != null && pokers.size() > 0) { - for(int index = 0; index < pokers.size(); index ++) { - String name = pokers.get(index).getLevel().getName(); - String type = pokers.get(index).getType().getName(); + if (pokers != null && pokers.size() > 0) { + for (Poker poker : pokers) { + String name = poker.getLevel().getName(); + String type = poker.getType().getName(); - builder.append(name + type); - } - } - return builder.toString(); - } - public static String textOnlyNoType(List pokers){ - StringBuilder builder = new StringBuilder(); - if(pokers != null && pokers.size() > 0) { - for(int index = 0; index < pokers.size(); index ++) { - String name = pokers.get(index).getLevel().getName(); - builder.append(name + " "); + builder.append(name).append(type); } } return builder.toString(); } - public static int parsePokerColligationScore(List pokers){ + public static String textOnlyNoType(List pokers) { + StringBuilder builder = new StringBuilder(); + if (pokers != null && pokers.size() > 0) { + for (Poker poker : pokers) { + String name = poker.getLevel().getName(); + builder.append(name).append(" "); + } + } + return builder.toString(); + } + + public static int parsePokerColligationScore(List pokers) { int score = 0; int count = 0; int increase = 0; int lastLevel = -1; - if(pokers != null && ! pokers.isEmpty()){ - for(int index = 0; index < pokers.size(); index ++){ + if (pokers != null && !pokers.isEmpty()) { + for (int index = 0; index < pokers.size(); index++) { int level = pokers.get(index).getLevel().getLevel(); - if(lastLevel == -1){ - increase ++; - count ++; + if (lastLevel == -1) { + increase++; + count++; score += lastLevel; - }else{ - if(level == lastLevel){ - ++ count; - }else{ + } else { + if (level == lastLevel) { + ++count; + } else { count = 1; } - if(level < PokerLevel.LEVEL_2.getLevel() && level - 1 == lastLevel){ - ++ increase; - }else{ + if (level < PokerLevel.LEVEL_2.getLevel() && level - 1 == lastLevel) { + ++increase; + } else { increase = 1; } score += (count + (increase > 4 ? increase : 0)) * level; } - if(level == PokerLevel.LEVEL_2.getLevel()){ + if (level == PokerLevel.LEVEL_2.getLevel()) { score += level * 2; - }else if(level > PokerLevel.LEVEL_2.getLevel()){ + } else if (level > PokerLevel.LEVEL_2.getLevel()) { score += level * 3; } lastLevel = level; @@ -460,7 +459,7 @@ public class PokerHelper { return score; } - public static List parsePokerSells(List pokers){ + public static List parsePokerSells(List pokers) { List pokerSells = new ArrayList<>(); int size = pokers.size(); @@ -469,27 +468,26 @@ public class PokerHelper { int count = 0; int lastLevel = -1; List sellPokers = new ArrayList<>(4); - for(int index = 0; index < pokers.size(); index ++) { - Poker poker = pokers.get(index); + for (Poker poker : pokers) { int level = poker.getLevel().getLevel(); - if(lastLevel == -1) { - ++ count; - }else { - if(level == lastLevel) { - ++ count; - }else { + if (lastLevel == -1) { + ++count; + } else { + if (level == lastLevel) { + ++count; + } else { count = 1; sellPokers.clear(); } } sellPokers.add(poker); - if(count == 1) { + if (count == 1) { pokerSells.add(new PokerSell(SellType.SINGLE, ListUtils.getList(sellPokers), poker.getLevel().getLevel())); - }else if(count == 2){ + } else if (count == 2) { pokerSells.add(new PokerSell(SellType.DOUBLE, ListUtils.getList(sellPokers), poker.getLevel().getLevel())); - }else if(count == 3){ + } else if (count == 3) { pokerSells.add(new PokerSell(SellType.THREE, ListUtils.getList(sellPokers), poker.getLevel().getLevel())); - }else if(count == 4){ + } else if (count == 4) { pokerSells.add(new PokerSell(SellType.BOMB, ListUtils.getList(sellPokers), poker.getLevel().getLevel())); } @@ -503,63 +501,62 @@ public class PokerHelper { parsePokerSellStraight(pokerSells, SellType.THREE); parsePokerSellStraight(pokerSells, SellType.BOMB); } - + //Shunzi with args { - for(int index = 0; index < pokerSells.size(); index ++) { + for (int index = 0; index < pokerSells.size(); index++) { PokerSell sell = pokerSells.get(index); - if(sell.getSellType() == SellType.THREE) { + if (sell.getSellType() == SellType.THREE) { parseArgs(pokerSells, sell, 1, SellType.SINGLE, SellType.THREE_ZONES_SINGLE); parseArgs(pokerSells, sell, 1, SellType.DOUBLE, SellType.THREE_ZONES_DOUBLE); - }else if(sell.getSellType() == SellType.BOMB) { + } else if (sell.getSellType() == SellType.BOMB) { parseArgs(pokerSells, sell, 2, SellType.SINGLE, SellType.FOUR_ZONES_SINGLE); parseArgs(pokerSells, sell, 2, SellType.DOUBLE, SellType.FOUR_ZONES_DOUBLE); - }else if(sell.getSellType() == SellType.THREE_STRAIGHT) { + } else if (sell.getSellType() == SellType.THREE_STRAIGHT) { int count = sell.getSellPokers().size() / 3; parseArgs(pokerSells, sell, count, SellType.SINGLE, SellType.THREE_STRAIGHT_WITH_SINGLE); parseArgs(pokerSells, sell, count, SellType.DOUBLE, SellType.THREE_STRAIGHT_WITH_DOUBLE); - }else if(sell.getSellType() == SellType.FOUR_STRAIGHT) { + } else if (sell.getSellType() == SellType.FOUR_STRAIGHT) { int count = (sell.getSellPokers().size() / 4) * 2; parseArgs(pokerSells, sell, count, SellType.SINGLE, SellType.FOUR_STRAIGHT_WITH_SINGLE); parseArgs(pokerSells, sell, count, SellType.DOUBLE, SellType.FOUR_STRAIGHT_WITH_DOUBLE); } } } - + //king boom { - if(size > 1) { - if(pokers.get(size - 1).getLevel() == PokerLevel.LEVEL_BIG_KING && pokers.get(size - 2).getLevel() == PokerLevel.LEVEL_SMALL_KING) { - pokerSells.add(new PokerSell(SellType.KING_BOMB, ListUtils.getList(new Poker[] {pokers.get(size - 2), pokers.get(size - 1)}), PokerLevel.LEVEL_BIG_KING.getLevel())); + if (size > 1) { + if (pokers.get(size - 1).getLevel() == PokerLevel.LEVEL_BIG_KING && pokers.get(size - 2).getLevel() == PokerLevel.LEVEL_SMALL_KING) { + pokerSells.add(new PokerSell(SellType.KING_BOMB, ListUtils.getList(new Poker[]{pokers.get(size - 2), pokers.get(size - 1)}), PokerLevel.LEVEL_BIG_KING.getLevel())); } } } - + return pokerSells; } - + private static void parseArgs(List pokerSells, PokerSell pokerSell, int deep, SellType sellType, SellType targetSellType) { Set existLevelSet = new HashSet<>(); - for(Poker p: pokerSell.getSellPokers()) { + for (Poker p : pokerSell.getSellPokers()) { existLevelSet.add(p.getLevel().getLevel()); } parseArgs(existLevelSet, pokerSells, new HashSet<>(), pokerSell, deep, sellType, targetSellType); } - + private static void parseArgs(Set existLevelSet, List pokerSells, Set> pokersList, PokerSell pokerSell, int deep, SellType sellType, SellType targetSellType) { - if(deep == 0) { - List allPokers = new ArrayList<>(); - allPokers.addAll(pokerSell.getSellPokers()); - for(List ps: pokersList) { + if (deep == 0) { + List allPokers = new ArrayList<>(pokerSell.getSellPokers()); + for (List ps : pokersList) { allPokers.addAll(ps); } pokerSells.add(new PokerSell(targetSellType, allPokers, pokerSell.getCoreLevel())); return; } - - for(int index = 0; index < pokerSells.size(); index ++) { + + for (int index = 0; index < pokerSells.size(); index++) { PokerSell subSell = pokerSells.get(index); - if(subSell.getSellType() == sellType && ! existLevelSet.contains(subSell.getCoreLevel())) { + if (subSell.getSellType() == sellType && !existLevelSet.contains(subSell.getCoreLevel())) { pokersList.add(subSell.getSellPokers()); existLevelSet.add(subSell.getCoreLevel()); parseArgs(existLevelSet, pokerSells, pokersList, pokerSell, deep - 1, sellType, targetSellType); @@ -568,25 +565,25 @@ public class PokerHelper { } } } - + private static void parsePokerSellStraight(List pokerSells, SellType sellType) { - int minLenght = -1; + int minLength = -1; int width = -1; SellType targetSellType = null; - if(sellType == SellType.SINGLE) { - minLenght = 5; + if (sellType == SellType.SINGLE) { + minLength = 5; width = 1; targetSellType = SellType.SINGLE_STRAIGHT; - }else if(sellType == SellType.DOUBLE) { - minLenght = 3; + } else if (sellType == SellType.DOUBLE) { + minLength = 3; width = 2; targetSellType = SellType.DOUBLE_STRAIGHT; - }else if(sellType == SellType.THREE) { - minLenght = 2; + } else if (sellType == SellType.THREE) { + minLength = 2; width = 3; targetSellType = SellType.THREE_STRAIGHT; - }else if(sellType == SellType.BOMB) { - minLenght = 2; + } else if (sellType == SellType.BOMB) { + minLength = 2; width = 4; targetSellType = SellType.FOUR_STRAIGHT; } @@ -594,48 +591,40 @@ public class PokerHelper { int increase_1 = 0; int lastLevel_1 = -1; List sellPokers_1 = new ArrayList<>(4); - for(int index = 0; index < pokerSells.size(); index ++) { + for (int index = 0; index < pokerSells.size(); index++) { PokerSell sell = pokerSells.get(index); - if(sell.getSellType() == sellType) { - int level = sell.getCoreLevel(); - if(lastLevel_1 == -1) { - ++ increase_1; - sellPokers_1.addAll(sell.getSellPokers()); - }else { - if(level - 1 == lastLevel_1 && level != PokerLevel.LEVEL_2.getLevel()) { - ++ increase_1; - sellPokers_1.addAll(sell.getSellPokers()); - }else{ - if(increase_1 >= minLenght) { - for(int s = 0; s <= increase_1 - minLenght; s ++) { - int len = minLenght + s; - for(int subIndex = 0; subIndex <= increase_1 - len; subIndex ++) { - List pokers = ListUtils.getList(sellPokers_1.subList(subIndex * width, (subIndex + len) * width)); - pokerSells.add(new PokerSell(targetSellType, pokers, pokers.get(pokers.size() - 1).getLevel().getLevel())); - } - } - } - increase_1 = 1; - sellPokers_1.clear(); - sellPokers_1.addAll(sell.getSellPokers()); - } - } - lastLevel_1 = level; + if (sell.getSellType() != sellType) { + continue; } - } - if(sellPokers_1 != null) { - if(increase_1 >= minLenght) { - for(int s = 0; s <= increase_1 - minLenght; s ++) { - int len = minLenght + s; - for(int subIndex = 0; subIndex <= increase_1 - len; subIndex ++) { - List pokers = ListUtils.getList(sellPokers_1.subList(subIndex * width, (subIndex + len) * width)); - pokerSells.add(new PokerSell(targetSellType, pokers, pokers.get(pokers.size() - 1).getLevel().getLevel())); - } + int level = sell.getCoreLevel(); + if (lastLevel_1 == -1) { + ++increase_1; + } else { + if (level - 1 == lastLevel_1 && level != PokerLevel.LEVEL_2.getLevel()) { + ++increase_1; + } else { + addPokers(pokerSells, minLength, width, targetSellType, increase_1, sellPokers_1); + + increase_1 = 1; } } - increase_1 = 0; - sellPokers_1.clear(); + sellPokers_1.addAll(sell.getSellPokers()); + lastLevel_1 = level; } + addPokers(pokerSells, minLength, width, targetSellType, increase_1, sellPokers_1); + } + + private static void addPokers(List pokerSells, int minLenght, int width, SellType targetSellType, int increase_1, List sellPokers_1) { + if (increase_1 >= minLenght) { + for (int s = 0; s <= increase_1 - minLenght; s++) { + int len = minLenght + s; + for (int subIndex = 0; subIndex <= increase_1 - len; subIndex++) { + List pokers = ListUtils.getList(sellPokers_1.subList(subIndex * width, (subIndex + len) * width)); + pokerSells.add(new PokerSell(targetSellType, pokers, pokers.get(pokers.size() - 1).getLevel().getLevel())); + } + } + } + sellPokers_1.clear(); } } diff --git a/landlords-common/src/test/java/org/nico/ratel/landlords/helper/tests/PokerHelperTest.java b/landlords-common/src/test/java/org/nico/ratel/landlords/helper/tests/PokerHelperTest.java index d4566dc..36952c0 100644 --- a/landlords-common/src/test/java/org/nico/ratel/landlords/helper/tests/PokerHelperTest.java +++ b/landlords-common/src/test/java/org/nico/ratel/landlords/helper/tests/PokerHelperTest.java @@ -4,6 +4,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.nico.ratel.landlords.entity.Poker; +import org.nico.ratel.landlords.entity.PokerSell; import org.nico.ratel.landlords.enums.PokerLevel; import org.nico.ratel.landlords.enums.PokerType; import org.nico.ratel.landlords.enums.SellType; @@ -13,209 +14,209 @@ import java.util.ArrayList; public class PokerHelperTest { - private ArrayList pokers = new ArrayList<>(); + private ArrayList pokers = new ArrayList<>(); - @Before - public void setUp() { - pokers.add(new Poker(PokerLevel.LEVEL_3, PokerType.BLANK)); - pokers.add(new Poker(PokerLevel.LEVEL_4, PokerType.DIAMOND)); - pokers.add(new Poker(PokerLevel.LEVEL_4, PokerType.DIAMOND)); - pokers.add(new Poker(PokerLevel.LEVEL_5, PokerType.CLUB)); - pokers.add(new Poker(PokerLevel.LEVEL_5, PokerType.CLUB)); - pokers.add(new Poker(PokerLevel.LEVEL_5, PokerType.CLUB)); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.SPADE)); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - } + @Before + public void setUp() { + pokers.add(new Poker(PokerLevel.LEVEL_3, PokerType.BLANK)); + pokers.add(new Poker(PokerLevel.LEVEL_4, PokerType.DIAMOND)); + pokers.add(new Poker(PokerLevel.LEVEL_4, PokerType.DIAMOND)); + pokers.add(new Poker(PokerLevel.LEVEL_5, PokerType.CLUB)); + pokers.add(new Poker(PokerLevel.LEVEL_5, PokerType.CLUB)); + pokers.add(new Poker(PokerLevel.LEVEL_5, PokerType.CLUB)); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.SPADE)); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + } - @Test - public void testComparePoker() { - Assert.assertTrue(PokerHelper.comparePoker(new ArrayList<>(), new ArrayList<>())); - } + @Test + public void testComparePoker() { + Assert.assertTrue(PokerHelper.comparePoker(new ArrayList<>(), new ArrayList<>())); + } - @Test - public void testCheckPokerIndex() { - Assert.assertFalse(PokerHelper.checkPokerIndex(new int[]{}, new ArrayList<>())); - Assert.assertFalse(PokerHelper.checkPokerIndex(new int[]{2, -4_194_302}, new ArrayList<>())); - } + @Test + public void testCheckPokerIndex() { + Assert.assertFalse(PokerHelper.checkPokerIndex(new int[]{}, new ArrayList<>())); + Assert.assertFalse(PokerHelper.checkPokerIndex(new int[]{2, -4_194_302}, new ArrayList<>())); + } - @Test - public void testGetIndexes() { - Assert.assertNull(PokerHelper.getIndexes(new Character[]{'3', '4', '5', '6', '7', '8'}, pokers)); - Assert.assertNotNull(PokerHelper.getIndexes(new Character[]{}, new ArrayList<>())); - Assert.assertEquals(0,PokerHelper.getIndexes(new Character[]{}, new ArrayList<>()).length); - } + @Test + public void testGetIndexes() { + Assert.assertNull(PokerHelper.getIndexes(new Character[]{'3', '4', '5', '6', '7', '8'}, pokers)); + Assert.assertNotNull(PokerHelper.getIndexes(new Character[]{}, new ArrayList<>())); + Assert.assertEquals(0, PokerHelper.getIndexes(new Character[]{}, new ArrayList<>()).length); + } - @Test - public void testGetPoker() { - Assert.assertEquals(PokerLevel.LEVEL_3,PokerHelper.getPoker(new int[]{1, 2}, pokers).get(0).getLevel()); - Assert.assertEquals(PokerType.BLANK,PokerHelper.getPoker(new int[]{1, 2}, pokers).get(0).getType()); - Assert.assertEquals(PokerLevel.LEVEL_4,PokerHelper.getPoker(new int[]{1, 2}, pokers).get(1).getLevel()); - Assert.assertEquals(PokerType.DIAMOND,PokerHelper.getPoker(new int[]{1, 2}, pokers).get(1).getType()); - } + @Test + public void testGetPoker() { + Assert.assertEquals(PokerLevel.LEVEL_3, PokerHelper.getPoker(new int[]{1, 2}, pokers).get(0).getLevel()); + Assert.assertEquals(PokerType.BLANK, PokerHelper.getPoker(new int[]{1, 2}, pokers).get(0).getType()); + Assert.assertEquals(PokerLevel.LEVEL_4, PokerHelper.getPoker(new int[]{1, 2}, pokers).get(1).getLevel()); + Assert.assertEquals(PokerType.DIAMOND, PokerHelper.getPoker(new int[]{1, 2}, pokers).get(1).getType()); + } - @Test - public void testPrintPoker() { - Assert.assertNotNull(PokerHelper.printPoker(pokers)); - } + @Test + public void testPrintPoker() { + Assert.assertNotNull(PokerHelper.printPoker(pokers)); + } - @Test - public void testDistributePoker() { - Assert.assertNotNull(PokerHelper.distributePoker()); - } + @Test + public void testDistributePoker() { + Assert.assertNotNull(PokerHelper.distributePoker()); + } - @Test - public void testCheckPokerType1() { - pokers.clear(); - Assert.assertNull(PokerHelper.checkPokerType(pokers).getSellPokers()); - Assert.assertEquals(-1,PokerHelper.checkPokerType(pokers).getScore()); - Assert.assertEquals(SellType.ILLEGAL,PokerHelper.checkPokerType(pokers).getSellType()); + @Test + public void testCheckPokerType1() { + pokers.clear(); + Assert.assertNull(PokerHelper.checkPokerType(pokers).getSellPokers()); + Assert.assertEquals(-1, PokerHelper.checkPokerType(pokers).getScore()); + Assert.assertEquals(SellType.ILLEGAL, PokerHelper.checkPokerType(pokers).getSellType()); - pokers.add(new Poker(PokerLevel.LEVEL_SMALL_KING, PokerType.BLANK)); - pokers.add(new Poker(PokerLevel.LEVEL_BIG_KING, PokerType.DIAMOND)); - Assert.assertEquals(pokers,PokerHelper.checkPokerType(pokers).getSellPokers()); - Assert.assertEquals(2147483647,PokerHelper.checkPokerType(pokers).getScore()); - Assert.assertEquals(SellType.KING_BOMB,PokerHelper.checkPokerType(pokers).getSellType()); - } + pokers.add(new Poker(PokerLevel.LEVEL_SMALL_KING, PokerType.BLANK)); + pokers.add(new Poker(PokerLevel.LEVEL_BIG_KING, PokerType.DIAMOND)); + Assert.assertEquals(pokers, PokerHelper.checkPokerType(pokers).getSellPokers()); + Assert.assertEquals(2147483647, PokerHelper.checkPokerType(pokers).getScore()); + Assert.assertEquals(SellType.KING_BOMB, PokerHelper.checkPokerType(pokers).getSellType()); + } - @Test - public void testCheckPokerType2() { - pokers.clear(); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - Assert.assertEquals(pokers,PokerHelper.checkPokerType(pokers).getSellPokers()); - Assert.assertEquals(7,PokerHelper.checkPokerType(pokers).getScore()); - Assert.assertEquals(SellType.SINGLE,PokerHelper.checkPokerType(pokers).getSellType()); + @Test + public void testCheckPokerType2() { + pokers.clear(); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + Assert.assertEquals(pokers, PokerHelper.checkPokerType(pokers).getSellPokers()); + Assert.assertEquals(7, PokerHelper.checkPokerType(pokers).getScore()); + Assert.assertEquals(SellType.SINGLE, PokerHelper.checkPokerType(pokers).getSellType()); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - Assert.assertEquals(pokers,PokerHelper.checkPokerType(pokers).getSellPokers()); - Assert.assertEquals(7,PokerHelper.checkPokerType(pokers).getScore()); - Assert.assertEquals(SellType.DOUBLE,PokerHelper.checkPokerType(pokers).getSellType()); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + Assert.assertEquals(pokers, PokerHelper.checkPokerType(pokers).getSellPokers()); + Assert.assertEquals(7, PokerHelper.checkPokerType(pokers).getScore()); + Assert.assertEquals(SellType.DOUBLE, PokerHelper.checkPokerType(pokers).getSellType()); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - Assert.assertEquals(pokers,PokerHelper.checkPokerType(pokers).getSellPokers()); - Assert.assertEquals(7,PokerHelper.checkPokerType(pokers).getScore()); - Assert.assertEquals(SellType.THREE,PokerHelper.checkPokerType(pokers).getSellType()); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + Assert.assertEquals(pokers, PokerHelper.checkPokerType(pokers).getSellPokers()); + Assert.assertEquals(7, PokerHelper.checkPokerType(pokers).getScore()); + Assert.assertEquals(SellType.THREE, PokerHelper.checkPokerType(pokers).getSellType()); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - Assert.assertEquals(pokers,PokerHelper.checkPokerType(pokers).getSellPokers()); - Assert.assertEquals(1027,PokerHelper.checkPokerType(pokers).getScore()); - Assert.assertEquals(SellType.BOMB,PokerHelper.checkPokerType(pokers).getSellType()); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + Assert.assertEquals(pokers, PokerHelper.checkPokerType(pokers).getSellPokers()); + Assert.assertEquals(1027, PokerHelper.checkPokerType(pokers).getScore()); + Assert.assertEquals(SellType.BOMB, PokerHelper.checkPokerType(pokers).getSellType()); - pokers.remove(pokers.size()-1); - pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.BLANK)); - Assert.assertEquals(pokers,PokerHelper.checkPokerType(pokers).getSellPokers()); - Assert.assertEquals(7,PokerHelper.checkPokerType(pokers).getScore()); - Assert.assertEquals(SellType.THREE_ZONES_SINGLE,PokerHelper.checkPokerType(pokers).getSellType()); + pokers.remove(pokers.size() - 1); + pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.BLANK)); + Assert.assertEquals(pokers, PokerHelper.checkPokerType(pokers).getSellPokers()); + Assert.assertEquals(7, PokerHelper.checkPokerType(pokers).getScore()); + Assert.assertEquals(SellType.THREE_ZONES_SINGLE, PokerHelper.checkPokerType(pokers).getSellType()); - pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.BLANK)); - Assert.assertEquals(pokers,PokerHelper.checkPokerType(pokers).getSellPokers()); - Assert.assertEquals(7,PokerHelper.checkPokerType(pokers).getScore()); - Assert.assertEquals(SellType.THREE_ZONES_DOUBLE,PokerHelper.checkPokerType(pokers).getSellType()); + pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.BLANK)); + Assert.assertEquals(pokers, PokerHelper.checkPokerType(pokers).getSellPokers()); + Assert.assertEquals(7, PokerHelper.checkPokerType(pokers).getScore()); + Assert.assertEquals(SellType.THREE_ZONES_DOUBLE, PokerHelper.checkPokerType(pokers).getSellType()); - pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.BLANK)); - pokers.add(new Poker(PokerLevel.LEVEL_9, PokerType.BLANK)); - pokers.add(new Poker(PokerLevel.LEVEL_10, PokerType.BLANK)); - Assert.assertEquals(pokers,PokerHelper.checkPokerType(pokers).getSellPokers()); - Assert.assertEquals(8,PokerHelper.checkPokerType(pokers).getScore()); - Assert.assertEquals(SellType.THREE_STRAIGHT_WITH_SINGLE,PokerHelper.checkPokerType(pokers).getSellType()); + pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.BLANK)); + pokers.add(new Poker(PokerLevel.LEVEL_9, PokerType.BLANK)); + pokers.add(new Poker(PokerLevel.LEVEL_10, PokerType.BLANK)); + Assert.assertEquals(pokers, PokerHelper.checkPokerType(pokers).getSellPokers()); + Assert.assertEquals(8, PokerHelper.checkPokerType(pokers).getScore()); + Assert.assertEquals(SellType.THREE_STRAIGHT_WITH_SINGLE, PokerHelper.checkPokerType(pokers).getSellType()); - pokers.add(new Poker(PokerLevel.LEVEL_9, PokerType.BLANK)); - pokers.add(new Poker(PokerLevel.LEVEL_10, PokerType.BLANK)); - Assert.assertEquals(pokers,PokerHelper.checkPokerType(pokers).getSellPokers()); - Assert.assertEquals(8,PokerHelper.checkPokerType(pokers).getScore()); - Assert.assertEquals(SellType.FOUR_STRAIGHT_WITH_DOUBLE,PokerHelper.checkPokerType(pokers).getSellType()); - } + pokers.add(new Poker(PokerLevel.LEVEL_9, PokerType.BLANK)); + pokers.add(new Poker(PokerLevel.LEVEL_10, PokerType.BLANK)); + Assert.assertEquals(pokers, PokerHelper.checkPokerType(pokers).getSellPokers()); + Assert.assertEquals(8, PokerHelper.checkPokerType(pokers).getScore()); + Assert.assertEquals(SellType.FOUR_STRAIGHT_WITH_DOUBLE, PokerHelper.checkPokerType(pokers).getSellType()); + } - @Test - public void testCheckPokerType3() { - pokers.clear(); - pokers.add(new Poker(PokerLevel.LEVEL_6, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_9, PokerType.BLANK)); - pokers.add(new Poker(PokerLevel.LEVEL_10, PokerType.BLANK)); - Assert.assertEquals(pokers,PokerHelper.checkPokerType(pokers).getSellPokers()); - Assert.assertEquals(10,PokerHelper.checkPokerType(pokers).getScore()); - Assert.assertEquals(SellType.SINGLE_STRAIGHT,PokerHelper.checkPokerType(pokers).getSellType()); + @Test + public void testCheckPokerType3() { + pokers.clear(); + pokers.add(new Poker(PokerLevel.LEVEL_6, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_9, PokerType.BLANK)); + pokers.add(new Poker(PokerLevel.LEVEL_10, PokerType.BLANK)); + Assert.assertEquals(pokers, PokerHelper.checkPokerType(pokers).getSellPokers()); + Assert.assertEquals(10, PokerHelper.checkPokerType(pokers).getScore()); + Assert.assertEquals(SellType.SINGLE_STRAIGHT, PokerHelper.checkPokerType(pokers).getSellType()); - pokers.add(new Poker(PokerLevel.LEVEL_6, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_9, PokerType.BLANK)); - pokers.add(new Poker(PokerLevel.LEVEL_10, PokerType.BLANK)); - Assert.assertEquals(pokers,PokerHelper.checkPokerType(pokers).getSellPokers()); - Assert.assertEquals(10,PokerHelper.checkPokerType(pokers).getScore()); - Assert.assertEquals(SellType.DOUBLE_STRAIGHT,PokerHelper.checkPokerType(pokers).getSellType()); + pokers.add(new Poker(PokerLevel.LEVEL_6, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_9, PokerType.BLANK)); + pokers.add(new Poker(PokerLevel.LEVEL_10, PokerType.BLANK)); + Assert.assertEquals(pokers, PokerHelper.checkPokerType(pokers).getSellPokers()); + Assert.assertEquals(10, PokerHelper.checkPokerType(pokers).getScore()); + Assert.assertEquals(SellType.DOUBLE_STRAIGHT, PokerHelper.checkPokerType(pokers).getSellType()); - pokers.add(new Poker(PokerLevel.LEVEL_6, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_9, PokerType.BLANK)); - pokers.add(new Poker(PokerLevel.LEVEL_10, PokerType.BLANK)); - Assert.assertEquals(pokers,PokerHelper.checkPokerType(pokers).getSellPokers()); - Assert.assertEquals(10,PokerHelper.checkPokerType(pokers).getScore()); - Assert.assertEquals(SellType.THREE_STRAIGHT,PokerHelper.checkPokerType(pokers).getSellType()); + pokers.add(new Poker(PokerLevel.LEVEL_6, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_9, PokerType.BLANK)); + pokers.add(new Poker(PokerLevel.LEVEL_10, PokerType.BLANK)); + Assert.assertEquals(pokers, PokerHelper.checkPokerType(pokers).getSellPokers()); + Assert.assertEquals(10, PokerHelper.checkPokerType(pokers).getScore()); + Assert.assertEquals(SellType.THREE_STRAIGHT, PokerHelper.checkPokerType(pokers).getSellType()); - pokers.add(new Poker(PokerLevel.LEVEL_6, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_9, PokerType.BLANK)); - pokers.add(new Poker(PokerLevel.LEVEL_10, PokerType.BLANK)); - Assert.assertEquals(pokers,PokerHelper.checkPokerType(pokers).getSellPokers()); - Assert.assertEquals(10,PokerHelper.checkPokerType(pokers).getScore()); - Assert.assertEquals(SellType.FOUR_STRAIGHT,PokerHelper.checkPokerType(pokers).getSellType()); - } + pokers.add(new Poker(PokerLevel.LEVEL_6, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_9, PokerType.BLANK)); + pokers.add(new Poker(PokerLevel.LEVEL_10, PokerType.BLANK)); + Assert.assertEquals(pokers, PokerHelper.checkPokerType(pokers).getSellPokers()); + Assert.assertEquals(10, PokerHelper.checkPokerType(pokers).getScore()); + Assert.assertEquals(SellType.FOUR_STRAIGHT, PokerHelper.checkPokerType(pokers).getSellType()); + } - @Test - public void testCheckPokerType4() { - pokers.clear(); - pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_9, PokerType.BLANK)); - pokers.add(new Poker(PokerLevel.LEVEL_10, PokerType.BLANK)); - Assert.assertEquals(pokers,PokerHelper.checkPokerType(pokers).getSellPokers()); - Assert.assertEquals(8,PokerHelper.checkPokerType(pokers).getScore()); - Assert.assertEquals(SellType.FOUR_ZONES_SINGLE,PokerHelper.checkPokerType(pokers).getSellType()); + @Test + public void testCheckPokerType4() { + pokers.clear(); + pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_9, PokerType.BLANK)); + pokers.add(new Poker(PokerLevel.LEVEL_10, PokerType.BLANK)); + Assert.assertEquals(pokers, PokerHelper.checkPokerType(pokers).getSellPokers()); + Assert.assertEquals(8, PokerHelper.checkPokerType(pokers).getScore()); + Assert.assertEquals(SellType.FOUR_ZONES_SINGLE, PokerHelper.checkPokerType(pokers).getSellType()); - pokers.add(new Poker(PokerLevel.LEVEL_5, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_6, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - Assert.assertEquals(pokers,PokerHelper.checkPokerType(pokers).getSellPokers()); - Assert.assertEquals(8,PokerHelper.checkPokerType(pokers).getScore()); - Assert.assertEquals(SellType.FOUR_STRAIGHT_WITH_SINGLE,PokerHelper.checkPokerType(pokers).getSellType()); - } + pokers.add(new Poker(PokerLevel.LEVEL_5, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_6, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + Assert.assertEquals(pokers, PokerHelper.checkPokerType(pokers).getSellPokers()); + Assert.assertEquals(8, PokerHelper.checkPokerType(pokers).getScore()); + Assert.assertEquals(SellType.FOUR_STRAIGHT_WITH_SINGLE, PokerHelper.checkPokerType(pokers).getSellType()); + } - @Test - public void testCheckPokerType5() { - pokers.clear(); - pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_9, PokerType.BLANK)); - pokers.add(new Poker(PokerLevel.LEVEL_9, PokerType.BLANK)); - pokers.add(new Poker(PokerLevel.LEVEL_10, PokerType.BLANK)); - pokers.add(new Poker(PokerLevel.LEVEL_10, PokerType.BLANK)); - Assert.assertEquals(pokers,PokerHelper.checkPokerType(pokers).getSellPokers()); - Assert.assertEquals(8,PokerHelper.checkPokerType(pokers).getScore()); - Assert.assertEquals(SellType.FOUR_ZONES_DOUBLE,PokerHelper.checkPokerType(pokers).getSellType()); + @Test + public void testCheckPokerType5() { + pokers.clear(); + pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_8, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_9, PokerType.BLANK)); + pokers.add(new Poker(PokerLevel.LEVEL_9, PokerType.BLANK)); + pokers.add(new Poker(PokerLevel.LEVEL_10, PokerType.BLANK)); + pokers.add(new Poker(PokerLevel.LEVEL_10, PokerType.BLANK)); + Assert.assertEquals(pokers, PokerHelper.checkPokerType(pokers).getSellPokers()); + Assert.assertEquals(8, PokerHelper.checkPokerType(pokers).getScore()); + Assert.assertEquals(SellType.FOUR_ZONES_DOUBLE, PokerHelper.checkPokerType(pokers).getSellType()); - pokers.add(new Poker(PokerLevel.LEVEL_5, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_5, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_6, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_6, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); - Assert.assertEquals(pokers,PokerHelper.checkPokerType(pokers).getSellPokers()); - Assert.assertEquals(8,PokerHelper.checkPokerType(pokers).getScore()); - Assert.assertEquals(SellType.FOUR_STRAIGHT_WITH_DOUBLE,PokerHelper.checkPokerType(pokers).getSellType()); - } + pokers.add(new Poker(PokerLevel.LEVEL_5, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_5, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_6, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_6, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + pokers.add(new Poker(PokerLevel.LEVEL_7, PokerType.HEART)); + Assert.assertEquals(pokers, PokerHelper.checkPokerType(pokers).getSellPokers()); + Assert.assertEquals(8, PokerHelper.checkPokerType(pokers).getScore()); + Assert.assertEquals(SellType.FOUR_STRAIGHT_WITH_DOUBLE, PokerHelper.checkPokerType(pokers).getSellType()); + } } diff --git a/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_CLIENT_EXIT.java b/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_CLIENT_EXIT.java index 3a7f4b0..009eaac 100644 --- a/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_CLIENT_EXIT.java +++ b/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_CLIENT_EXIT.java @@ -15,23 +15,24 @@ public class ServerEventListener_CODE_CLIENT_EXIT implements ServerEventListener Room room = ServerContains.getRoom(clientSide.getRoomId()); - if(room != null) { - String result = MapHelper.newInstance() - .put("roomId", room.getId()) - .put("exitClientId", clientSide.getId()) - .put("exitClientNickname", clientSide.getNickname()) - .json(); - for(ClientSide client: room.getClientSideList()) { - if(client.getRole() == ClientRole.PLAYER){ - ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_CLIENT_EXIT, result); - client.init(); - } - } - - notifyWatcherClientExit(room, clientSide); - - ServerContains.removeRoom(room.getId()); + if (room == null) { + return; } + String result = MapHelper.newInstance() + .put("roomId", room.getId()) + .put("exitClientId", clientSide.getId()) + .put("exitClientNickname", clientSide.getNickname()) + .json(); + for (ClientSide client : room.getClientSideList()) { + if (client.getRole() == ClientRole.PLAYER) { + ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_CLIENT_EXIT, result); + client.init(); + } + } + + notifyWatcherClientExit(room, clientSide); + + ServerContains.removeRoom(room.getId()); } /** diff --git a/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_CLIENT_NICKNAME_SET.java b/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_CLIENT_NICKNAME_SET.java index 1161020..1bc0475 100644 --- a/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_CLIENT_NICKNAME_SET.java +++ b/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_CLIENT_NICKNAME_SET.java @@ -12,14 +12,14 @@ public class ServerEventListener_CODE_CLIENT_NICKNAME_SET implements ServerEvent @Override public void call(ClientSide client, String nickname) { - - if (nickname.trim().length() > NICKNAME_MAX_LENGTH) { + + if (nickname.trim().length() > NICKNAME_MAX_LENGTH || nickname.trim().isEmpty()) { String result = MapHelper.newInstance().put("invalidLength", nickname.trim().length()).json(); ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_CLIENT_NICKNAME_SET, result); - }else{ - ServerContains.CLIENT_SIDE_MAP.get(client.getId()).setNickname(nickname); - ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_SHOW_OPTIONS, null); + return; } + ServerContains.CLIENT_SIDE_MAP.get(client.getId()).setNickname(nickname); + ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_SHOW_OPTIONS, null); } } diff --git a/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_CLIENT_OFFLINE.java b/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_CLIENT_OFFLINE.java index 38ca36a..d17ac5b 100644 --- a/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_CLIENT_OFFLINE.java +++ b/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_CLIENT_OFFLINE.java @@ -15,24 +15,25 @@ public class ServerEventListener_CODE_CLIENT_OFFLINE implements ServerEventListe Room room = ServerContains.getRoom(clientSide.getRoomId()); - if(room != null) { - String result = MapHelper.newInstance() - .put("roomId", room.getId()) - .put("exitClientId", clientSide.getId()) - .put("exitClientNickname", clientSide.getNickname()) - .json(); - for(ClientSide client: room.getClientSideList()) { - if(client.getRole() == ClientRole.PLAYER){ - if(client.getId() != clientSide.getId()){ - ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_CLIENT_EXIT, result); - client.init(); - } - } - } - ServerContains.removeRoom(room.getId()); + if (room == null) { + ServerContains.CLIENT_SIDE_MAP.remove(clientSide.getId()); + return; } - - ServerContains.CLIENT_SIDE_MAP.remove(clientSide.getId()); - } + String result = MapHelper.newInstance() + .put("roomId", room.getId()) + .put("exitClientId", clientSide.getId()) + .put("exitClientNickname", clientSide.getNickname()) + .json(); + for (ClientSide client : room.getClientSideList()) { + if (client.getRole() != ClientRole.PLAYER) { + continue; + } + if (client.getId() != clientSide.getId()) { + ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_CLIENT_EXIT, result); + client.init(); + } + } + ServerContains.removeRoom(room.getId()); + } } diff --git a/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_GAME_LANDLORD_ELECT.java b/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_GAME_LANDLORD_ELECT.java index d7afa6f..d33141f 100644 --- a/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_GAME_LANDLORD_ELECT.java +++ b/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_GAME_LANDLORD_ELECT.java @@ -15,82 +15,83 @@ import org.nico.ratel.landlords.server.robot.RobotEventListener; import java.util.Map; -public class ServerEventListener_CODE_GAME_LANDLORD_ELECT implements ServerEventListener{ +public class ServerEventListener_CODE_GAME_LANDLORD_ELECT implements ServerEventListener { @Override public void call(ClientSide clientSide, String data) { Room room = ServerContains.getRoom(clientSide.getRoomId()); - - if(room != null) { - boolean isY = Boolean.valueOf(data); - if(isY){ - clientSide.getPokers().addAll(room.getLandlordPokers()); - PokerHelper.sortPoker(clientSide.getPokers()); - - int currentClientId = clientSide.getId(); - room.setLandlordId(currentClientId); - room.setLastSellClient(currentClientId); - room.setCurrentSellClient(currentClientId); - clientSide.setType(ClientType.LANDLORD); - - for(ClientSide client: room.getClientSideList()){ - String result = MapHelper.newInstance() - .put("roomId", room.getId()) - .put("roomOwner", room.getRoomOwner()) - .put("roomClientCount", room.getClientSideList().size()) - .put("landlordNickname", clientSide.getNickname()) - .put("landlordId", clientSide.getId()) - .put("additionalPokers", room.getLandlordPokers()) - .json(); - - if(client.getRole() == ClientRole.PLAYER) { - ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_GAME_LANDLORD_CONFIRM, result); - }else { - if(currentClientId == client.getId()) { - RobotEventListener.get(ClientEventCode.CODE_GAME_POKER_PLAY).call(client, result); - } - } - } - notifyWatcherConfirmLandlord(room, clientSide); - }else{ - if(clientSide.getNext().getId() == room.getFirstSellClient()){ - for(ClientSide client: room.getClientSideList()){ - if(client.getRole() == ClientRole.PLAYER) { - ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_GAME_LANDLORD_CYCLE, null); - } - } - - ServerEventListener.get(ServerEventCode.CODE_GAME_STARTING).call(clientSide, null); - }else{ - ClientSide turnClientSide = clientSide.getNext(); - room.setCurrentSellClient(turnClientSide.getId()); - String result = MapHelper.newInstance() - .put("roomId", room.getId()) - .put("roomOwner", room.getRoomOwner()) - .put("roomClientCount", room.getClientSideList().size()) - .put("preClientNickname", clientSide.getNickname()) - .put("nextClientNickname", turnClientSide.getNickname()) - .put("nextClientId", turnClientSide.getId()) - .json(); - - for(ClientSide client: room.getClientSideList()) { - if(client.getRole() == ClientRole.PLAYER) { - ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_GAME_LANDLORD_ELECT, result); - }else { - if(client.getId() == turnClientSide.getId()) { - RobotEventListener.get(ClientEventCode.CODE_GAME_LANDLORD_ELECT).call(client, result); - } - } - } - - notifyWatcherRobLandlord(room, clientSide); + if (room == null) { + return; + } + if (Boolean.parseBoolean(data)) { + confirmLandlord(clientSide, room); + return; + } + if (clientSide.getNext().getId() == room.getFirstSellClient()) { + for (ClientSide client : room.getClientSideList()) { + if (client.getRole() == ClientRole.PLAYER) { + ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_GAME_LANDLORD_CYCLE, null); } } - }else { -// ChannelUtils.pushToClient(clientSide.getChannel(), ClientEventCode.CODE_ROOM_PLAY_FAIL_BY_INEXIST, null); + ServerEventListener.get(ServerEventCode.CODE_GAME_STARTING).call(clientSide, null); + return; } + ClientSide turnClientSide = clientSide.getNext(); + room.setCurrentSellClient(turnClientSide.getId()); + String result = MapHelper.newInstance() + .put("roomId", room.getId()) + .put("roomOwner", room.getRoomOwner()) + .put("roomClientCount", room.getClientSideList().size()) + .put("preClientNickname", clientSide.getNickname()) + .put("nextClientNickname", turnClientSide.getNickname()) + .put("nextClientId", turnClientSide.getId()) + .json(); + + for (ClientSide client : room.getClientSideList()) { + if (client.getRole() == ClientRole.PLAYER) { + ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_GAME_LANDLORD_ELECT, result); + continue; + } + if (client.getId() == turnClientSide.getId()) { + RobotEventListener.get(ClientEventCode.CODE_GAME_LANDLORD_ELECT).call(client, result); + } + } + notifyWatcherRobLandlord(room, clientSide); + } + + public void confirmLandlord(ClientSide clientSide, Room room) { + clientSide.getPokers().addAll(room.getLandlordPokers()); + PokerHelper.sortPoker(clientSide.getPokers()); + + int currentClientId = clientSide.getId(); + room.setLandlordId(currentClientId); + room.setLastSellClient(currentClientId); + room.setCurrentSellClient(currentClientId); + clientSide.setType(ClientType.LANDLORD); + + for (ClientSide client : room.getClientSideList()) { + String result = MapHelper.newInstance() + .put("roomId", room.getId()) + .put("roomOwner", room.getRoomOwner()) + .put("roomClientCount", room.getClientSideList().size()) + .put("landlordNickname", clientSide.getNickname()) + .put("landlordId", clientSide.getId()) + .put("additionalPokers", room.getLandlordPokers()) + .json(); + + if (client.getRole() == ClientRole.PLAYER) { + ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_GAME_LANDLORD_CONFIRM, result); + continue; + } + + if (currentClientId == client.getId()) { + RobotEventListener.get(ClientEventCode.CODE_GAME_POKER_PLAY).call(client, result); + } + } + + notifyWatcherConfirmLandlord(room, clientSide); } /** diff --git a/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_GAME_POKER_PLAY.java b/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_GAME_POKER_PLAY.java index 6d9840c..83060cb 100644 --- a/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_GAME_POKER_PLAY.java +++ b/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_GAME_POKER_PLAY.java @@ -8,117 +8,111 @@ import org.nico.ratel.landlords.entity.ClientSide; import org.nico.ratel.landlords.entity.Poker; import org.nico.ratel.landlords.entity.PokerSell; import org.nico.ratel.landlords.entity.Room; -import org.nico.ratel.landlords.enums.ClientEventCode; -import org.nico.ratel.landlords.enums.ClientRole; -import org.nico.ratel.landlords.enums.SellType; -import org.nico.ratel.landlords.enums.ServerEventCode; +import org.nico.ratel.landlords.enums.*; import org.nico.ratel.landlords.helper.MapHelper; import org.nico.ratel.landlords.helper.PokerHelper; import org.nico.ratel.landlords.server.ServerContains; import org.nico.ratel.landlords.server.robot.RobotEventListener; -public class ServerEventListener_CODE_GAME_POKER_PLAY implements ServerEventListener{ +public class ServerEventListener_CODE_GAME_POKER_PLAY implements ServerEventListener { @Override public void call(ClientSide clientSide, String data) { Room room = ServerContains.getRoom(clientSide.getRoomId()); - if(room != null) { - if(room.getCurrentSellClient() == clientSide.getId()) { - Character[] options = Noson.convert(data, Character[].class); - int[] indexes = PokerHelper.getIndexes(options, clientSide.getPokers()); - if(PokerHelper.checkPokerIndex(indexes, clientSide.getPokers())){ - boolean sellFlag = true; - - List currentPokers = PokerHelper.getPoker(indexes, clientSide.getPokers()); - PokerSell currentPokerShell = PokerHelper.checkPokerType(currentPokers); - if(currentPokerShell.getSellType() != SellType.ILLEGAL) { - if(room.getLastSellClient() != clientSide.getId() && room.getLastPokerShell() != null){ - PokerSell lastPokerShell = room.getLastPokerShell(); - - if((lastPokerShell.getSellType() != currentPokerShell.getSellType() || lastPokerShell.getSellPokers().size() != currentPokerShell.getSellPokers().size()) && currentPokerShell.getSellType() != SellType.BOMB && currentPokerShell.getSellType() != SellType.KING_BOMB) { - String result = MapHelper.newInstance() - .put("playType", currentPokerShell.getSellType()) - .put("playCount", currentPokerShell.getSellPokers().size()) - .put("preType", lastPokerShell.getSellType()) - .put("preCount", lastPokerShell.getSellPokers().size()) - .json(); - sellFlag = false; - ChannelUtils.pushToClient(clientSide.getChannel(), ClientEventCode.CODE_GAME_POKER_PLAY_MISMATCH, result); - }else if(lastPokerShell.getScore() >= currentPokerShell.getScore()) { - String result = MapHelper.newInstance() - .put("playScore", currentPokerShell.getScore()) - .put("preScore", lastPokerShell.getScore()) - .json(); - sellFlag = false; - ChannelUtils.pushToClient(clientSide.getChannel(), ClientEventCode.CODE_GAME_POKER_PLAY_LESS, result); - } - } - }else { - sellFlag = false; - ChannelUtils.pushToClient(clientSide.getChannel(), ClientEventCode.CODE_GAME_POKER_PLAY_INVALID, null); - } - - if(sellFlag) { - ClientSide next = clientSide.getNext(); - - room.setLastSellClient(clientSide.getId()); - room.setLastPokerShell(currentPokerShell); - room.setCurrentSellClient(next.getId()); - - clientSide.getPokers().removeAll(currentPokers); - MapHelper mapHelper = MapHelper.newInstance() - .put("clientId", clientSide.getId()) - .put("clientNickname", clientSide.getNickname()) - .put("clientType", clientSide.getType()) - .put("pokers", currentPokers) - .put("lastSellClientId", clientSide.getId()) - .put("lastSellPokers", currentPokers); - - if(! clientSide.getPokers().isEmpty()) { - mapHelper.put("sellClinetNickname", next.getNickname()); - } - - String result = mapHelper.json(); - - for(ClientSide client: room.getClientSideList()) { - if(client.getRole() == ClientRole.PLAYER) { - ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_SHOW_POKERS, result); - } - } + if (room == null) { + return; + } + if (room.getCurrentSellClient() != clientSide.getId()) { + ChannelUtils.pushToClient(clientSide.getChannel(), ClientEventCode.CODE_GAME_POKER_PLAY_ORDER_ERROR, null); + return; + } + Character[] options = Noson.convert(data, Character[].class); + int[] indexes = PokerHelper.getIndexes(options, clientSide.getPokers()); + if (!PokerHelper.checkPokerIndex(indexes, clientSide.getPokers())) { + ChannelUtils.pushToClient(clientSide.getChannel(), ClientEventCode.CODE_GAME_POKER_PLAY_INVALID, null); + return; + } - notifyWatcherPlayPoker(room, result); - - if(clientSide.getPokers().isEmpty()) { - result = MapHelper.newInstance() - .put("winnerNickname", clientSide.getNickname()) - .put("winnerType", clientSide.getType()) - .json(); - - for(ClientSide client: room.getClientSideList()) { - if(client.getRole() == ClientRole.PLAYER) { - ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_GAME_OVER, result); - } - } + boolean sellFlag = true; + List currentPokers = PokerHelper.getPoker(indexes, clientSide.getPokers()); + PokerSell currentPokerSell = PokerHelper.checkPokerType(currentPokers); + if (currentPokerSell.getSellType() == SellType.ILLEGAL) { + ChannelUtils.pushToClient(clientSide.getChannel(), ClientEventCode.CODE_GAME_POKER_PLAY_INVALID, null); + return; + } + if (room.getLastSellClient() != clientSide.getId() && room.getLastPokerShell() != null) { + PokerSell lastPokerSell = room.getLastPokerShell(); - notifyWatcherGameOver(room, result); - - ServerEventListener.get(ServerEventCode.CODE_CLIENT_EXIT).call(clientSide, data); - }else { - if(next.getRole() == ClientRole.PLAYER) { - ServerEventListener.get(ServerEventCode.CODE_GAME_POKER_PLAY_REDIRECT).call(next, result); - }else { - RobotEventListener.get(ClientEventCode.CODE_GAME_POKER_PLAY).call(next, data); - } - } - } - }else{ - ChannelUtils.pushToClient(clientSide.getChannel(), ClientEventCode.CODE_GAME_POKER_PLAY_INVALID, null); + if ((lastPokerSell.getSellType() != currentPokerSell.getSellType() || lastPokerSell.getSellPokers().size() != currentPokerSell.getSellPokers().size()) && currentPokerSell.getSellType() != SellType.BOMB && currentPokerSell.getSellType() != SellType.KING_BOMB) { + String result = MapHelper.newInstance() + .put("playType", currentPokerSell.getSellType()) + .put("playCount", currentPokerSell.getSellPokers().size()) + .put("preType", lastPokerSell.getSellType()) + .put("preCount", lastPokerSell.getSellPokers().size()) + .json(); + ChannelUtils.pushToClient(clientSide.getChannel(), ClientEventCode.CODE_GAME_POKER_PLAY_MISMATCH, result); + return; + } + if (lastPokerSell.getScore() >= currentPokerSell.getScore()) { + String result = MapHelper.newInstance() + .put("playScore", currentPokerSell.getScore()) + .put("preScore", lastPokerSell.getScore()) + .json(); + ChannelUtils.pushToClient(clientSide.getChannel(), ClientEventCode.CODE_GAME_POKER_PLAY_LESS, result); + return; + } + } + + ClientSide next = clientSide.getNext(); + + room.setLastSellClient(clientSide.getId()); + room.setLastPokerShell(currentPokerSell); + room.setCurrentSellClient(next.getId()); + + clientSide.getPokers().removeAll(currentPokers); + MapHelper mapHelper = MapHelper.newInstance() + .put("clientId", clientSide.getId()) + .put("clientNickname", clientSide.getNickname()) + .put("clientType", clientSide.getType()) + .put("pokers", currentPokers) + .put("lastSellClientId", clientSide.getId()) + .put("lastSellPokers", currentPokers); + + if (!clientSide.getPokers().isEmpty()) { + mapHelper.put("sellClinetNickname", next.getNickname()); + } + + String result = mapHelper.json(); + + for (ClientSide client : room.getClientSideList()) { + if (client.getRole() == ClientRole.PLAYER) { + ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_SHOW_POKERS, result); + } + } + + notifyWatcherPlayPoker(room, result); + + if (clientSide.getPokers().isEmpty()) { + result = MapHelper.newInstance() + .put("winnerNickname", clientSide.getNickname()) + .put("winnerType", clientSide.getType()) + .json(); + + for(ClientSide client: room.getClientSideList()) { + if(client.getRole() == ClientRole.PLAYER) { + ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_GAME_OVER, result); } + } + + notifyWatcherGameOver(room, result); + + ServerEventListener.get(ServerEventCode.CODE_CLIENT_EXIT).call(clientSide, data); + } else { + if(next.getRole() == ClientRole.PLAYER) { + ServerEventListener.get(ServerEventCode.CODE_GAME_POKER_PLAY_REDIRECT).call(next, result); }else { - ChannelUtils.pushToClient(clientSide.getChannel(), ClientEventCode.CODE_GAME_POKER_PLAY_ORDER_ERROR, null); + RobotEventListener.get(ClientEventCode.CODE_GAME_POKER_PLAY).call(next, data); } - }else { -// ChannelUtils.pushToClient(clientSide.getChannel(), ClientEventCode.CODE_ROOM_PLAY_FAIL_BY_INEXIST, null); } } diff --git a/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_ROOM_CREATE.java b/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_ROOM_CREATE.java index ecb4f02..274ffd7 100644 --- a/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_ROOM_CREATE.java +++ b/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_ROOM_CREATE.java @@ -26,12 +26,7 @@ public class ServerEventListener_CODE_ROOM_CREATE implements ServerEventListener clientSide.setRoomId(room.getId()); ServerContains.addRoom(room); - + ChannelUtils.pushToClient(clientSide.getChannel(), ClientEventCode.CODE_ROOM_CREATE_SUCCESS, Noson.reversal(room)); } - - - - - } diff --git a/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_ROOM_CREATE_PVE.java b/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_ROOM_CREATE_PVE.java index 27576c1..586c589 100644 --- a/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_ROOM_CREATE_PVE.java +++ b/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_ROOM_CREATE_PVE.java @@ -3,63 +3,54 @@ package org.nico.ratel.landlords.server.event; import org.nico.ratel.landlords.channel.ChannelUtils; import org.nico.ratel.landlords.entity.ClientSide; import org.nico.ratel.landlords.entity.Room; -import org.nico.ratel.landlords.enums.ClientEventCode; -import org.nico.ratel.landlords.enums.ClientRole; -import org.nico.ratel.landlords.enums.ClientStatus; -import org.nico.ratel.landlords.enums.RoomStatus; -import org.nico.ratel.landlords.enums.RoomType; -import org.nico.ratel.landlords.enums.ServerEventCode; +import org.nico.ratel.landlords.enums.*; import org.nico.ratel.landlords.robot.RobotDecisionMakers; import org.nico.ratel.landlords.server.ServerContains; -public class ServerEventListener_CODE_ROOM_CREATE_PVE implements ServerEventListener{ +public class ServerEventListener_CODE_ROOM_CREATE_PVE implements ServerEventListener { @Override public void call(ClientSide clientSide, String data) { - - int difficultyCoefficient = Integer.valueOf(data); - if(RobotDecisionMakers.contains(difficultyCoefficient)) { - Room room = new Room(ServerContains.getServerId()); - room.setType(RoomType.PVE); - room.setStatus(RoomStatus.BLANK); - room.setRoomOwner(clientSide.getNickname()); - room.getClientSideMap().put(clientSide.getId(), clientSide); - room.getClientSideList().add(clientSide); - room.setCurrentSellClient(clientSide.getId()); - room.setCreateTime(System.currentTimeMillis()); - room.setDifficultyCoefficient(difficultyCoefficient); - - clientSide.setRoomId(room.getId()); - ServerContains.addRoom(room); - - ClientSide preClient = clientSide; - //Add robots - for(int index = 1; index < 3; index ++) { - ClientSide robot = new ClientSide(- ServerContains.getClientId(), ClientStatus.PLAYING, null); - robot.setNickname("robot_" + index); - robot.setRole(ClientRole.ROBOT); - preClient.setNext(robot); - robot.setPre(preClient); - robot.setRoomId(room.getId()); - room.getClientSideMap().put(robot.getId(), robot); - room.getClientSideList().add(robot); - - preClient = robot; - ServerContains.CLIENT_SIDE_MAP.put(robot.getId(), robot); - } - preClient.setNext(clientSide); - clientSide.setPre(preClient); - - ServerEventListener.get(ServerEventCode.CODE_GAME_STARTING).call(clientSide, String.valueOf(room.getId())); - }else { + int difficultyCoefficient = Integer.parseInt(data); + if (!RobotDecisionMakers.contains(difficultyCoefficient)) { ChannelUtils.pushToClient(clientSide.getChannel(), ClientEventCode.CODE_PVE_DIFFICULTY_NOT_SUPPORT, null); + return; } - + + Room room = new Room(ServerContains.getServerId()); + room.setType(RoomType.PVE); + room.setStatus(RoomStatus.BLANK); + room.setRoomOwner(clientSide.getNickname()); + room.getClientSideMap().put(clientSide.getId(), clientSide); + room.getClientSideList().add(clientSide); + room.setCurrentSellClient(clientSide.getId()); + room.setCreateTime(System.currentTimeMillis()); + room.setDifficultyCoefficient(difficultyCoefficient); + + clientSide.setRoomId(room.getId()); + ServerContains.addRoom(room); + + ClientSide preClient = clientSide; + //Add robots + for (int index = 1; index < 3; index++) { + ClientSide robot = new ClientSide(-ServerContains.getClientId(), ClientStatus.PLAYING, null); + robot.setNickname("robot_" + index); + robot.setRole(ClientRole.ROBOT); + preClient.setNext(robot); + robot.setPre(preClient); + robot.setRoomId(room.getId()); + room.getClientSideMap().put(robot.getId(), robot); + room.getClientSideList().add(robot); + + preClient = robot; + ServerContains.CLIENT_SIDE_MAP.put(robot.getId(), robot); + } + preClient.setNext(clientSide); + clientSide.setPre(preClient); + + ServerEventListener.get(ServerEventCode.CODE_GAME_STARTING).call(clientSide, String.valueOf(room.getId())); } - - - } diff --git a/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_ROOM_JOIN.java b/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_ROOM_JOIN.java index 90fd764..ffddc41 100644 --- a/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_ROOM_JOIN.java +++ b/landlords-server/src/main/java/org/nico/ratel/landlords/server/event/ServerEventListener_CODE_ROOM_JOIN.java @@ -7,68 +7,69 @@ import org.nico.ratel.landlords.channel.ChannelUtils; import org.nico.ratel.landlords.entity.ClientSide; import org.nico.ratel.landlords.entity.Room; import org.nico.ratel.landlords.enums.ClientEventCode; +import org.nico.ratel.landlords.enums.ClientStatus; import org.nico.ratel.landlords.enums.RoomStatus; import org.nico.ratel.landlords.enums.ServerEventCode; import org.nico.ratel.landlords.helper.MapHelper; import org.nico.ratel.landlords.server.ServerContains; -public class ServerEventListener_CODE_ROOM_JOIN implements ServerEventListener{ +public class ServerEventListener_CODE_ROOM_JOIN implements ServerEventListener { @Override public void call(ClientSide clientSide, String data) { - Room room = ServerContains.getRoom(Integer.valueOf(data)); - - if(room == null) { + Room room = ServerContains.getRoom(Integer.parseInt(data)); + + if (room == null) { String result = MapHelper.newInstance() - .put("roomId", data) - .json(); + .put("roomId", data) + .json(); ChannelUtils.pushToClient(clientSide.getChannel(), ClientEventCode.CODE_ROOM_JOIN_FAIL_BY_INEXIST, result); - }else { - if(room.getClientSideList().size() == 3) { - String result = MapHelper.newInstance() - .put("roomId", room.getId()) - .put("roomOwner", room.getRoomOwner()) - .json(); - ChannelUtils.pushToClient(clientSide.getChannel(), ClientEventCode.CODE_ROOM_JOIN_FAIL_BY_FULL, result); - }else { - clientSide.setRoomId(room.getId()); - - ConcurrentSkipListMap roomClientMap = (ConcurrentSkipListMap) room.getClientSideMap(); - LinkedList roomClientList = room.getClientSideList(); - - if(roomClientList.size() > 0){ - ClientSide pre = roomClientList.getLast(); - pre.setNext(clientSide); - clientSide.setPre(pre); - } - - roomClientList.add(clientSide); - roomClientMap.put(clientSide.getId(), clientSide); - - if(roomClientMap.size() == 3) { - clientSide.setNext(roomClientList.getFirst()); - roomClientList.getFirst().setPre(clientSide); - - ServerEventListener.get(ServerEventCode.CODE_GAME_STARTING).call(clientSide, String.valueOf(room.getId())); - }else { - room.setStatus(RoomStatus.WAIT); - - String result = MapHelper.newInstance() - .put("clientId", clientSide.getId()) - .put("clientNickname", clientSide.getNickname()) - .put("roomId", room.getId()) - .put("roomOwner", room.getRoomOwner()) - .put("roomClientCount", room.getClientSideList().size()) - .json(); - for(ClientSide client: roomClientMap.values()) { - ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_ROOM_JOIN_SUCCESS, result); - } - - notifyWatcherJoinRoom(room, clientSide); - } - } + return; } + if (room.getClientSideList().size() == 3) { + String result = MapHelper.newInstance() + .put("roomId", room.getId()) + .put("roomOwner", room.getRoomOwner()) + .json(); + ChannelUtils.pushToClient(clientSide.getChannel(), ClientEventCode.CODE_ROOM_JOIN_FAIL_BY_FULL, result); + return; + } + clientSide.setRoomId(room.getId()); + + ConcurrentSkipListMap roomClientMap = (ConcurrentSkipListMap) room.getClientSideMap(); + LinkedList roomClientList = room.getClientSideList(); + + if (roomClientList.size() > 0) { + ClientSide pre = roomClientList.getLast(); + pre.setNext(clientSide); + clientSide.setPre(pre); + } + + roomClientList.add(clientSide); + roomClientMap.put(clientSide.getId(), clientSide); + + if (roomClientMap.size() == 3) { + clientSide.setNext(roomClientList.getFirst()); + roomClientList.getFirst().setPre(clientSide); + ServerEventListener.get(ServerEventCode.CODE_GAME_STARTING).call(clientSide, String.valueOf(room.getId())); + return; + } + + room.setStatus(RoomStatus.WAIT); + + String result = MapHelper.newInstance() + .put("clientId", clientSide.getId()) + .put("clientNickname", clientSide.getNickname()) + .put("roomId", room.getId()) + .put("roomOwner", room.getRoomOwner()) + .put("roomClientCount", room.getClientSideList().size()) + .json(); + for (ClientSide client : roomClientMap.values()) { + ChannelUtils.pushToClient(client.getChannel(), ClientEventCode.CODE_ROOM_JOIN_SUCCESS, result); + } + + notifyWatcherJoinRoom(room, clientSide); } /** diff --git a/landlords-server/src/main/java/org/nico/ratel/landlords/server/handler/ProtobufTransferHandler.java b/landlords-server/src/main/java/org/nico/ratel/landlords/server/handler/ProtobufTransferHandler.java index 012522b..008e3db 100644 --- a/landlords-server/src/main/java/org/nico/ratel/landlords/server/handler/ProtobufTransferHandler.java +++ b/landlords-server/src/main/java/org/nico/ratel/landlords/server/handler/ProtobufTransferHandler.java @@ -58,39 +58,39 @@ public class ProtobufTransferHandler extends ChannelInboundHandlerAdapter { cause.printStackTrace(); } } - - @Override - public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { - if (evt instanceof IdleStateEvent) { - IdleStateEvent event = (IdleStateEvent) evt; - if (event.state() == IdleState.READER_IDLE) { - try{ - clientOfflineEvent(ctx.channel()); - ctx.channel().close(); - }catch(Exception e){ - } - } - } else { - super.userEventTriggered(ctx, evt); - } - } - - private int getId(Channel channel){ - String longId = channel.id().asLongText(); - Integer clientId = ServerContains.CHANNEL_ID_MAP.get(longId); - if(null == clientId){ - clientId = ServerContains.getClientId(); - ServerContains.CHANNEL_ID_MAP.put(longId, clientId); - } - return clientId; - } - - private void clientOfflineEvent(Channel channel){ - int clientId = getId(channel); - ClientSide client = ServerContains.CLIENT_SIDE_MAP.get(clientId); - if(client != null) { + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { + if (evt instanceof IdleStateEvent) { + IdleStateEvent event = (IdleStateEvent) evt; + if (event.state() == IdleState.READER_IDLE) { + try { + clientOfflineEvent(ctx.channel()); + ctx.channel().close(); + } catch (Exception ignore) { + } + } + } else { + super.userEventTriggered(ctx, evt); + } + } + + private int getId(Channel channel) { + String longId = channel.id().asLongText(); + Integer clientId = ServerContains.CHANNEL_ID_MAP.get(longId); + if (null == clientId) { + clientId = ServerContains.getClientId(); + ServerContains.CHANNEL_ID_MAP.put(longId, clientId); + } + return clientId; + } + + private void clientOfflineEvent(Channel channel) { + int clientId = getId(channel); + ClientSide client = ServerContains.CLIENT_SIDE_MAP.get(clientId); + if (client != null) { SimplePrinter.serverLog("Has client exit to the server:" + clientId + " | " + client.getNickname()); ServerEventListener.get(ServerEventCode.CODE_CLIENT_OFFLINE).call(client, null); } - } + } } diff --git a/landlords-server/src/main/java/org/nico/ratel/landlords/server/timer/RoomClearTask.java b/landlords-server/src/main/java/org/nico/ratel/landlords/server/timer/RoomClearTask.java index f355cb4..cfd44ed 100644 --- a/landlords-server/src/main/java/org/nico/ratel/landlords/server/timer/RoomClearTask.java +++ b/landlords-server/src/main/java/org/nico/ratel/landlords/server/timer/RoomClearTask.java @@ -17,124 +17,117 @@ import org.nico.ratel.landlords.server.ServerContains; import org.nico.ratel.landlords.server.event.ServerEventListener; import org.nico.ratel.landlords.server.robot.RobotEventListener; -/** - * +/** + * * @author nico */ -public class RoomClearTask extends TimerTask{ +public class RoomClearTask extends TimerTask { //The room wait time of after create is 100s - private static long waitingStatusInterval = 1000 * 100; + private static final long waitingStatusInterval = 1000 * 100; //The room starting destroy time is 100s - private static long startingStatusInterval = 1000 * 100; + private static final long startingStatusInterval = 1000 * 300; //The room live time is 600s - private static long liveTime = 1000 * 60 * 20; - + private static final long liveTime = 1000 * 60 * 20; + @Override public void run() { try { doing(); - }catch(Exception e) { + } catch (Exception e) { SimplePrinter.serverLog(e.getMessage()); } - + } - + public void doing() { Map rooms = ServerContains.getRoomMap(); - if(rooms != null && ! rooms.isEmpty()){ - long now = System.currentTimeMillis(); - for(Room room: rooms.values()){ - long alreadyLiveTime = System.currentTimeMillis() - room.getCreateTime(); - SimplePrinter.serverLog("room " + room.getId() + " already live " + alreadyLiveTime + "ms"); - if(alreadyLiveTime > liveTime) { - SimplePrinter.serverLog("room " + room.getId() + " live time overflow " + liveTime + ", closed!"); - ServerEventListener.get(ServerEventCode.CODE_CLIENT_EXIT).call(room.getClientSideList().get(0), null); - }else { - long diff = now - room.getLastFlushTime(); - - if(room.getStatus() != RoomStatus.STARTING){ - long interval = waitingStatusInterval; - - if(diff > interval) { - SimplePrinter.serverLog("room " + room.getId() + " starting waiting time overflow " + waitingStatusInterval + ", closed!"); - - ServerEventListener.get(ServerEventCode.CODE_CLIENT_EXIT).call(room.getClientSideList().get(0), null); - } - }else{ - if(room.getType() == RoomType.PVP) { - long interval = startingStatusInterval; - - if(diff > interval){ - boolean allRobots = true; - for(ClientSide client: room.getClientSideList()) { - if(client.getId() != room.getCurrentSellClient() && client.getRole() == ClientRole.PLAYER) { - allRobots = false; - break; - } - } - - ClientSide currentPlayer = room.getClientSideMap().get(room.getCurrentSellClient()); - - if(allRobots) { - SimplePrinter.serverLog("room " + room.getId() + " all is robots, closed!"); - - ServerEventListener.get(ServerEventCode.CODE_CLIENT_EXIT).call(currentPlayer, null); - }else { - //kick this client - ChannelUtils.pushToClient(currentPlayer.getChannel(), ClientEventCode.CODE_CLIENT_KICK, null); + if (rooms == null || rooms.isEmpty()) { + return; + } - notifyWatcherClientKick(room, currentPlayer); + long now = System.currentTimeMillis(); + for (Room room : rooms.values()) { + long alreadyLiveTime = System.currentTimeMillis() - room.getCreateTime(); + SimplePrinter.serverLog("room " + room.getId() + " already live " + alreadyLiveTime + "ms"); + if (alreadyLiveTime > liveTime) { + SimplePrinter.serverLog("room " + room.getId() + " live time overflow " + liveTime + ", closed!"); + ServerEventListener.get(ServerEventCode.CODE_CLIENT_EXIT).call(room.getClientSideList().get(0), null); + return; + } - //client current player - room.getClientSideMap().remove(currentPlayer.getId()); - room.getClientSideList().remove(currentPlayer); + long diff = now - room.getLastFlushTime(); + if (room.getStatus() != RoomStatus.STARTING && diff > waitingStatusInterval) { + SimplePrinter.serverLog("room " + room.getId() + " starting waiting time overflow " + waitingStatusInterval + ", closed!"); + ServerEventListener.get(ServerEventCode.CODE_CLIENT_EXIT).call(room.getClientSideList().get(0), null); + return; + } + if (room.getType() != RoomType.PVP) { + return; + } - ClientSide robot = new ClientSide(- ServerContains.getClientId(), ClientStatus.PLAYING, null); - robot.setNickname(currentPlayer.getNickname()); - robot.setRole(ClientRole.ROBOT); - robot.setRoomId(room.getId()); - robot.setNext(currentPlayer.getNext()); - robot.setPre(currentPlayer.getPre()); - robot.getNext().setPre(robot); - robot.getPre().setNext(robot); - robot.setPokers(currentPlayer.getPokers()); - robot.setType(currentPlayer.getType()); + if (diff <= startingStatusInterval) { + return; + } - room.getClientSideMap().put(robot.getId(), robot); - room.getClientSideList().add(robot); - room.setCurrentSellClient(robot.getId()); - - //If last sell client is current client, replace it to robot id - if(room.getLastSellClient() == currentPlayer.getId()) { - room.setLastSellClient(robot.getId()); - } - - - //set robot difficulty -> simple - room.setDifficultyCoefficient(1); - - ServerContains.CLIENT_SIDE_MAP.put(robot.getId(), robot); - - //init client - currentPlayer.init(); - - SimplePrinter.serverLog("room " + room.getId() + " player " + currentPlayer.getNickname() + " " + startingStatusInterval + "ms not operating, automatic custody!"); - - if(room.getLandlordId() == -1){ - RobotEventListener.get(ClientEventCode.CODE_GAME_LANDLORD_ELECT).call(robot, null); - }else{ - RobotEventListener.get(ClientEventCode.CODE_GAME_POKER_PLAY).call(robot, null); - } - } - } - } - } + boolean allRobots = true; + for (ClientSide client : room.getClientSideList()) { + if (client.getId() != room.getCurrentSellClient() && client.getRole() == ClientRole.PLAYER) { + allRobots = false; + break; } } + + ClientSide currentPlayer = room.getClientSideMap().get(room.getCurrentSellClient()); + + if (allRobots) { + SimplePrinter.serverLog("room " + room.getId() + " all is robots, closed!"); + ServerEventListener.get(ServerEventCode.CODE_CLIENT_EXIT).call(currentPlayer, null); + return; + } + //kick this client + ChannelUtils.pushToClient(currentPlayer.getChannel(), ClientEventCode.CODE_CLIENT_KICK, null); + + notifyWatcherClientKick(room, currentPlayer); + + //client current player + room.getClientSideMap().remove(currentPlayer.getId()); + room.getClientSideList().remove(currentPlayer); + + ClientSide robot = new ClientSide(-ServerContains.getClientId(), ClientStatus.PLAYING, null); + robot.setNickname(currentPlayer.getNickname()); + robot.setRole(ClientRole.ROBOT); + robot.setRoomId(room.getId()); + robot.setNext(currentPlayer.getNext()); + robot.setPre(currentPlayer.getPre()); + robot.getNext().setPre(robot); + robot.getPre().setNext(robot); + robot.setPokers(currentPlayer.getPokers()); + robot.setType(currentPlayer.getType()); + + room.getClientSideMap().put(robot.getId(), robot); + room.getClientSideList().add(robot); + room.setCurrentSellClient(robot.getId()); + + //If last sell client is current client, replace it to robot id + if (room.getLastSellClient() == currentPlayer.getId()) { + room.setLastSellClient(robot.getId()); + } + + //set robot difficulty -> simple + room.setDifficultyCoefficient(1); + + ServerContains.CLIENT_SIDE_MAP.put(robot.getId(), robot); + + //init client + currentPlayer.init(); + + SimplePrinter.serverLog("room " + room.getId() + " player " + currentPlayer.getNickname() + " " + startingStatusInterval + "ms not operating, automatic custody!"); + + RobotEventListener.get(room.getLandlordId() == -1 ? ClientEventCode.CODE_GAME_LANDLORD_ELECT : ClientEventCode.CODE_GAME_POKER_PLAY).call(robot, null); } }