私のアプリケーションには、PacketList
クラスとPacket
クラスがあります。PacketList
シリアル化ヘルパーを使用して、目的の出力のようなものを考え出すことができるようにしたいと思いますが、どの方向に進むべきかわかりません。
私は、データを送信するための独特のプロトコルを持つサーバーを模倣するプログラムを書いています。
クライアントは次の形式でデータを送信します:COMMAND|ARGUMENT_0|ARGUMENT_1|ARGUMENT_2|...|ARGUMENT_N\0
。COMMAND
またはのようなものはどこにありますMOVE
かLOGIN
。
サーバーは次の形式で応答します。
<p c='COUNT'>
<m p='N' p0='COMMAND_0' p1='ARUGMENT_0' ... pN='ARGUMENT_N'/>
<m p='N' p0='COMMAND_1' p1='ARUGMENT_0' ... pN='ARGUMENT_N'/>
<m p='N' p0='COMMAND_2' p1='ARUGMENT_0' ... pN='ARGUMENT_N'/>
<m p='N' p0='COMMAND_3' p1='ARUGMENT_0' ... pN='ARGUMENT_N'/>
...
<m p='N' p0='COMMAND_COUNT' p1='ARUGMENT_0' ... pN='ARGUMENT_N'/>
</p>
COMMAND_0
またはのようなものはどこにありますUPDATE_POSITION
かAUTHENTICATED
。
はい、これは物事を行うためのばかげた方法です。いいえ、なぜこのように行われたのかわかりません。いいえ、変更できません。
とにかく、私はサーバーがパケットをクライアントに送り返す方法をエミュレートしようとしています。私がこれまでに得たものは次のとおりです。
XmlWriterSettings _Settings = new XmlWriterSettings {
OmitXmlDeclaration = true,
Indent = true
};
StringBuilder _Xml = new StringBuilder();
XmlWriter _Writer = XmlWriter.Create(_Xml, _Settings);
_Writer.WriteStartElement("p");
_Writer.WriteAttributeString("c", "1");
_Writer.WriteStartElement("m");
_Writer.WriteAttributeString("p", "2");
_Writer.WriteAttributeString("p0", "COMMAND");
_Writer.WriteAttributeString("p1", "ARGUMENT_0");
_Writer.WriteAttributeString("p2", "ARGUMENT_1");
_Writer.WriteEndElement(); // </m>
_Writer.WriteEndElement(); // </p>
_Writer.Flush();
Console.WriteLine(_Xml.ToString());
これは正しく機能し、以下を出力します。
<p c="1">
<m p="2" p0="COMMAND" p1="ARGUMENT_0" p2="ARGUMENT_1" />
</p>
ただし、これをよりクリーンな方法で実装したいと思います。
私PacketList
は基本的にPacket
sのリストをPacket
含み、aString _Command
とを含みますString[] _Arguments
。
誰かが私を正しい方向に導くことができれば、それは大いにありがたいです。