Taiyou Hara
taiyo****@kishi*****
2008年 9月 11日 (木) 16:44:20 JST
近畿大学中川様 SUNTORIの原です。 現在の仕様では、通信は「チャンネル」を用いたものとなっています。メッセー ジは送信する際に必ず「チャンネル番号」を指定しなければいけません。メッ セージはそのチャンネル番号を受信するように要請したエージェントが受信しま す。無線通信の周波数みたいなものと考えればよいかと思います。 サンプルではyab.agent内Agentクラスに含まれている次のメソッドが通信に関係 する処理を担当しています。 1.setMyChannel()→受信するチャンネル番号の指定 2.channel(byte[])→メッセージの受信要請 3.tell(int,byte[])→メッセージの送信 4.hear(RealObject,String)→聞き取ったメッセージ 受信側では1、2、4を扱い、送信側では3を扱います。以下で具体例と共にそ れぞれの使い方を説明します。 ・受信側の実装 1.オーバーライドしたsetMyChannel()内で、受信チャンネルの設定をする。例: setMyChannel(){ myChannel=1 } *ただし、2チャンネル以上同時に設定する場合は論理和で指定) *チャンネル番号はyab.io内ProtocolConstantsクラスに定数が用意してあるの でそちらを使ったほうがわかりやすいかもしれません。 2.channelを呼び出し、メッセージを受信要請をカーネルに出す 例: act(){ channel(new byte[]{1}); } *2チャンネル以上同時に要請する場合は、その分だけ配列に追加する ・送信側の実装 3.送信するメッセージと送信先のチャンネル番号を引数にしてtellメソッド呼 び出し 例: tell(1,"test") ・確認 4.送受信ともに問題なければ、数ステップ後メッセージを受け取ったときに受 信側のhear(RealObject,String)が呼び出されます。RealObjectが送信者、 Stringにメッセージが入っているはずです。確認してください。 以上で最低限の通信は可能となりますが、Yab-APIをそのまま利用する場合は、 いくつか制限があるので少し注意が必要になります。 ・センター⇔チーム、センター⇔センターの通信は問題ないが、チーム⇔チームで の通信は無視される(hearメソッドを呼ばない) ・自分自身の出したメッセージは無視する ・チャンネル0番(SAY)を使わない このあたりのことはYab-API内のAgentクラスを直接参照していただけたら理解& 変更できるかと思います。私としてはだいたいの仕様を理解したあたりで使いや すいように改造するのがいいかと思います。 通信周りのことはややこしく、まだいくつか注意点があったりします。しかし長 くなりましたので一旦ここまでとします。いかがでしょうか。 > 近畿大学の中川といいます。 > 前年の秋キャンプで配布されたSample-Naitoをベースにして開発をしています。 > > 現在、このSample-Naitoのエージェントの通信をできるようにしたいと思っているのですが、どう手をつけていいのか分からずに悩んでいます。 > > そこで質問なのですが、通信を出来るようにするにはどうしたらよいのか、どなたかご存知なら教えてもらえないでしょうか? > どんな些細なことでも構いませんので、お願いします。 > -- /** * 原 大曜 * 石井(健)研究室 社会システム情報学専攻 * 名古屋大学大学院 情報科学研究科 * e-mail : taiyo****@kishi***** * 内線 : 3813 */