summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rw-r--r--engine/Action.java83
-rw-r--r--engine/Engine.java15
-rw-r--r--engine/Logger.java7
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="";