Tomscop Development Procedure

Last update 2003/11/17

Room(JXTAでのgroupと同等)に所属するピア間で行うcollaborative application
( groupchat, shared browser, shared whiteboard etc…)を開発する手順、ルールを以下のように決める。
1つのshared applicationはGUI(現時点ではJpanelであるが他のGUIでも可能かも)
とManagerとEventListener、Utilitiesからなるものとする。
例 Testと呼ばれるShared applicationを開発する場合、
TestPanel.java TestManager.java TestListener.java TestUtilities.java(この4つでワンセット)を作る。
できたクラスはパッケージtomscop\applicationの下にフォルダtestを作成して保存する。
例:tomscop\application\test\TestPanel.java
新アプリケーションはTomscopのGUIにタブとして追加する。

[追加の仕方]
TOMSCOPのクラスRightPanelで
TestPanel testpanel = new TestPanel();
Addtab(testpanel);
とすることでタブに追加することができる。

[各クラスの詳細]
[GUI]
TestPanelではGUIを定義する。GUIはJpanelを拡張したもので作る。
例 public class TestPanel extends Jpanel

[Listener]
TestListenerではTestPanelで起きたイベントを処理する。この処理中でメッセージを送る。

ifファイルシェアボタンが押された(イベント発生){
sendMsg(file);
}
通信方法の詳細については後に述べる。

[Manager]
Managerは主にクラスRoomMsgReceiverから受け取ったメッセージを処理する。
同じグループにいるピアからメッセージが送られてきたらこのクラスで処理をすることになる。
開発するにあたってメッセージを受け取るためのメソッドを定義する必要がある。
サービスTestがクラスRoomMsgSenderのメソッド1を使う場合( sendRoomMsg(source, ApplicationID, ObjectID)
を使ってメッセージを送信する)クラスTestManagerに定義すべきメソッドは以下のようになる。
public void setTestMessage( String sourcePeer, int applicationID, int objectID )
Testがメソッド2を使う場合は以下のようになる
Public void setTestMessage( String sourcePeer, int applicationID, int objectID, int x, int y)
サービス内で違う属性の値を使いたい場合はobjectIDで区別をする。
サービスTestでメソッド2を使う通信が2つあるとすると1つにはobjectIDを1とし、
もう1つにはobjectIDを2として送る。
サービスPainterを例にとるとメソッド2を使って送信した2つの整数が座標(x、y)だった場合、
objectIDによってその座標がマウスを動かした座標なのか、マウスをドラッグした座標なのかを判別することができる。
switch文でx,y座標を別々の処理に渡すことができるので、マウスが動いた座標ならばマウスカーソルを動かし、
マウスがドラッグされた座標なら線を描くという別々の処理を同じサービスの同じメソッドを使っている場合でも
実現させることができる。


public class TestManager {
  public void setTestMessage( String source, int applicationID, int objected ) {
    switch( objectID ){
      case 1:
      処理
      break;
      case 2:
      break;
    }
  }
}

setTestMessageをRoomMsgReceiver内で呼び出す(登録する)ことによってメッセージを受信できる。

public class RoomMsgReceiver{
  //
  switch( codingID ){
  //
    switch( applicationID ){
      case 1:
      setTestMessage( source, applicationID, objectID, string );
      break;
    }
  }
}

[Utilities]
このクラスはObjectIDなどアプリケーション固有の変数を保存するために作る。
このクラスに必要な値を保持することによってListenerやManagerから共通のオブジェクトを参照することができる。
例 private static final int TESTOBJECTID = 1;

[通信に関して]
shared applicationはグループ専用のパイプ(プロパゲートタイプ)を用いてメッセージをやり取りすることになる。
そのため同じroom(group)に所属していないピアとはサービスを利用してメッセージをやりとりできない。
逆に同じroomに所属している全ピアが利用できるようにサービスを設計する必要がある。

[通信方法]
RoomMsgSenderクラスにあるメソッドを使うことで通信ができるようになっている。
メッセージを送るにはRoomMsgSenderクラスのSendMsgメソッドを利用する。
sendRoomMsgメソッドには以下のバージョンがある。

1.sendRoomMsg(source, ApplicationID, ObjectID )
2.sendRoomMsg(source, ApplicationID, ObjectID, String)
3.sendRoomMsg(source, ApplicationID, ObjectID, String, String)
4.sendRoomMsg(source, ApplicationID, ObjectID, String, String, File)

sourceには自分のピアの名前を入れる(String型)
ApplicationIDはアプリケーションを判別するためのものでクラスDefinition.javaに登録する必要がある。
ObjectIDはサービス内でメッセージを振り分けるために使うものであり、各自が必要なだけ作ることができる。
それも同じくクラスDefinition.javaに登録する。Integerを1つだけ送信したい場合はメソッド2を使い
IntegerをStringにキャストして送信する。

なお、各アプリケーションは固有のApplicationIDとObjectIDを使うことができる。
ApplicationIDはTOMSCOPクラスDefinition.javaで定義される。
ObjectIDは各アプリケーションフォルダ内のTestUtilities.javaで各開発者が定義する。
各開発者は申請によってアプリケーション固有のIDを得ることができる。


これらの仕様に基づいて作ることによりアプリケーションをTOMSCOPに追加することが簡単になる。

Copyright(c) 2003 Tomomi Kawashima All Rights Reserved.