とうとう注文してしまった。
ゲームじゃなくてB5ノートPCです。
変更点(買い替えの理由)
Video Trident → radeon7500(AGP)
HDD 20G → 80G
CPU Mobile Pentium iii 750MHz → PentiumM 1.0GHz
Memory 512MB → 768MB
やっぱ軽いノートでも3Dやりたいですよ (゚∀゚)=3
古いやつは 母ちゃんにお下がりするつもり。
圧縮ファイルからの更新にも対応した。
圧縮形式に何を使おうか悩んだが、ZIPやらLZHやらはライセンスの問題やライブラリ引用するのが面倒くさいので、一番手っ取り早そうな LZCopy 系 *1 を使うことにした。
圧縮率に関しては可もなく不可もなくという感じだが、アップデートソフトに追加でDLLが必要、というのもやりたくなかったので決定。サーバ上に圧縮されたファイルを置いておけばダウンロードしたときに自動的に解凍されるようにした。
とりあえず形にはなったのでバグとりも兼ねてなにかのゲームで実際に使っていきたいところ。
つまりネタ募集。
イマドキなオンラインゲーム等はゲームの修正が入ったときに、自動的にダウンロード&インストールする仕組みを持っている。
自分の作ったゲームがこの機能を持っていたらカッコいいと思ったので作ってみた。
仕様上、別EXEになってしまうのだが、ゲームからこいつを呼び出すと更新ファイルがあるかをサーバーに確認しに行き、あれば既存ファイルと置き換える形でダウンロードを行う。
サーバ側では、更新するファイルのリストを準備しておく必要がある。(すべてのファイルを確認してたら重そうなのでしかたない)リストにあるファイルのタイムスタンプを確認し、サーバーにあるものが新しかったら更新という筋書きである。
とりあえず作ってみただけなので、ファイルは素のままダウンロードするし(圧縮すら無し)ファイルの破損確認などを今後追加していこうと思う。
てことで一般公開はまだNGです。
SocketのプログラムをWindowsで書く場合、winsock.hまたはwinsock2.hをインクルードすることになる。
前者はVersion1のWinSockで、後者はVersion2となっていて、TCP、UDP以外のプロトコルを使いたい場合や、高速な通信を行いたい場合は多機能な新バージョンの WinSock Ver2 を用いるわけだが、ここには罠が存在している。
winsock.h と winsock2.h は互いに排他的で、同時に使用することはできない。(関数や構造体が同名異義となっているものがある)そこでwinsock2.hだけをインクルードしようとするわけだが、実はwindows.h内部でwinsock.hがインクルードされているのだ。
これを回避するためには、windows.hをインクルードする前に _WINSOCKAPI_ を define する。
こうするとwinsock.hがインクルードされても、中身をパスしてくれるのでwinsock2.hをインクルードしても定義の重複は発生しない。
ライブラリなどを組んでいるとあちこちのソースファイルで windows.h をインクルードしているので、結構面倒くさいものである。よって#defineでコード中に記述するより、プロジェクトオプションで定義したほうがよいだろう。しかし、DirectXのライブラリ(d3d9.hとか)でも普通にwindows.hインクルードしてあるので、この場合、手が出せない。この場合ワーニングが出まくるのを我慢するか #pragma warning ( disable : 4005 ) としてワーニングを消してしまう他方法はないものと思われる。
後から追加されたライブラリであることから、しかたないともいえるかもしれんがこの実装はどうかと思うな。
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| 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 | 31 |