---------------------------------------------------------------------- Chasuke Protocol / 1.0 プロトコル仕様(ドラフト2版) 97.12.09 Modify 97.12.30 宮前 竜也 ---------------------------------------------------------------------- UDP プロトコルを使用します。(デフォルトポート:2427) ---------------------------------------------------------------------- ■ パケットフォーマット ---------------------------------------------------------------------- ●文字コードと改行コード 文字コードと改行コードは以下の通り既定します。 文字コード:SJIS 改行コード:CR+LF (x0A0D) ●パケットの構成 パケットは、プロトコル識別ヘッダ部、メッセージヘッダ部、本体部から構 成されます。 1.プロトコル識別ヘッダ部 CHASUKE/1.0 の1行です。先頭行がこれと完全に一致しないパケットは受 信処理してはいけません。将来プロトコル仕様に変更があり、従来のプロ トコルと互換性がなくなった際には、このヘッダ文字列は変更されます。 2.メッセージヘッダ部 1つのヘッダは「ヘッダ名:値」(例 To: 10.36.8.124)の1行で表され、 複数個指定されます。ヘッダ名のコロンの後ろには空白が置かれる場合も あります。ヘッダ部の最後には空行が必要です。 ヘッダの種類(常に必要なもの) Command コマンドの種類をあらわす数値(後述) To 宛先をあらわすIPアドレス(カンマ区切りで複数指定) From 送信者の名前(任意) @の後ろにグループ名を指定できます(例:みやまえ@Aグループ) 従ってユーザー名やグループ名に@は使えません。 Packet-Id プロセス内でユニークな long 型の整数 その他のヘッダ Received-Packet-Id メッセージを受信した再の確認パケットで使用 Absence 不在状態を示す From-Address 送信者 IP アドレス(省略可) 3.本体部 メッセージの本文です。今のところ Command が lcCmdSendMsg(20) の場合 のみ有効です。 ●メッセージ送信パケットの例 CHASUKE/1.0 Command: 20 To: 10.36.8.124 From: みやまえ@Aグループ Packet-Id: 263764 こんにちは。 今忙しい? ●コマンドの種類 lcCmdEntry 1 参加(起動時にブロードキャストする) lcCmdExit 2 退出(終了時にブロードキャストする) lcCmdAnsentry 3 新しい参加者を認識したことを通知 lcCmdAbsence 4 情報更新を要求 lcCmdSendMsg 20 メッセージの送信 lcCmdReceiveMsg 21 メッセージの受信確認 ---------------------------------------------------------------------- ■ 参加者認識(参加と退出) ---------------------------------------------------------------------- ●参加するには以下の手順に従います。 1.新規参加者は lcCmdEntry コマンドをブロードキャストします。 2.他の参加者は lcCmdEntry コマンドを受け取ると、新規参加者として認識 します。ただしすでに参加者に含まれている場合は無視します。次に、 lcCmdAnsentry コマンドを送り返します。 3.新規参加者は、lcCmdAnsentry コマンドを受け取ると参加者として認識し ます。 ●退出するには以下の手順に従います。 1.退出者は lcCmdExit コマンドをブロードキャストします。 2.他の参加者は、lcCmdExit コマンドを受け取ると、参加者から削除します。 ---------------------------------------------------------------------- ■ メッセージの送受信 ---------------------------------------------------------------------- ●メッセージの送受信は以下の手順に従います。 1.送信者は、lcCmdSendMsg コマンドを指定して、 パケットの本体部にメッ セージ本文を入れて送信します。 2.受信者は、lcCmdSendMsg コマンドを受け取ると、 lcCmdReceiveMsg コマ ンドを送り返します。この際、Received-Packet-Id ヘッダに、受信パケッ トの Packet-Id を指定します。 3.送信者は、自分が送った lcCmdReceiveMsg コマンドを受け取ると、 Received-Packet-Id を比較し、送信に成功したことを認識します。 ●複数宛てへの送信(同報) 複数の参加者に同報する場合は、 To ヘッダに、相手の IP アドレスをカン マで区切って並べます(間に空白が入る場合もあります)。これにより、受 信者は、同報者を認識することができます。 例)To: 10.36.8.124, 10.36.8,123, 10.36.7.10 ---------------------------------------------------------------------- ■ 情報更新の要求 ---------------------------------------------------------------------- ● ニックネーム、グループ名、不在モード等、自分の情報を変更した場合は、 他のメンバーに変更を通知するため、以下の手順に従います。 1.lcCmdAbsence コマンドをブロードキャストします。 2.lcCmdAbsence コマンドを受け取ると、送信者の情報が変更されたことを 認識します。 ---------------------------------------------------------------------- ■ 不在モード ---------------------------------------------------------------------- 不在モードでは、 全てのパケットに Absence ヘッダ(値は不在状況を表す文 字列)を付加します。 ---------------------------------------------------------------------- ■ ちゃ助サーバ ---------------------------------------------------------------------- ちゃ助サーバは、参加者を一元管理します。ちゃ助サーバを使用する場合は、 ブロードキャストする代わりに、ちゃ助サーバに対してコマンドを送ります。 ちゃ助サーバは参加者の代理で管理されている参加者全員にパケットを送りま その際 From-Address ヘッダを指定します。 ● 参加 1.新規参加者は、ちゃ助サーバに対して lcCmdEntry コマンドを送ります。 2.ちゃ助サーバは lcCmdEntry コマンドを受け取ると新規参加者を認識しま す。ただしすでに参加者に含まれている場合は無視します。 3.ちゃ助サーバは現在の参加者全員に lcCmdEntry コマンドを送ります。 ● 退出 1.退出者は、ちゃ助サーバに対して lcCmdExit コマンドを送ります。 2.ちゃ助サーバは lcCmdExit コマンドを受け取ると参加者から削除します。 3.ちゃ助サーバは現在の参加者全員に lcCmdExit コマンドを送ります。 ● 情報更新の要求 1.lcCmdAbsence コマンドを、ちゃ助サーバに送ります。 2.ちゃ助サーバは lcCmdAbsence コマンドを受け取ると、送信者の情報が変 更されたことを認識します。 3.ちゃ助サーバは現在の参加者全員に lcCmdAbsence コマンドを送ります。