• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

ソケットを使ってクライアントサーバプログラムを作成するための C# ライブラリ


Commit MetaInfo

Révision03db556f2cfe46bfa6a81ea34d28a05eb97dc069 (tree)
l'heure2015-08-15 12:04:23
Auteurtsntsumi <tsntsumi@tsnt...>
Commitertsntsumi

Message de Log

Packet クラスをリファクタリング

ヘッダの構造が、デフォルトのヘッダ長 4 バイト、フッタ長 0 バ
イト、ペイロード長 = ヘッダ 4 バイトとは異なる場合、必ず
Packet クラスを継承してプロパティ・メソッドをオーバライドし
なければならなかったが、ヘッダ長とフッタ長とペイロード長の取
得方法が変わった程度の場合ならオーバライドしないでも良いよう
に変更した。

Change Summary

Modification

--- a/src/SocketNet/SampleChatClient/ChatMessage.cs
+++ b/src/SocketNet/SampleChatClient/ChatMessage.cs
@@ -15,8 +15,6 @@ namespace SampleChatClient
1515 /// </summary>
1616 public class ChatMessage: Packet
1717 {
18- public override int HeaderLength { get { return 2; } }
19-
2018 /// <summary>
2119 /// メッセージを送受信する接続を取得または設定します。
2220 /// </summary>
@@ -30,7 +28,7 @@ namespace SampleChatClient
3028 /// <summary>
3129 /// コンストラクタ。
3230 /// </summary>
33- public ChatMessage()
31+ public ChatMessage() : base(2, 0)
3432 {
3533 }
3634
@@ -40,6 +38,7 @@ namespace SampleChatClient
4038 /// <param name="message">メッセージ文字列。</param>
4139 /// <param name="connection">接続。</param>
4240 public ChatMessage(string message, TcpConnection connection = null)
41+ : base(2, 0)
4342 {
4443 Message = message;
4544 Connection = connection;
@@ -50,6 +49,10 @@ namespace SampleChatClient
5049 /// </summary>
5150 /// <returns>ペイロード長。</returns>
5251 /// <param name="header">ヘッダ。</param>
52+ /// <remarks>
53+ /// ベースクラスの Packet.ObtainPayloadLength() と同じことをしているため、
54+ /// 本来ならオーバライドする必要はないが、サンプルとして提供するため実装した。
55+ /// </remarks>
5356 public override int ObtainPayloadLength(byte[] header)
5457 {
5558 int payloadLength = header[0] << 8 | header[1];
--- a/src/SocketNet/SocketNet/Packet.cs
+++ b/src/SocketNet/SocketNet/Packet.cs
@@ -18,12 +18,23 @@ namespace SocketNet
1818 /// <summary>
1919 /// ヘッダ長を取得します。
2020 /// </summary>
21- public virtual int HeaderLength { get { return 4; } }
21+ public virtual int HeaderLength { get; private set; }
2222
2323 /// <summary>
2424 /// フッタ長を取得します。
2525 /// </summary>
26- public virtual int FooterLength { get { return 0; } }
26+ public virtual int FooterLength { get; private set; }
27+
28+ /// <summary>
29+ /// コンストラクタ。
30+ /// </summary>
31+ /// <param name="headerLength">ヘッダ長。</param>
32+ /// <param name="footerLength">フッタ長。</param>
33+ public Packet(int headerLength = 4, int footerLength = 0)
34+ {
35+ HeaderLength = headerLength;
36+ FooterLength = footerLength;
37+ }
2738
2839 /// <summary>
2940 /// 指定されたヘッダからペイロード長を取得します。
@@ -34,10 +45,11 @@ namespace SocketNet
3445 {
3546 int payloadLength = 0;
3647
37- if (header.Length < HeaderLength)
38- {
39- return 0;
40- }
48+ // header は必ず HeaderLength の長さで送られてくるためチェックする必要はない。
49+ // if (header.Length < HeaderLength)
50+ // {
51+ // return 0;
52+ // }
4153 for (int i = 0; i < HeaderLength; i++)
4254 {
4355 payloadLength = (payloadLength << 8) | header[i];