package test;

import jp.ac.naka.ec.EntityCollaborator;
import jp.ac.naka.ec.Location;
import jp.ac.naka.ec.Plugin;
import jp.ac.naka.ec.entity.EntityType;
import jp.ac.naka.ec.entity.test.MessageDumperEntity;
import jp.ac.naka.ec.plugin.flash.FlashXMLSocketServer;
import jp.ac.naka.ec.plugin.http.HttpCore;
import jp.ac.naka.ec.plugin.serial.ForAjaxParser;
import jp.ac.naka.ec.plugin.serial.SerialInputParser;
import jp.ac.naka.ec.plugin.serial.SerialManager;

/**
 * @author Takashi Kasuya
 *
 */
public class Main {

	public static void main(String[] args) {
		
		// SIPのデフォルトポート５０６０でListen
		EntityCollaborator ec = EntityCollaborator.getInstance();
		EntityCollaborator.base = ".";
		// 位置情報の設定（オプション）
		String pos = "sfc";
		String latitude = "35.910";
		String longitude = "139. 59";
		Location location = new Location(pos, latitude, longitude);
		ec.setLocation(location);
		
		// Entityの生成
		ButtonEntity button = new ButtonEntity();
		// ユニークなIDの指定（オプション）
		button.setName("Button");
		// タイプの指定（デフォルトはSENSOR）
		button.setEntityType(EntityType.SENSOR);
		button.setMessage("Hello world");
		MessageDumperEntity dumper = new MessageDumperEntity();
		dumper.setEntityType(EntityType.ACTUATOR);
		//Entityの追加
		ec.addEntity(button);
		ec.addEntity(dumper);
		
		// メッセージブロードキャスト（テスト）
		button.sendMessage("test");
		// メッセージユニキャスト（テスト）
		button.sendMessage("hello, dumper", dumper);
		// メッセージユニキャスト（ID指定）
		String id = dumper.getURI().toString();
		button.sendMessage("hello, I'm Button", id);
		
		// プラグイン追加
		Plugin http = new HttpCore();
		// http://localhost:8080にアクセスできたら成功 ./html以下のリソースを表示
		// http://localhost:8080/event/ajaxにアクセスでイベントの取得
		// http://localhost:8080/event/ajax?value=value:0でメッセージのブロードキャスト
		ec.addPlugin(http);
		
		// Flash用プラグイン デフォルトは5555ポートでソケット通信
		Plugin flash = new FlashXMLSocketServer();
		// プラグイン名の指定（オプション）
		flash.setPluginName("Flash");
		ec.addPlugin(flash);
		
		// シリアル用プラグイン　デフォルトではCOM1ポートで信号を待つ
		SerialManager serial = new SerialManager();
		// for Mac
		// SerialManager.commPort = "/dev/cu.usbserial";
		// slider=の文字列をvalue:の形に整形
		SerialInputParser parser = new ForAjaxParser();
		serial.setSeialInputParser(parser);
		ec.addPlugin(serial);
	}
}
