diff options
Diffstat (limited to 'engine')
-rw-r--r-- | engine/Action.java | 83 | ||||
-rw-r--r-- | engine/Engine.java | 15 | ||||
-rw-r--r-- | engine/Logger.java | 7 |
3 files changed, 94 insertions, 11 deletions
diff --git a/engine/Action.java b/engine/Action.java index 3009fa0..3f2f365 100644 --- a/engine/Action.java +++ b/engine/Action.java @@ -1,29 +1,38 @@ package mahjong.engine; +import java.util.Random; + /** * Created by joe on 12/3/14. + * Action handles information passing between server and clients */ public class Action { // TODO Generic action // Requirement: printable,parseable,coverage // Coverage: System,player - public enum Type {System,Player}; + private static Random idGen = new Random(); + private static int cnter = 0; + public enum Type {System,Player} // System info merely reflect system state // Player info pertaining to players; - public enum Place {Info,East,South,West,North}; - public enum Act {Info,CardDraw,CardPut,Aside}; + public enum Place {Info,East,South,West,North} + public enum Act {Info,Draw,Put,Meld} Type type; Act act; Place place; String message; + int guid; - public Type getType() { - return type; + public void newGUID() + { + this.guid=(idGen.nextInt()&0xFFF000)+cnter; + cnter = (cnter+1)&0xFFF; } public Action(Type type,Place place,Act act,String message) { + newGUID(); this.type = type; this.place = place; this.act = act; @@ -31,10 +40,72 @@ public class Action { } public Action(String str) { + String[] res=str.trim().split("\t"); + guid = Integer.parseInt(res[0]); + switch (res[1].trim().toUpperCase().charAt(0)) + { + case 'S': + type=Type.System; + break; + case 'P': + type=Type.Player; + } + switch (res[2].trim().toUpperCase().charAt(0)) + { + case 'I': + place=Place.Info; + break; + case 'E': + place=Place.East; + break; + case 'S': + place=Place.South; + break; + case 'W': + place=Place.West; + break; + case 'N': + place=Place.North; + } + switch (res[3].trim().toUpperCase().charAt(0)) + { + case 'I': + act=Act.Info; + break; + case 'D': + act=Act.Draw; + break; + case 'P': + act=Act.Put; + break; + case 'M': + act=Act.Meld; + } + message=res[4]; } @Override public String toString() { - return super.toString(); + return String.format("%d\t%c\t%c\t%c\t%s",guid,type.toString().charAt(0),place.toString().charAt(0),act.toString().charAt(0),message); + } + + public Act getAct() { + return act; + } + + public Place getPlace() { + return place; + } + + public String getMessage() { + return message; + } + + public int getGuid() { + return guid; + } + + public Type getType() { + return type; } } diff --git a/engine/Engine.java b/engine/Engine.java index 6a8773d..7507ca1 100644 --- a/engine/Engine.java +++ b/engine/Engine.java @@ -1,7 +1,7 @@ package mahjong.engine; import mahjong.aux.Card; -import mahjong.aux.set.Aside; +import mahjong.aux.set.Meld; import mahjong.aux.set.Set; import mahjong.player.GenericPlayer; import mahjong.player.PlayerActionServer; @@ -46,10 +46,15 @@ public class Engine { deck = Deck.generateDeck(true); } - public static void playerPutAsideCards(GenericPlayer player, Card card, Aside aside) + public boolean sync4Player(int id) + { + return (players[id].stateAlert(new Action(Action.Type.System, Action.Place.Info, Action.Act.Info,"Heartbeat")).getMessage().compareTo("ACK")==0); + } + + public static void playerPutAsideCards(GenericPlayer player, Card card, Meld meld) { boolean mark=true; - for (Card asCard:aside.getRep()) + for (Card asCard:meld.getRep()) if (card.getId() == asCard.getId() && mark) mark = true; else @@ -58,7 +63,7 @@ public class Engine { public void mainLoop() { - start(); + /*start(); boolean hu=false; int pos=0; while (!hu && deck.getSize()>0) @@ -97,6 +102,6 @@ public class Engine { // pos=(pos+1)%4; - } + }*/ } } diff --git a/engine/Logger.java b/engine/Logger.java index fb56698..566fa08 100644 --- a/engine/Logger.java +++ b/engine/Logger.java @@ -19,6 +19,13 @@ public class Logger { actions.add(action); } + public int getLastGuidIndex() + { + if (actions.size()==0) + return -1; + return actions.lastElement().getGuid(); + } + @Override public String toString() { String str=""; |