From 28e7accd9009c25faeba9a6662ecaf9d7b691eb2 Mon Sep 17 00:00:00 2001 From: lotodore Date: Tue, 23 Dec 2008 02:15:49 +0000 Subject: [PATCH] Console client: Display cards of player for each hand. Display server messages. --- console/src/PlayerInfoList.cs | 8 ++++++++ console/src/PokerTHData.cs | 12 ++++++++++- console/src/Program.cs | 9 +++++---- console/src/net/Client.cs | 14 +++++++------ console/src/net/NetParser.cs | 33 ++++++++++++++++++++++--------- console/src/net/ReceiverThread.cs | 4 ++-- 6 files changed, 58 insertions(+), 22 deletions(-) diff --git a/console/src/PlayerInfoList.cs b/console/src/PlayerInfoList.cs index 42654322..16b4a2e4 100644 --- a/console/src/PlayerInfoList.cs +++ b/console/src/PlayerInfoList.cs @@ -42,6 +42,14 @@ namespace pokerth_console } } + public PlayerInfo GetPlayerInfo(uint id) + { + lock (m_list) + { + return m_list[id]; + } + } + public bool HasPlayer(uint id) { lock (m_list) diff --git a/console/src/PokerTHData.cs b/console/src/PokerTHData.cs index 0c10fbc3..5a8f0c65 100644 --- a/console/src/PokerTHData.cs +++ b/console/src/PokerTHData.cs @@ -25,13 +25,14 @@ namespace pokerth_console { class PokerTHData { - public PokerTHData() + public PokerTHData(string name) { m_gameInfoList = new GameInfoList(); m_playerInfoList = new PlayerInfoList(); m_mutex = new Object(); m_myPlayerId = 0; m_myGameId = 0; + m_myName = name; } public GameInfoList GameList @@ -50,6 +51,14 @@ namespace pokerth_console } } + public string MyName + { + get + { + return m_myName; + } + } + public uint MyPlayerId { get @@ -91,5 +100,6 @@ namespace pokerth_console private Object m_mutex; private uint m_myPlayerId; private uint m_myGameId; + private string m_myName; } } diff --git a/console/src/Program.cs b/console/src/Program.cs index 9c4645dd..e8e7e5c0 100644 --- a/console/src/Program.cs +++ b/console/src/Program.cs @@ -29,11 +29,12 @@ namespace pokerth_console static int Main(string[] args) { Settings settings = new Settings(); - PokerTHData data = new PokerTHData(); - Client client = new Client(settings, data); + PokerTHData data = new PokerTHData("Testuser1"); + ConsoleCallback callback = new ConsoleCallback(); + Client client = new Client(settings, data, callback); client.Connect(); client.Start(); - Thread.Sleep(5000); + Thread.Sleep(2000); Console.WriteLine("Open Games:"); Console.Write(data.GameList.ToString()); Console.WriteLine(); @@ -41,7 +42,7 @@ namespace pokerth_console string input = Console.ReadLine(); uint gameId = Convert.ToUInt32(input); client.JoinGame(gameId); - Thread.Sleep(5000000); + input = Console.ReadLine(); client.SetTerminateFlag(); client.WaitTermination(); return 0; diff --git a/console/src/net/Client.cs b/console/src/net/Client.cs index 5db031f2..6b35b7fc 100644 --- a/console/src/net/Client.cs +++ b/console/src/net/Client.cs @@ -27,22 +27,23 @@ namespace pokerth_console { class Client { - public Client(Settings settings, PokerTHData data) + public Client(Settings settings, PokerTHData data, ICallback callback) { m_tcpClient = new TcpClient(); m_settings = settings; m_data = data; + m_callback = callback; } public void Connect() { // Connect to the server. // Try IPv6 first. - IPAddress[] addresses = new IPAddress[2]; + /*IPAddress[] addresses = new IPAddress[2]; addresses[0] = IPAddress.Parse(m_settings.ServerSettings.IPv6Address); addresses[1] = IPAddress.Parse(m_settings.ServerSettings.IPv4Address); - m_tcpClient.Connect(addresses, m_settings.ServerSettings.Port); - //m_tcpClient.Connect("localhost", 7234); + m_tcpClient.Connect(addresses, m_settings.ServerSettings.Port);*/ + m_tcpClient.Connect("localhost", 7234); } public void Start() @@ -71,7 +72,7 @@ namespace pokerth_console protected void StartReceiveThread() { - m_receiver = new ReceiverThread(m_tcpClient.GetStream(), m_sender, m_data); + m_receiver = new ReceiverThread(m_tcpClient.GetStream(), m_sender, m_data, m_callback); m_receiver.Run(); } @@ -86,7 +87,7 @@ namespace pokerth_console NetPacket init = new NetPacketInit(); init.Properties.Add(NetPacket.PropertyType.RequestedVersionMajor, "5"); init.Properties.Add(NetPacket.PropertyType.RequestedVersionMinor, "0"); - init.Properties.Add(NetPacket.PropertyType.PlayerName, "Testuser1"); + init.Properties.Add(NetPacket.PropertyType.PlayerName, m_data.MyName); init.Properties.Add(NetPacket.PropertyType.PlayerPassword, ""); m_sender.Send(init); } @@ -104,5 +105,6 @@ namespace pokerth_console private SenderThread m_sender; private Settings m_settings; private PokerTHData m_data; + private ICallback m_callback; } } diff --git a/console/src/net/NetParser.cs b/console/src/net/NetParser.cs index b4a2a776..cc371a93 100644 --- a/console/src/net/NetParser.cs +++ b/console/src/net/NetParser.cs @@ -25,10 +25,11 @@ namespace pokerth_console { class NetParser : INetPacketVisitor { - public NetParser(PokerTHData data, SenderThread sender) + public NetParser(PokerTHData data, SenderThread sender, ICallback callback) { m_data = data; m_sender = sender; + m_callback = callback; } public void VisitInit(NetPacketInit p) @@ -40,6 +41,7 @@ namespace pokerth_console { m_data.MyPlayerId = Convert.ToUInt32(p.Properties[NetPacket.PropertyType.PlayerId]); + m_callback.InitDone(); } public void VisitGameListNew(NetPacketGameListNew p) @@ -86,6 +88,7 @@ namespace pokerth_console { m_data.MyGameId = Convert.ToUInt32(p.Properties[NetPacket.PropertyType.GameId]); + m_callback.JoinedGame(m_data.GameList.GetGameInfo(m_data.MyGameId).Name); } public void VisitStartEvent(NetPacketStartEvent p) @@ -113,41 +116,53 @@ namespace pokerth_console public void VisitGameStart(NetPacketGameStart p) { - throw new NotImplementedException(); - // TODO + // Generate player list. + List players = new List(); + + List slots = p.ListProperties[NetPacket.ListPropertyType.PropPlayerSlots]. + ConvertAll(Convert.ToUInt32); + foreach (uint i in slots) + { + if (m_data.PlayerList.HasPlayer(i)) + players.Add(m_data.PlayerList.GetPlayerInfo(i).Name); + else if (i == m_data.MyPlayerId) + players.Add(m_data.MyName); + else + players.Add(Convert.ToString(i)); + } + + m_callback.GameStarted(players); } public void VisitHandStart(NetPacketHandStart p) { - throw new NotImplementedException(); - // TODO + m_callback.HandStarted( + Convert.ToInt32(p.Properties[NetPacket.PropertyType.FirstCard]), + Convert.ToInt32(p.Properties[NetPacket.PropertyType.SecondCard])); } public void VisitPlayersTurn(NetPacketPlayersTurn p) { - throw new NotImplementedException(); // TODO } public void VisitPlayersAction(NetPacketPlayersAction p) { throw new NotImplementedException(); - // TODO } public void VisitPlayersActionDone(NetPacketPlayersActionDone p) { - throw new NotImplementedException(); // TODO } public void VisitPlayersActionRejected(NetPacketPlayersActionRejected p) { - throw new NotImplementedException(); // TODO } private PokerTHData m_data; private SenderThread m_sender; + private ICallback m_callback; } } diff --git a/console/src/net/ReceiverThread.cs b/console/src/net/ReceiverThread.cs index 10d1e6b4..176edc9b 100644 --- a/console/src/net/ReceiverThread.cs +++ b/console/src/net/ReceiverThread.cs @@ -32,14 +32,14 @@ namespace pokerth_console const uint MaxPacketSize = 268; const uint MinPacketSize = 8; - public ReceiverThread(NetworkStream stream, SenderThread sender, PokerTHData data) + public ReceiverThread(NetworkStream stream, SenderThread sender, PokerTHData data, ICallback callback) : base(stream) { m_recBuf = new byte[8192]; m_recBufOffset = 0; m_packetList = new List(); m_sender = sender; - m_parser = new NetParser(data, sender); + m_parser = new NetParser(data, sender, callback); } protected override void Start()