Missing Alternate TagMissing Alternate TagMissing Alternate TagMissing Alternate TagMissing Alternate TagMissing Alternate TagMissing Alternate TagMissing Alternate Tag

NetMorphプログラミング

NetMorph は eToy 対応しているので、 普通は自分でSmalltalkのプログラムを書く必要はありません。このページは開発者用に書かれました。


最初の例


NetMorph 0.2 にはリモートからモーフを操作するための、整理された API が提供されています。

簡単なコード例です。別のイメージの ip と portが #('192.168.1.2' 37459)であると考えてください。


"ローカルでモーフを開く"
morph _ Morph new openInWorld.

"別のイメージにモーフを移動。プロキシを残していく"
proxy _ morph leaveProxyDo: [morph warp: '192.168.1.2' port: 37459].

"モーフの位置をリモートコントロール"
proxy position: 100@100.

"モーフの色をリモートから変える"
proxy color: Color random.
"ちょっとした視覚効果"
proxy poofIn.

"リモートでマーカーモーフを開く"
"マーカーモーフは後でモーフを引っ張り戻すのに使う"
proxy leaveMarkerMorph.

proxy showBalloon: 'こんにちは! このタイルを僕を呼ぶときに使ってね!'.

"リモートのワールドの色を3回変える(悪戯)"
oldColor _ proxy world color.
3 timesRepeat: [proxy world color: Color random. (Delay forSeconds: 1) wait].
proxy world color: oldColor.

"家に帰る"
proxy warpToHome.


この旅の後で、帰ってきたモーフをインスペクトして、 #path メッセージを送ってみましょう。モーフがどこを訪れたかがわかります。


Callback

Morphのサブクラスを定義して、移動時の振る舞いをカスタマイズできます。

  • Morph>>onBeforeWarp は、ローカルを立ち去る直前に呼ばれます。

  • Morph>>onAfterWarp は、リモートに着いた直後に呼ばれます。


遠隔 Perform

NetMorphでは, すべてのモーフにidがあります。idがわかっていれば、そのモーフのメソッドをリモートから呼び出せます。

  • Morph>>perform: selector of: identifier
    • などなど...


Morph Proxy

移動前にメソッドを後で呼び出すためにidを取っておくのは面倒でしょう。
そこで簡単な操作で、モーフの抜け殻(プロキシ)を得ることができるようになっています。

  • Morph>>leaveProxyDo: ["移動のフレーズ"].
で抜け殻が帰ります。この抜け殻にメッセージを送るとリモートの本物に届きます。

プロキシに渡せる引数、返値には制限があります。Block, thisContextなどは渡せません。モーフが別のモーフを返すようになっていた場合、呼び出し側は自動的に、そのモーフのプロキシを得られるようになっています。

例,

worldProxy _ proxy world.

で、リモートのWorldのプロキシが返ります。


Morph>>stepのオーバーライド

Morph>>stepをオーバーライドすると、モーフが自ら動けるようになります。ということは、ネットワークエージェントも簡単に書けると言うことです。

例えば、ネット上をランダムに放浪するモーフを書きたい場合、#stepは以下のようになるでしょう。:

step
self warpTo: (self worldMap allWorldNames atRandom).


  1. step内では、下記のようなメソッドが役立ちます。

  • Morph>>worldMap で WorldMap が返ります。接続している全てのイメージの情報を得られます。
  • Morph>>address で、 WorldMap上の自分の現在位置がわかります。
  • Morph>>path で、今までの行程を知ることができます。


MarkerMorphの使い方

MarkerMorph は、モーフに対する「見えるポインタ」です。 これを使うとリモートからのモーフの操作が容易になります。いつもは自分で動くモーフに、外部から指令を送るような時に使えます。

MarkerMorph は普通のモーフなので、#stepをオーバーライドできます。例えば時折、放浪しているモーフを呼び戻したい場合、#step を以下のように書けるでしょう。:

step
self morph warpToHome.

Morph>>leaveMarkerMorph でそのモーフを指す新たな MarkerMorph が返ります。(最初のコードに例があります)。


[:masashi | ^umezawa]

Link to this Page