cogmaの作り方

ここでは、こぐまシステム上の移動ソフトウェア、Codgetの作成方法に 付いてのべます。

基本的なメソッド

Codgetを作成するときは、まず、org.cogma.codgetパッケージに新しいCodgetのクラスを作成します。
また、その新しいCodgetは、 org.cogma.core.Codgetを継承する必要があります。
そして、以下のメソッド をオーバーライドします。

void onRegister() CodgetがCogManagerに登録されたときに呼び出されます
void onDispose() CodgetがCogManagerから削除されたときに呼び出されます
void onSame(CodgetIfc cog) CogManagerに同じIDのCodgetが登録されたときに呼び出されます
String toString() Codget名を返します

作成例

package org.cogma.codget;

import org.cogma.core.Codget;
import org.cogma.core.CodgetIfc;

public class TestCodget extends Codget{

public void onRegister(){
System.out.println("onRegisterが呼び出されました");
}

public void onDispose(){
System.out.println("onDisposeが呼び出されました");
}

public void onSame(CodgetIfc cog){
System.out.println("onSameが呼び出されました");
}

public String toString(){
return "TestCog:"+getID();
}
}

 

注意事項

cogmaシステムでCodgetを作成する場合、以下の注意事項をお守り下さい。

  • 変数は、private変数にすること
    ・setXXXX(*****)で、変数の値を代入する
    ・getXXXX(*****)で、変数の値を獲得する
  • オーバーライドされないメソッドは、finalメソッドにすること
  • コメントの最低限の記述
     ・classに対しては、@author, @since, @versionと簡単なコメントを記述
     ・変数に対しては、簡単なコメントを記述
     ・メソッドに対しては、@param, @returnと簡単なコメントを記述

codgetで扱える基本メソッド

Codgetで扱える基本的なメソッドは、以下のとおりです。
以下のメソッドは、すべてfinalメソッドです。

CodgetID getID() 自分のCodgetIDを獲得します
void register(CodgetIfc) 指定したCodgetIfcをCogManagerに登録します
void unRegister() 自分自身をCogManagerから削除します
void unRegister(CodgetIfc) 指定したCodgetIfcをCogManagerから削除します
boolean copyTo(NodeID) 指定したNodeIDに対して、複製を移動させます
boolean copyTo(NodeID, CodgetIfc) 指定したNodeIDに対して、指定したCodgetIfcを移動させます
boolean copyTo(NodeInfo, CodgetIfc) 指定したNodeInfoに対して、指定したCodgetIfcを移動させます
boolean moveTo(NodeInfo) 指定したNodeInfoに移動します
Vector getNeighborNodeInfos() 隣接するNode情報を獲得します
NodeInfo currentNodeInfo() 現在のCogManagerのシステム情報(NodeInfo)を獲得します
NodeID currentNodeID() 現在のCogManagerのシステムID(NodeID)を獲得します

CodgetID、NodeIDは、org.cogma.coreにあり、NodeInfoは、org.cogma.linkにあります。

ネットワークcodgetの利用

Codgetでは、1ホップの移動に関しては、copyToで利用可能ですが、複数ホップの移動に関しては、 ネットワークCodgetを利用する必要があります。

UnicastCodget(NodeInfo, CodgetIfc) 指定されたNodeIDに対して、CodgetIfcを複製します
TTLBroadCasterAdhoc(CodgetIfc) ネットワーク上のすべてのノードに対して、CodgetIfcを複製します
Mover(CodgetIfc) ネットワーク上の適当なノードに対して、CodgetIfcを移動させます
一定期間が過ぎると、異なるノードに移動させます
MoveOnCon(CodgetIfc) ネットワーク上の適当なノードに対して、CodgetIfcを移動させます
一定期間が過ぎると、異なるノードに移動させます

ユーティリティの利用

cogmaに装備されているユーティリティーは次のようなものがあります。よく使いそうなものを 挙げておきます。

boolean arrayEquals(byte[] a,byte[] b) 2つの配列の内容が同じかどうかを返します
byte[] loadByte(String fileName) 引数で与えられたローカルファイルをバイト配列にして返します
int saveByte(String fileName,byte[] bt) 引数で与えられたローカルファイルをバイト配列にして返します
byte[] o2b(Object o) 与えられたオブジェクトをバイト配列に変換します
Object b2o(byte[] bt) 与えられたバイト配列をオブジェクトに変換します
Vector make() 要素が0個のVectorを作ります
Vector make(Object o1) 要素が1個のVectorを作ります
boolean vectorEquals(Vector a,Vector b) 二つのVectorの中身を比較します

リンクモニターの利用

リンクモニターを利用するには、インターフェースLinkMonitorを実装します。それぞれのメソッドの 引数はノード情報のVectorです。

void onNew(Vector nodes) 新しいノードを発見したときに呼び出されます
void onBye(Vector nodes) ノードが消えたときに呼び出されます
void onUpdateInfo(Vector nodes) ノード情報が更新された(名前が変更された等)ときに呼び出されます
 //リンクモニターの利用例
 //上記のcodgetの作成例に付け加えてリンクモニターを実装します。
 package org.cogma.codget;

import org.cogma.core.Codget;
import org.cogma.core.CodgetIfc;
import org.cogma.link.LinkMonitor;

import java.util.Vector;

public class TestCodget2 extends Codget implements LinkMonitor{
public void onRegister(){
registerLinkMonitor(this);//リンクの監視を開始します。
System.out.println("onRegisterが呼び出されました。");
}

public void onDispose(){
  unRegisterLinkMonitor(this); //リンクの監視を終了します。
System.out.println("onDisposeが呼び出されました。");
}

public void onSame(CodgetIfc cog){
System.out.println("onSameが呼び出されました。");
}

public String toString(){
return "TextCog:"+getID();
}

public void onNew(Vector ns){
System.out.println("ノード"+ns+"を発見しました。");
}

public void onBye(Vector ns){
System.out.println("ノード"+ns+"が消えました。");
}

public void onUpdateInfo(Vector ns){
System.out.println("");
}
}

onRegisterとonDisposeにはリンクの監視を開始、終了するメソッドが追加されています。
リンクモニターを使う場合、この2つは必ず必要になります。 onDisposeの際にunRegisterLinkMonitor をしないと、ノードが消されていてもリンクを監視しつづけてしまうことになります。

グループの利用

cogmaで形成されたネットワークの中でさらにグループ化をすることができます。
ここではグループ化対応のCodgetの作成例を示します。

各種インターフェイスの利用

cogmaでは、いくつかの有用なインタフェースがあります。

  • MyFrameインタフェース
    Codget移動時に、各ノードにおける位置を保存しておくために必要な インタフェースです。
    PlaceKeeperを利用するときには、このインタフェースをインプリメントします。
  • EditFrameCreatableインタフェース
    CogManagerから「Load Frame」でEditFrameを呼び出すためのインタフェースです。
    必要な時のみ、フレームを表示したいときに 有効です。

All Rights Reserved, Copyright(c)2003, cogma Project