2008年6月のエントリ

Weather Typing 2.2公開。追加機能はほとんどなくて,現在分かっているバグをたくさん直したバージョンという感じ。

Weather Typing 2.2のプログラムテストが完了。あとはトータルテストが終われば公開可能。今公開している開発版でいろいろバグが見つかった。特に大きいのはWindows 2000とWindows XP SP2なしで動作しないことか。今回,IPv6対応のためにGetAddrInfoW関数を使ったのだが,Windows XP SP2以降とWindows Vistaでしか使えない。いっそWindows2000をサポート外にするかとも考えたが,さすがに厳しいので直しておいた。

掲示板に来ている,設定が読み込めないというのが気になるが…。

Silverlightで通信ができないというメールが来た。どうやらSilverlight 2 Beta 1からBeta 2になったときに仕様が変わったとのこと。ローカルPCにSilverlightのコンテンツを置いておいてローカルPC上のサーバにアクセスする際にも,クロスドメインポリシーを考慮しなければならなくなったらしい。どこがクロスだよ,って気もするけど。

早速実験してみる。Silverlight Tools Beta 2を入れる場合,Beta 1のアンインストールが必要なのだが,普通にアンインストールしただけではだめで,更新プログラムの一覧からKB949325を直接消さないといけないというのにはまりつつ,インストール完了。微妙にWatermarkedTextBoxが消えてたりするのに困りつつ実験開始。

確かに以前と同じコードでSocket通信すると,AccessDeniedになってしまう。ということでクロスドメインポリシーサーバをたててみる。FlashのSocket通信のときに同じようなことをやってたのでほぼ流用。ポート943で,「<policy-file-request/>」という文字列を受信したら以下のような文字列を送信するサーバをたてればOK。許可ドメインはちゃんと絞り込まないといけないけど。

<?xml version="1.0" encoding ="utf-8"?>
<access-policy>
 <cross-domain-access>
  <policy>
   <allow-from>
    <domain uri="*" />
   </allow-from>
   <grant-to>
    <socket-resource port="4502" protocol="tcp" />
   </grant-to>
  </policy>
 </cross-domain-access>
</access-policy>

結局,Socket通信は以下のような感じになる。

  1. Silverlightクライアントからサーバの943ポートへ,フレームワークが勝手に「<policy-file-request/>」を送信する
  2. サーバの943ポートからSilverlightクライアントへ,クロスドメインポリシーを返信する
  3. Silverlightクライアントからサーバの4502-4532ポートへ通信

ロビーでSJIS以外の文字を使えるようにしていろんな文字が使われていたが,どうも変な文字が入るとGulimフォントなど(Vistaの場合)になってしまう。いろいろ実験してみると,VistaのWordPad(RichEdit 5.0)では,デフォルトのフォントをメイリオにしているとちゃんと変な文字もメイリオになるが,RichEdit 2.0だとGulimフォントなどになってしまってメイリオに変更してもフォントが変わらない。とりあえず致命的なわけでもないのでしばらくはこのままか。


ウェザタイのIPv6実験は成功。今のままでも,例えばVista-Vistaで対戦をするとIPv6アドレスで対戦ができる。これで通信部分を作り直す必要はなくなった。


ロビーに入り浸っていると,どうも対戦中に落ちる現象があるらしい。ちょっと調べてみて怪しい部分を修正。文字コードを変換するとき,変換前にいちいちsetlocaleして変換後にsetlocaleを戻していたのだが,そのあたりで落ちる。前のノートの時は起きてなかった気がするのでマルチコアで起きやすいのかも知れない。とりあえずsetlocaleはデフォルトでは全スレッドに効くので,プロセス起動時に行うようにしたら落ちなくなった。

Weather Typingの開発版をこっそり公開。経緯としては,掲示板に報告があがっている問題の対応が発端。掲示板に挙がっている問題は,NICOLAで高速打鍵が誤入力になってしまうというもので,右親指キーを使った入力から左親指キーを使った入力を高速に行うと,ミスになってしまう。これのせいでNICOLAでの入力が遅くなってしまう方も多いだろうということで急遽開発版を公開することにした。

注意点は以下の通り。

  • 公式版とは違いちゃんとしたテストはしていません。最悪の場合,スコア等が消えてしまう可能性があるので,必ず旧バージョンのWeatherTypingフォルダごとバックアップをとっておいてください。
  • 旧バージョンからバージョンアップする場合,旧バージョンのフォルダに新バージョンのファイルを上書きすることで,旧バージョンの設定を引き継ぎます。
  • 旧バージョンからバージョンアップする場合,既にその日のロビーチャットログがあれば,リネームしておいて下さい。(例:2008/6/8ならchat20080608.logをリネーム)リネームしない場合,バージョンアップした日のチャットログだけ文字化けします。

修正点は以下の通り。

  • ファイルオープンダイアログをXP/Vista標準のものに変更
  • アイコンを変更
  • 対戦開始時のプレイヤー情報表示画面で,IPアドレス表示部分にIPv6のアドレスも表示する
  • 右親指キーを使った入力から左親指キーを使った入力を高速に行うと,ミスになってしまうのを修正
  • スコアファイル名を変更した場合,スコアアップロードとロビーのレベル表示で正しいスコアファイルが使われないのを修正
  • CPU入力方式とPlayerの入力方式が同期しなくなる場合があるのを修正
  • 対戦の接続待ちの際,途中でエラーが発生しても待機し続けていたのをエラーメッセージを表示するように変更
  • ロビー。SJIS以外の文字を使えるようにする。但し旧バージョンのロビークライアントからは見えないので注意
  • ロビー。チャットのログファイルをUnicodeに変更

DirectPlayのヘルプを見ていると,どうもDirectPlayは9からIPv6をサポートしていることが判明。Weather Typingでも今のままでIpv6に対応できている。ような気がする。検証中。

ぱじさんのプロジェクトに対応して,ロビーサーバをほぼ作り直した。ユーザ関連をデータベースを使用するようにしたのと,永久部屋とかもろもろ。大分コードもすっきりした感じ。しばらくテストしたらウェザタイのロビーサーバを更新してみよう。