Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
2005-01-09

[開発ログ]HSP 入門

朝から HSP 関連のホームページを見ていた。機能がいろいろあって楽しそう。 簡単なサンプルソース見てもなかなか内容が理解できなくて苦しいけど、がんばって飛び込んでみるか。

作者の基本的な思想にはすばらしいものがあって、それが実現されていて、それでここまで流行っているだろうなという印象。

--

まずはプロセス間通信のインタフェースをどうするかから。 確実そうなのは、 C で拡張機能として実装してしまうこと。これならきっとなんでもできるのだろう。まず、そのあたりを調べてみよう。

--

開発版( HSP Ver3.0 β)もあるのか。いまからはじめるなら新しいほうを使おう。

HSPによるTCP/IPサーバー・クライアント通信のスクリプト発見。

初めてソケットに挑戦するプログラムが HSP になるとは。

いろいろ変わっているようなのでやっぱり安定版にする。

サンプルを少し改造して、エコーサーバーを作ってみた。 HSP 以前にソケットをよく知らないのでかなり怪しい。

#include "hspsock.as"
	title "エコーサーバーテスト"

*main
	port=999
	mes "ポート"+port+"で接続を待っています..."
	sockmake 0,port
	if stat : dialog "Socket error": goto *bye

	a=0
	repeat
	  sockwait 0
	  title "CHK="+stat+"/"+a
	  if stat>1 : dialog "Socket error": goto *bye
	  if stat=0 : break
	  a+
	  wait 10
	loop

	mes "接続しました。("+refstr+")"

	;
	repeat
	  msg = ""
	  sockget msg, 256
	  if stat : dialog "Socket error": goto *bye
	  sockput msg
	  if stat : dialog "Socket error": goto *bye
	  ;mes msg

	  str msg0:msg0=msg:poke msg0,1,0
	  if msg0="q" : break
	loop
	;
*bye
	sockclose
	mes "終了"

ruby からこんな感じで接続してみると 0.15 sec とかで終わる。ネットワークは遅いというイメージをもっていたけどこれなら申し分ない。

t = Time.now
1000.times{|i|
  sock.write "#{i}\n"
  sock.gets
}
p Time.now - t

とりあえず通信することはできたのでこれで次に進める。もっといい通信方法があれば後で最適化すればよい。

--

HSP の dll の ruby binding なんてよさそうだなあとか思ったり

これはとっても面白そう。でも今回はサーバーのプロトタイプを HSP で実装してみるということでやってるから、これはまた別の話。まぁ、それにしても、この方法がとても有効な気もするけど、 dll のバインディングなんて実装方法がさっぱりわからない。