From 52fc37a8b79eee50d4c4cd9f443405091bdd3642 Mon Sep 17 00:00:00 2001 From: lotodore Date: Fri, 26 Dec 2008 20:01:25 +0000 Subject: [PATCH] Console client: Display chat messages. --- console/src/ConsoleCallback.cs | 7 +++ console/src/lib/ICallback.cs | 1 + console/src/lib/net/INetPacketVisitor.cs | 1 + console/src/lib/net/NetPacket.cs | 4 ++ console/src/lib/net/NetPacketChatText.cs | 64 ++++++++++++++++++++++++ console/src/lib/net/NetParser.cs | 14 ++++++ 6 files changed, 91 insertions(+) create mode 100644 console/src/lib/net/NetPacketChatText.cs diff --git a/console/src/ConsoleCallback.cs b/console/src/ConsoleCallback.cs index ba6b8392..849177b2 100644 --- a/console/src/ConsoleCallback.cs +++ b/console/src/ConsoleCallback.cs @@ -150,6 +150,13 @@ namespace pokerth_console Console.WriteLine("\n{0} wins the game.", name); } + public void ChatText(string name, string message) + { + Console.WriteLine("{0}: {1}", + name, + message); + } + public void Error(string message) { Console.WriteLine("Error: " + message); diff --git a/console/src/lib/ICallback.cs b/console/src/lib/ICallback.cs index 87748f8c..e56786a6 100644 --- a/console/src/lib/ICallback.cs +++ b/console/src/lib/ICallback.cs @@ -43,6 +43,7 @@ namespace pokerth_lib void HandResult(); void PlayerWinsHand(string name, uint moneyWon); void PlayerWinsGame(string name); + void ChatText(string name, string message); void Error(string message); } } diff --git a/console/src/lib/net/INetPacketVisitor.cs b/console/src/lib/net/INetPacketVisitor.cs index 3bcbd1b9..4002a298 100644 --- a/console/src/lib/net/INetPacketVisitor.cs +++ b/console/src/lib/net/INetPacketVisitor.cs @@ -52,6 +52,7 @@ namespace pokerth_lib void VisitEndOfHandShowCards(NetPacket p); void VisitEndOfHandHideCards(NetPacket p); void VisitEndOfGame(NetPacket p); + void VisitChatText(NetPacket p); void VisitError(NetPacket p); } } diff --git a/console/src/lib/net/NetPacket.cs b/console/src/lib/net/NetPacket.cs index 64d73524..bbf53757 100644 --- a/console/src/lib/net/NetPacket.cs +++ b/console/src/lib/net/NetPacket.cs @@ -144,6 +144,7 @@ namespace pokerth_lib BestHandPos4, BestHandPos5, CardsValue, + ChatText, } public enum ListPropType @@ -221,6 +222,9 @@ namespace pokerth_lib case NetTypeEndOfGame : tmpPacket = new NetPacketEndOfGame(size, reader); break; + case NetTypeChatText : + tmpPacket = new NetPacketChatText(size, reader); + break; case NetTypeError : tmpPacket = new NetPacketError(size, reader); break; diff --git a/console/src/lib/net/NetPacketChatText.cs b/console/src/lib/net/NetPacketChatText.cs new file mode 100644 index 00000000..e29506e7 --- /dev/null +++ b/console/src/lib/net/NetPacketChatText.cs @@ -0,0 +1,64 @@ +/*************************************************************************** + * Copyright (C) 2008 by Lothar May * + * * + * This file is part of pokerth_console. * + * pokerth_console is free software: you can redistribute it and/or * + * modify it under the terms of the GNU Affero General Public License * + * as published by the Free Software Foundation, either version 3 of * + * the License, or (at your option) any later version. * + * * + * pokerth_console is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the * + * GNU Affero General Public License along with pokerth_console. * + * If not, see . * + ***************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.Net; +using System.Net.Sockets; +using System.IO; + + +namespace pokerth_lib +{ + class NetPacketChatText : NetPacket + { + public NetPacketChatText() + : base(NetPacket.NetTypeChatText) + { + } + + public NetPacketChatText(int size, BinaryReader r) + : base(NetPacket.NetTypeChatText) + { + if (size < 12) + throw new NetPacketException("NetPacketChatText invalid size."); + Properties.Add(PropType.PlayerId, + Convert.ToString(IPAddress.NetworkToHostOrder((int)r.ReadUInt32()))); + int textLen = IPAddress.NetworkToHostOrder((short)r.ReadUInt16()); + + r.ReadUInt16(); // reserved + + // Read chat text. + byte[] tmpText = r.ReadBytes(textLen); + Properties.Add(PropType.ChatText, + Encoding.UTF8.GetString(tmpText)); + } + + public override void Accept(INetPacketVisitor visitor) + { + visitor.VisitChatText(this); + } + + public override byte[] ToByteArray() + { + throw new NotImplementedException(); + } + } +} diff --git a/console/src/lib/net/NetParser.cs b/console/src/lib/net/NetParser.cs index be273621..50a36ddf 100644 --- a/console/src/lib/net/NetParser.cs +++ b/console/src/lib/net/NetParser.cs @@ -358,6 +358,20 @@ namespace pokerth_lib m_data.JoinedGame = false; } + public void VisitChatText(NetPacket p) + { + uint playerId = Convert.ToUInt32(p.Properties[NetPacket.PropType.PlayerId]); + string name; + if (playerId == 0) + name = "(global notice)"; + else + name = m_data.PlayerList.GetPlayerInfo(playerId).Name; + + m_callback.ChatText( + name, + p.Properties[NetPacket.PropType.ChatText]); + } + public void VisitError(NetPacket p) { m_callback.Error(p.Properties[NetPacket.PropType.ErrorReason]);