MSN Messenger Protocol その3

Payloadメッセージの受信の部分に問題があることが発覚。修正。
会話セッションのリクエストの処理、メッセージの受信、メッセージの送信と基本的機能の実装終了。


Payloadメッセージの受信部分に問題があることが発覚。
なんてことはない、今までコマンドはすべて改行で区切られているとばかり思っていたが、Payloadメッセージに関しては、最後に改行がつかない。頭のコマンドの引数にバイト数がくるのでそれを使って受信しなければならない。
あれほどしつこいくらいにドキュメントに書いてあるのに、すっかり忘れてた。
ということで、メッセージ受信部分の大改造。
おかげで、UTF-8がどんなエンコードなのか理解することができてしまった。
コピーが何発か入っていて、ちょっとだけ効率が悪いので、その部分に関してはあとで見直すこととしよう。
ストリームから非同期でデータを読み出す関数を使ってたんだけど、結局面倒になって、自前でスレッドを起こして、そこで自前で同期関数で読み出す。自前で非同期読み出しの機構を作ってしまった。
おかげで、サーバーからのリクエストに関しては、メインとは別のスレッドから、コールバックが出る。まぁちゃんとロックしておけば大丈夫でしょう。(甘い期待か。)
次に会話セッションのリクエストに対する処理の部分。
MSNメッセンジャーで、ユーザーをダブルクリックすると、メッセージ用のウィンドウが開くが、内部では会話セッションを開始するためのリクエストが出されている。
このリクエストを処理する部分の作成。
リクエストによって、指示されたサーバーに接続して、会話セッションの開始。同時にその会話セッションに参加しているメンバーの一覧取得など。
さくさく、実装。
メッセージの受信と送信の部分。
受信に関しては、先のPayloadメッセージの受信がちゃんとできてればどうってことはない。ほいほいと実装。またもや、Payload部分にバグ発覚。バイト数の数の数え方間違ってるし。。。
送信は、ちょっと横着して実装しました。
一部の人は既に気が付いたかもしれませんが、
とあるメンバーに接続して、話しかけると、
「現在調整中です」
というメッセージが返ってきます。
さて、次は、クラスライブラリとして、形を整えなきゃ。
一応、最初からクラスライブラリにするつもりなので、そのつもりでデザインしてあるんだけど、やっぱり最後にレビューというか、レビューにともなう、再構築しなきゃねぇ。

コメントを残す