32nd Diary

トップ | 最新 | 過去の日記 | もっと過去の日記

2006年
4月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
めーるあどれす
ruby -rbase64 -e'puts Base64.decode64 %q(dGFrYW5vMzJAZ21haWwuY29t)'



2006-04-04 (Tuesday) [長年日記]

[Net][Windows] MSNP #2

MSN Messengerのプロトコルがやっとわかった.

現在の会話に参加しているユーザはSwitchboardに 接続しているすべてのユーザってことでいいみたいね.

MSNメッセンジャーのクライアント作った人いる? によると

VER,INF,USR,XFR,ANS(RNG),IRO,JOI,MSG,BYE,OUTだけ実装すれば、「メッセージを送られて、もしくは会話に招待されてからやりとりする」エージェントは作れる

らしい.

会話に参加しているユーザの流れ

ログインなどを済ませた後に, メッセージをこちらから送信する流れはこんな感じ.

  1. クライアントからXFRでSwitchboardを要求
  2. サーバはXFRでSwitchboardを返答
  3. クライアントからUSRで自分のIDを通知(サーバからUSRでOKの返答)
  4. --- Switchboardと接続完了 ---
  5. クライアントからCALで会話に招待(サーバからCALで呼び出し中を通知)
  6. サーバからJOIで会話に参加したユーザを通知(ユーザIDと表示名)
  7. MSGで会話 x N
  8. サーバからBYEで会話から抜けたユーザを通知

同様にメッセージを受信する場合はこんな感じ.

  1. サーバからRNGでサーバから招待のSwitchboardを通知
  2. クライアントからANSでSwitchboardに参加
  3. --- Switchboardと接続完了 ---
  4. サーバからIROでSwitchboardに参加しているユーザを通知(ユーザIDと表示名)
  5. MSGで会話 x N
  6. サーバからBYEで会話から抜けたユーザを通知

複数人で会話するときの流れがまだよくわかんない. いきなりJOIで接続してくんのかね.でも,解説によると,CALの応答とか書かれている...自分ではなく,他の人が誘った場合はどうなるんだろ. まぁ,実際やってみりゃわかるか.


こうして見ると比較的シンプルなプロトコルかも. しかし,これはTCPのコネクションを浪費しすぎだろう...

まぁ,この方が負荷の分散をしやすいか. それぞれの会話で別のサーバを使うこととかもできるかんなー.

本日のPingbacks(全0件)