Console client: Print player action.

This commit is contained in:
lotodore
2008-12-23 22:30:02 +00:00
parent 1548598944
commit 660168b8aa
11 changed files with 227 additions and 50 deletions
+11
View File
@@ -35,6 +35,17 @@ namespace pokerth_lib
River
}
public enum Action
{
None = 0,
Fold,
Check,
Call,
Bet,
Raise,
AllIn
}
public Hand(Dictionary<uint, Player> players, uint myPlayerId, uint smallBlind)
{
m_mutex = new Object();
+3
View File
@@ -10,6 +10,9 @@ namespace pokerth_lib
void JoinedGame(string name);
void GameStarted(List<string> players);
void HandStarted(Hand h);
void MyTurn(Hand.State state);
void PlayersTurn(Hand.State state, string player);
void ActionDone(string name, Hand.Action action, uint totalBet, uint money, uint highestSet, uint minimumRaise);
void Error(string message);
}
}
+60
View File
@@ -77,5 +77,65 @@ namespace pokerth_lib
}
return cardString;
}
public static string StateToString(Hand.State state)
{
string stateString;
switch (state)
{
case Hand.State.Preflop :
stateString = "Preflop";
break;
case Hand.State.Flop :
stateString = "Flop";
break;
case Hand.State.Turn :
stateString = "Turn";
break;
case Hand.State.River :
stateString = "River";
break;
default :
stateString = "Invalid state";
break;
}
return stateString;
}
public static string ActionToString(Hand.Action action)
{
string actionString;
switch (action)
{
case Hand.Action.None:
actionString = "None";
break;
case Hand.Action.Fold:
actionString = "Fold";
break;
case Hand.Action.Check:
actionString = "Check";
break;
case Hand.Action.Call:
actionString = "Call";
break;
case Hand.Action.Bet:
actionString = "Bet";
break;
case Hand.Action.Raise:
actionString = "Raise";
break;
case Hand.Action.AllIn:
actionString = "All in";
break;
default :
actionString = "Unknown action";
break;
}
return actionString;
}
}
}
+21 -1
View File
@@ -9,6 +9,7 @@ namespace pokerth_lib
public Player()
{
m_mutex = new Object();
m_curAction = Hand.Action.None;
}
public int[] Cards
@@ -30,6 +31,24 @@ namespace pokerth_lib
}
}
public Hand.Action CurAction
{
get
{
lock (m_mutex)
{
return m_curAction;
}
}
set
{
lock (m_mutex)
{
m_curAction = value;
}
}
}
public uint Money
{
get
@@ -48,7 +67,7 @@ namespace pokerth_lib
}
}
private uint TotalBet
public uint TotalBet
{
get
{
@@ -68,6 +87,7 @@ namespace pokerth_lib
private Object m_mutex;
private int[] m_cards;
private Hand.Action m_curAction;
private uint m_money;
private uint m_totalBet;
}
+18 -17
View File
@@ -23,23 +23,24 @@ using System.Text;
namespace pokerth_lib
{
interface INetPacketVisitor
public interface INetPacketVisitor
{
void VisitInit(NetPacketInit p);
void VisitInitAck(NetPacketInitAck p);
void VisitGameListNew(NetPacketGameListNew p);
void VisitGameListUpdate(NetPacketGameListUpdate p);
void VisitRetrievePlayerInfo(NetPacketRetrievePlayerInfo p);
void VisitPlayerInfo(NetPacketPlayerInfo p);
void VisitJoinGame(NetPacketJoinGame p);
void VisitJoinGameAck(NetPacketJoinGameAck p);
void VisitStartEvent(NetPacketStartEvent p);
void VisitStartEventAck(NetPacketStartEventAck p);
void VisitGameStart(NetPacketGameStart p);
void VisitHandStart(NetPacketHandStart p);
void VisitPlayersTurn(NetPacketPlayersTurn p);
void VisitPlayersAction(NetPacketPlayersAction p);
void VisitPlayersActionDone(NetPacketPlayersActionDone p);
void VisitPlayersActionRejected(NetPacketPlayersActionRejected p);
void VisitInit(NetPacket p);
void VisitInitAck(NetPacket p);
void VisitGameListNew(NetPacket p);
void VisitGameListUpdate(NetPacket p);
void VisitRetrievePlayerInfo(NetPacket p);
void VisitPlayerInfo(NetPacket p);
void VisitCreateGame(NetPacket p);
void VisitJoinGame(NetPacket p);
void VisitJoinGameAck(NetPacket p);
void VisitStartEvent(NetPacket p);
void VisitStartEventAck(NetPacket p);
void VisitGameStart(NetPacket p);
void VisitHandStart(NetPacket p);
void VisitPlayersTurn(NetPacket p);
void VisitPlayersAction(NetPacket p);
void VisitPlayersActionDone(NetPacket p);
void VisitPlayersActionRejected(NetPacket p);
}
}
+42 -7
View File
@@ -26,7 +26,7 @@ using System.IO;
namespace pokerth_lib
{
abstract class NetPacket
public abstract class NetPacket
{
public const int NetTypeInit = 0x0001;
public const int NetTypeInitAck = 0x0002;
@@ -133,7 +133,7 @@ namespace pokerth_lib
ActionRejectReason,
}
public enum ListPropertyType
public enum ListPropType
{
PlayerSlots,
ManualBlindSlots,
@@ -172,13 +172,16 @@ namespace pokerth_lib
case NetTypePlayersTurn :
tmpPacket = new NetPacketPlayersTurn(size, reader);
break;
case NetTypePlayersActionDone :
tmpPacket = new NetPacketPlayersActionDone(size, reader);
break;
default:
break;
}
return tmpPacket;
}
public void ScanGameInfoBlock(BinaryReader r)
protected void ScanGameInfoBlock(BinaryReader r)
{
Properties.Add(PropType.MaxNumPlayers,
Convert.ToString(IPAddress.NetworkToHostOrder((short)r.ReadUInt16())));
@@ -206,14 +209,46 @@ namespace pokerth_lib
List<string> blindSlots = new List<string>();
for (int i = 0; i < numManualBlinds; i++)
blindSlots.Add(Convert.ToString(IPAddress.NetworkToHostOrder((int)r.ReadUInt32())));
ListProperties.Add(ListPropertyType.ManualBlindSlots, blindSlots);
ListProperties.Add(ListPropType.ManualBlindSlots, blindSlots);
}
protected void WriteGameInfoBlock(BinaryWriter w)
{
w.Write(IPAddress.HostToNetworkOrder((short)
Convert.ToUInt16(Properties[PropType.MaxNumPlayers])));
w.Write(IPAddress.HostToNetworkOrder((short)
Convert.ToUInt16(Properties[PropType.RaiseIntervalMode])));
w.Write(IPAddress.HostToNetworkOrder((short)
Convert.ToUInt16(Properties[PropType.RaiseSmallBlindInterval])));
w.Write(IPAddress.HostToNetworkOrder((short)
Convert.ToUInt16(Properties[PropType.RaiseMode])));
w.Write(IPAddress.HostToNetworkOrder((short)
Convert.ToUInt16(Properties[PropType.EndRaiseMode])));
w.Write(IPAddress.HostToNetworkOrder((short)
ListProperties[ListPropType.ManualBlindSlots].Count));
w.Write(IPAddress.HostToNetworkOrder((short)
Convert.ToUInt16(Properties[PropType.ProposedGuiSpeed])));
w.Write(IPAddress.HostToNetworkOrder((short)
Convert.ToUInt16(Properties[PropType.PlayerActionTimeout])));
w.Write(IPAddress.HostToNetworkOrder((int)
Convert.ToUInt32(Properties[PropType.FirstSmallBlind])));
w.Write(IPAddress.HostToNetworkOrder((int)
Convert.ToUInt32(Properties[PropType.EndRaiseSmallBlindValue])));
w.Write(IPAddress.HostToNetworkOrder((int)
Convert.ToUInt32(Properties[PropType.StartMoney])));
foreach (string s in ListProperties[ListPropType.ManualBlindSlots])
{
w.Write(IPAddress.HostToNetworkOrder((int)
Convert.ToUInt32(s)));
}
}
public NetPacket(int type)
{
m_type = type;
m_properties = new Dictionary<PropType, string>();
m_listProperties = new Dictionary<ListPropertyType, List<string>>();
m_listProperties = new Dictionary<ListPropType, List<string>>();
}
public Dictionary<PropType, string> Properties
@@ -228,7 +263,7 @@ namespace pokerth_lib
}
}
public Dictionary<ListPropertyType, List<string>> ListProperties
public Dictionary<ListPropType, List<string>> ListProperties
{
set
{
@@ -259,6 +294,6 @@ namespace pokerth_lib
private int m_type;
private Dictionary<PropType, string> m_properties;
private Dictionary<ListPropertyType, List<string>> m_listProperties;
private Dictionary<ListPropType, List<string>> m_listProperties;
}
}
+1 -1
View File
@@ -23,7 +23,7 @@ using System.Text;
namespace pokerth_lib
{
class NetPacketException : Exception
public class NetPacketException : Exception
{
public NetPacketException(string message)
: base(message)
+1 -1
View File
@@ -98,7 +98,7 @@ namespace pokerth_lib
List<string> playerSlots = new List<string>();
for (int i = 0; i < curNumPlayers; i++)
playerSlots.Add(Convert.ToString(IPAddress.NetworkToHostOrder((int)r.ReadUInt32())));
ListProperties.Add(ListPropertyType.PlayerSlots, playerSlots);
ListProperties.Add(ListPropType.PlayerSlots, playerSlots);
}
public override void Accept(INetPacketVisitor visitor)
+1 -1
View File
@@ -58,7 +58,7 @@ namespace pokerth_lib
List<string> playerSlots = new List<string>();
for (int i = 0; i < curNumPlayers; i++)
playerSlots.Add(Convert.ToString(IPAddress.NetworkToHostOrder((int)r.ReadUInt32())));
ListProperties.Add(ListPropertyType.PlayerSlots, playerSlots);
ListProperties.Add(ListPropType.PlayerSlots, playerSlots);
}
public override void Accept(INetPacketVisitor visitor)
+48 -22
View File
@@ -32,31 +32,35 @@ namespace pokerth_lib
m_callback = callback;
}
public void VisitInit(NetPacketInit p)
public void VisitInit(NetPacket p)
{
throw new NotImplementedException();
}
public void VisitInitAck(NetPacketInitAck p)
public void VisitInitAck(NetPacket p)
{
m_data.MyPlayerId =
Convert.ToUInt32(p.Properties[NetPacket.PropType.PlayerId]);
// Add self to list.
m_data.PlayerList.AddPlayerInfo(new PlayerInfo(
m_data.MyPlayerId,
m_data.MyName));
m_callback.InitDone();
}
public void VisitGameListNew(NetPacketGameListNew p)
public void VisitGameListNew(NetPacket p)
{
// Add game to list.
m_data.GameList.AddGameInfo(new GameInfo(
Convert.ToUInt32(p.Properties[NetPacket.PropType.GameId]),
p.Properties[NetPacket.PropType.GameName],
(GameInfo.Mode)Convert.ToInt32(p.Properties[NetPacket.PropType.GameMode]),
p.ListProperties[NetPacket.ListPropertyType.PlayerSlots].
p.ListProperties[NetPacket.ListPropType.PlayerSlots].
ConvertAll<uint>(Convert.ToUInt32),
Convert.ToUInt32(p.Properties[NetPacket.PropType.StartMoney])));
}
public void VisitGameListUpdate(NetPacketGameListUpdate p)
public void VisitGameListUpdate(NetPacket p)
{
GameInfo.Mode mode =
(GameInfo.Mode)Convert.ToInt32(p.Properties[NetPacket.PropType.GameMode]);
@@ -67,12 +71,12 @@ namespace pokerth_lib
m_data.GameList.GetGameInfo(id).CurrentMode = mode;
}
public void VisitRetrievePlayerInfo(NetPacketRetrievePlayerInfo p)
public void VisitRetrievePlayerInfo(NetPacket p)
{
throw new NotImplementedException();
}
public void VisitPlayerInfo(NetPacketPlayerInfo p)
public void VisitPlayerInfo(NetPacket p)
{
// Add player to list.
m_data.PlayerList.AddPlayerInfo(new PlayerInfo(
@@ -80,19 +84,24 @@ namespace pokerth_lib
p.Properties[NetPacket.PropType.PlayerName]));
}
public void VisitJoinGame(NetPacketJoinGame p)
public void VisitCreateGame(NetPacket p)
{
throw new NotImplementedException();
}
public void VisitJoinGameAck(NetPacketJoinGameAck p)
public void VisitJoinGame(NetPacket p)
{
throw new NotImplementedException();
}
public void VisitJoinGameAck(NetPacket p)
{
m_data.MyGameId =
Convert.ToUInt32(p.Properties[NetPacket.PropType.GameId]);
m_callback.JoinedGame(m_data.GameList.GetGameInfo(m_data.MyGameId).Name);
}
public void VisitStartEvent(NetPacketStartEvent p)
public void VisitStartEvent(NetPacket p)
{
// Request player names for player ids.
List<uint> playerSlots = m_data.GameList.GetGameInfo(m_data.MyGameId).PlayerSlots;
@@ -110,17 +119,17 @@ namespace pokerth_lib
m_sender.Send(ack);
}
public void VisitStartEventAck(NetPacketStartEventAck p)
public void VisitStartEventAck(NetPacket p)
{
throw new NotImplementedException();
}
public void VisitGameStart(NetPacketGameStart p)
public void VisitGameStart(NetPacket p)
{
// Generate player list, for gui and as hand data.
List<string> strPlayers = new List<string>();
List<uint> slots = p.ListProperties[NetPacket.ListPropertyType.PlayerSlots].
List<uint> slots = p.ListProperties[NetPacket.ListPropType.PlayerSlots].
ConvertAll<uint>(Convert.ToUInt32);
m_players = new Dictionary<uint, Player>();
@@ -128,8 +137,6 @@ namespace pokerth_lib
{
if (m_data.PlayerList.HasPlayer(i))
strPlayers.Add(m_data.PlayerList.GetPlayerInfo(i).Name);
else if (i == m_data.MyPlayerId)
strPlayers.Add(m_data.MyName);
else
strPlayers.Add(Convert.ToString(i));
// Set player data.
@@ -141,7 +148,7 @@ namespace pokerth_lib
m_callback.GameStarted(strPlayers);
}
public void VisitHandStart(NetPacketHandStart p)
public void VisitHandStart(NetPacket p)
{
int[] tmpCards = new int[2];
tmpCards[0] =
@@ -156,22 +163,41 @@ namespace pokerth_lib
m_callback.HandStarted(m_data.CurHand);
}
public void VisitPlayersTurn(NetPacketPlayersTurn p)
public void VisitPlayersTurn(NetPacket p)
{
// TODO
uint curPlayer = Convert.ToUInt32(p.Properties[NetPacket.PropType.PlayerId]);
Hand.State state = (Hand.State)Convert.ToUInt16(p.Properties[NetPacket.PropType.GameState]);
if (curPlayer == m_data.MyPlayerId)
m_callback.MyTurn(state);
else
m_callback.PlayersTurn(state, m_data.PlayerList.GetPlayerInfo(curPlayer).Name);
}
public void VisitPlayersAction(NetPacketPlayersAction p)
public void VisitPlayersAction(NetPacket p)
{
throw new NotImplementedException();
}
public void VisitPlayersActionDone(NetPacketPlayersActionDone p)
public void VisitPlayersActionDone(NetPacket p)
{
// TODO
uint playerId = Convert.ToUInt32(p.Properties[NetPacket.PropType.PlayerId]);
Player curPlayer = m_data.CurHand.Players[playerId];
curPlayer.CurAction =
(Hand.Action)Convert.ToUInt16(p.Properties[NetPacket.PropType.PlayerAction]);
curPlayer.Money =
Convert.ToUInt32(p.Properties[NetPacket.PropType.PlayerMoney]);
curPlayer.TotalBet =
Convert.ToUInt32(p.Properties[NetPacket.PropType.PlayerBetTotal]);
m_callback.ActionDone(
m_data.PlayerList.GetPlayerInfo(playerId).Name,
curPlayer.CurAction,
curPlayer.TotalBet,
curPlayer.Money,
Convert.ToUInt32(p.Properties[NetPacket.PropType.HighestSet]),
Convert.ToUInt32(p.Properties[NetPacket.PropType.MinimumRaise]));
}
public void VisitPlayersActionRejected(NetPacketPlayersActionRejected p)
public void VisitPlayersActionRejected(NetPacket p)
{
// TODO
}