Skip to content

Commit

Permalink
no message
Browse files Browse the repository at this point in the history
  • Loading branch information
hrfm committed Jun 11, 2013
1 parent 971b13e commit 92eb40e
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 20 deletions.
94 changes: 75 additions & 19 deletions as/org/sgmnt/lib/osc/OSCSyncGroup.as
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
*/
package org.sgmnt.lib.osc{

import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.TimerEvent;
import flash.utils.Timer;
Expand All @@ -42,7 +41,7 @@ package org.sgmnt.lib.osc{
* - UNSTABLE = 実行不可能 ではなく STABLE 時に実行していたものは引き続き完了まで面倒をみる.
* - activate の完了を保証する(今はちょっとずれる事がありそう OSC でしっかり監視)
* この完了タイミングで _clients を全て stable にするのが良さそう.
* _clients の stable = 現在実行可能な IP たちという設計.
* _clients の stable = 現在実行可能な IP という設計.
*
* @author sgmnt.org
*/
Expand Down Expand Up @@ -111,13 +110,16 @@ package org.sgmnt.lib.osc{
_newProcessRunnable = false;

// --- Broadcast Group Create Message. ---
//_mngr.broadcast( new OSCMessage("/group/"+_name+"/create") );
var msg:OSCMessage = new OSCMessage();
msg.address = "/group/"+_name+"/create";
_mngr.broadcast( msg );

// --- Add EventLisnters to OSCSyncManager. ---
//_mngr.socket.addEventListener( "/group/" + _name + "/create" , _onCreateMessageReceived );
_mngr.socket.addEventListener( "/group/" + _name + "/create", _onCreateMessageReceived );
_mngr.socket.addEventListener( "/group/" + _name + "/join" , _onJoinMessageReceived );
_mngr.socket.addEventListener( "/group/" + _name + "/pend" , _onPendMessageReceived );
_mngr.socket.addEventListener( "/group/" + _name + "/lostip", _onLostIPMessageReceived );
_mngr.socket.addEventListener( "/group/" + _name + "/stable", _onStableMessageReceived );

// --- Setup Timers. ---
_activateTimer = new Timer( _activateTimerDelay, _activateTimerCount );
Expand All @@ -126,9 +128,6 @@ package org.sgmnt.lib.osc{
_updateTimer.addEventListener( TimerEvent.TIMER, _onUpdateTimer );
_updateTimer.start();

// TODO 基本的には update Timer が通知しっぱなし
// 追加処理は随時受け付けるが stable にするのは安定稼働後.

}

/**
Expand Down Expand Up @@ -359,6 +358,27 @@ package org.sgmnt.lib.osc{
// ================================
// === Remove flow.

/**
* グループ生成の通知が来た際の処理.
* 再起動した可能性があるため対象となる IP をリストから一度外す.
* @param event
*/
private function _onCreateMessageReceived(event:OSCSocketEvent):void{
var ip:String = event.srcAddress;
var i:int, len:int = _clients.length;
for( i = 0; i < len; i++ ){
if( _clients[i].ip == ip ){
// --- Delete from _clients if ip exists. ---
_clients[i].timer.removeEventListener( TimerEvent.TIMER_COMPLETE, _onClientTimerComplete );
_clients.splice(i,1);
// ---
_decideHostIP();
// ---
dispatchEvent( new OSCSyncGroupEvent( OSCSyncGroupEvent.REMOVED ) );
break;
}
}
}

/**
* 管理されている IP の期限が切れた際の処理.
Expand Down Expand Up @@ -431,6 +451,7 @@ package org.sgmnt.lib.osc{
_activateTimer.reset();
_activateTimer.addEventListener(TimerEvent.TIMER, _onActivateTimer );
_activateTimer.addEventListener(TimerEvent.TIMER_COMPLETE, _onActivateTimerComplete );
_activateTimer.removeEventListener( TimerEvent.TIMER_COMPLETE, _onStableTimerComplete );
_activateTimer.start();
}

Expand Down Expand Up @@ -459,21 +480,14 @@ package org.sgmnt.lib.osc{

if( hasRunningProcesses == false ){

// --- removeEventListeners. ---
_activateTimer.removeEventListener( TimerEvent.TIMER_COMPLETE, _onActivateTimerComplete );

// --- Activate Complete. ---
_activated = true;
_newProcessRunnable = true;

// --- Decide Host IP. ---
_decideHostIP( true );

trace( "[" + name + "] Checking IP List... COMPLETE");
trace( "--------------------\n" + toString() + "\n--------------------" );

// --- Dispatch Activate Event. ---
dispatchEvent( new OSCSyncGroupEvent( OSCSyncGroupEvent.STABLED ) );
if( _mngr.isHost( _name ) ){
var msg:OSCMessage = new OSCMessage();
msg.address = "/group/" + _name + "/stable";
_mngr.broadcast( msg );
}

}else{
// --- プロセスの実行中であった場合それらが終了するまで待つ. ---
Expand All @@ -484,6 +498,48 @@ package org.sgmnt.lib.osc{

}

/**
*
* @param event
*/
private function _onStableMessageReceived(event:OSCSocketEvent):void{

// --- removeEventListeners. ---
_activateTimer.stop();
_activateTimer.removeEventListener( TimerEvent.TIMER,_onActivateTimer );
_activateTimer.removeEventListener( TimerEvent.TIMER_COMPLETE, _onActivateTimerComplete );

// --- Activate Complete. ---
_activated = true;
_newProcessRunnable = true;

// --- Decide Host IP. ---
_decideHostIP( true );

trace( "[" + name + "] Checking IP List... COMPLETE");
trace( "--------------------\n" + toString() + "\n--------------------" );

if( _mngr.isHost( _name ) ){
// --- Host だった場合 STABLE 確認のための同期処理を 3 秒後に実行する.
_activateTimer.delay = 3000;
_activateTimer.repeatCount = 1;
_activateTimer.addEventListener( TimerEvent.TIMER_COMPLETE, _onStableTimerComplete );
_activateTimer.reset();
_activateTimer.start();
}

}

/**
* STABLE 確認の同期処理を開始します.
* @param event
*/
private function _onStableTimerComplete(event:TimerEvent):void{
_activateTimer.stop();
_activateTimer.removeEventListener( TimerEvent.TIMER_COMPLETE, _onStableTimerComplete );
dispatchEvent( new OSCSyncGroupEvent( OSCSyncGroupEvent.STABLED ) );
}

// ====================================================================
// === Update Host IP Flow.

Expand Down
2 changes: 1 addition & 1 deletion test/OscSyncTest.as
Original file line number Diff line number Diff line change
@@ -1 +1 @@
package{ import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.utils.Timer; import org.sgmnt.lib.osc.OSCBroadcastSocket; import org.sgmnt.lib.osc.OSCSocketEvent; import org.sgmnt.lib.osc.OSCSyncManager; import org.sgmnt.lib.osc.OSCSyncManagerConfigure; import org.sgmnt.lib.osc.OSCSyncProcess; import org.sgmnt.lib.osc.OSCSyncProcessEvent; public class OscSyncTest extends Sprite { private var _process:OSCSyncProcess; private var _sock:OSCBroadcastSocket; private var _timer:Timer; public function OscSyncTest(){ _sock = OSCBroadcastSocket.getInstance(); _sock.addEventListener( OSCSocketEvent.BROADCAST_SOCKET_INITIALIZED, _onInit ); _sock.initialize(); } private function _onInit(event:OSCSocketEvent):void{ OSCSyncManager.getInstance().initialize( new OSCSyncManagerConfigure( _sock ) ); _process = new OSCSyncProcess('hoge','fuga'); _process.addProcess(process1); _process.addProcess(process2); _process.addProcess(process3); _process.addProcess(process4); _process.addEventListener( OSCSyncProcessEvent.BEGIN, trace ); _process.addEventListener( OSCSyncProcessEvent.END, function(){ _process.begin( 0xff0000, 0x00ff00, 0x0000ff, 0xffff00 ); }); _process.addEventListener( OSCSyncProcessEvent.CANCEL, _onCancel ); stage.addEventListener(MouseEvent.CLICK,function(e){ if( _process.running ){ _process.cancel(); }else{ _process.begin( 0xff0000, 0x00ff00, 0x0000ff, 0xffff00 ); } }); _timer = new Timer(3000,1); trace('Test Start.'); } function process1(args:*=null){ var color:uint = uint( args[0] ); trace('process1',color); graphics.clear(); graphics.beginFill( color, 1.0 ); graphics.drawRect( 0,0, stage.stageWidth, stage.stageHeight ); _timer.addEventListener(TimerEvent.TIMER_COMPLETE,function(){ _timer.removeEventListener(TimerEvent.TIMER_COMPLETE, arguments.callee); //_process.cancel(); _process.complete( process1 ); }); _timer.reset(); _timer.start(); } function process2(args:*=null){ var color:uint = uint( args[1] ); trace('process2',color); graphics.clear(); graphics.beginFill( color, 1.0 ); graphics.drawRect( 0,0, stage.stageWidth, stage.stageHeight ); _timer.addEventListener(TimerEvent.TIMER_COMPLETE,function(){ _timer.removeEventListener(TimerEvent.TIMER_COMPLETE, arguments.callee); //_process.cancel(); _process.complete( process2 ); }); _timer.reset(); _timer.start(); } function process3(args:*=null){ var color:uint = uint( args[2] ); trace('process3',color); graphics.clear(); graphics.beginFill( color, 1.0 ); graphics.drawRect( 0,0, stage.stageWidth, stage.stageHeight ); _timer.addEventListener(TimerEvent.TIMER_COMPLETE,function(){ _timer.removeEventListener(TimerEvent.TIMER_COMPLETE, arguments.callee); //_process.cancel(); _process.complete( process3 ); }); _timer.reset(); _timer.start(); } function process4(args:*=null){ var color:uint = uint( args[3] ); trace('process4',color); graphics.clear(); graphics.beginFill( color, 1.0 ); graphics.drawRect( 0,0, stage.stageWidth, stage.stageHeight ); _process.complete( process4 ); } private function _onCancel(e:OSCSyncProcessEvent):void{ trace(e); _timer.stop(); graphics.clear(); } }}
package{ import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.utils.Timer; import org.sgmnt.lib.osc.OSCBroadcastSocket; import org.sgmnt.lib.osc.OSCSocketEvent; import org.sgmnt.lib.osc.OSCSyncManager; import org.sgmnt.lib.osc.OSCSyncManagerConfigure; import org.sgmnt.lib.osc.OSCSyncProcess; import org.sgmnt.lib.osc.OSCSyncProcessEvent; public class OscSyncTest extends Sprite { private var _process:OSCSyncProcess; private var _sock:OSCBroadcastSocket; private var _timer:Timer; public function OscSyncTest(){ _sock = OSCBroadcastSocket.getInstance(); _sock.addEventListener( OSCSocketEvent.BROADCAST_SOCKET_INITIALIZED, _onInit ); _sock.initialize(); } private function _onInit(event:OSCSocketEvent):void{ OSCSyncManager.getInstance().initialize( new OSCSyncManagerConfigure( _sock ) ); _process = new OSCSyncProcess('hoge','fuga'); _process.addProcess(process1); _process.addProcess(process2); _process.addProcess(process3); _process.addProcess(process4); _process.addEventListener( OSCSyncProcessEvent.BEGIN, trace ); _process.addEventListener( OSCSyncProcessEvent.END, function(){ _process.begin( 0xff0000, 0x00ff00, 0x0000ff, 0xffff00 ); }); _process.addEventListener( OSCSyncProcessEvent.CANCEL, _onCancel ); stage.addEventListener(MouseEvent.CLICK,function(e){ if( _process.running ){ _process.cancel(); }else{ _process.begin( 0xff0000, 0x00ff00, 0x0000ff, 0xffff00 ); } }); _timer = new Timer(3000,1); trace('Test Start.'); } function process1(args:*=null){ var color:uint = uint( args[0] ); trace('process1',color); graphics.clear(); graphics.beginFill( color, 1.0 ); graphics.drawRect( 0,0, stage.stageWidth, stage.stageHeight ); _timer.addEventListener(TimerEvent.TIMER_COMPLETE,function(){ _timer.removeEventListener(TimerEvent.TIMER_COMPLETE, arguments.callee); //_process.cancel(); _process.complete( process1 ); }); _timer.reset(); _timer.start(); } function process2(args:*=null){ var color:uint = uint( args[1] ); trace('process2',color); graphics.clear(); graphics.beginFill( color, 1.0 ); graphics.drawRect( 0,0, stage.stageWidth, stage.stageHeight ); _timer.addEventListener(TimerEvent.TIMER_COMPLETE,function(){ _timer.removeEventListener(TimerEvent.TIMER_COMPLETE, arguments.callee); //_process.cancel(); _process.complete( process2 ); }); _timer.reset(); _timer.start(); } function process3(args:*=null){ var color:uint = uint( args[2] ); trace('process3',color); graphics.clear(); graphics.beginFill( color, 1.0 ); graphics.drawRect( 0,0, stage.stageWidth, stage.stageHeight ); _timer.addEventListener(TimerEvent.TIMER_COMPLETE,function(){ _timer.removeEventListener(TimerEvent.TIMER_COMPLETE, arguments.callee); //_process.cancel(); _process.complete( process3 ); }); _timer.reset(); _timer.start(); } function process4(args:*=null){ var color:uint = uint( args[3] ); trace('process4',color); graphics.clear(); graphics.beginFill( color, 1.0 ); graphics.drawRect( 0,0, stage.stageWidth, stage.stageHeight ); _timer.addEventListener(TimerEvent.TIMER_COMPLETE,function(){ _timer.removeEventListener(TimerEvent.TIMER_COMPLETE, arguments.callee); //_process.cancel(); _process.complete( process4 ); }); _timer.reset(); _timer.start(); } private function _onCancel(e:OSCSyncProcessEvent):void{ trace(e); _timer.stop(); graphics.clear(); } }}
Expand Down

0 comments on commit 92eb40e

Please sign in to comment.