機能解説

<< Click to Display Table of Contents >>

マニュアル > サーバ作成ガイド > アクション編 > アクションリファレンス > スクリプトVer2(SC2) >

機能解説

オブジェクトの階層について

スクリプトVer2アクションはスクリプトファイルに記述されたスクリプトを実行しますが、1つのスクリプトファイル内に記述されている内容が「ルートオブジェクト」となります。

 

オブジェクトには階層構造があり、ルートオブジェクトが第1階層です。ルートオブジェクトは全体にかかわるプロパティやメソッドを持つオブジェクトです。ルートオブジェクトは算術オブジェクト(Mathオブジェクト)を子オブジェクトとして持つほか、後述する「new」演算子によって生成されたオブジェクトもルートの子オブジェクトとして利用することができます。尚、ルートオブジェクトに独自のユーザ定義関数を記述した場合、その関数は同一のスクリプトファイル内からのみ呼び出すことができます。

 

c_action_0352

 

 

本アクションを呼び出すイベントについて

スクリプトVer2アクションのスクリプトは、他のアクションと同様にPanel Serverのイベントから呼び出すことによって実行されます。

 

定周期イベント/定刻イベント/タグイベントなどの各イベントから本アクションの呼び出しを行うことで、スクリプトを実行する周期やタイミングを設定することができます。

 

c_action_0388

 

スクリプトに記述された処理は、イベントからアクションが呼び出される都度実行されます。

 

例えば、Panel Serverがオンライン実行されている間、スクリプトにより一定周期での繰り返し処理を行いたい場合など、いわゆる常駐処理を行いたいようなケースでは定周期イベントから呼び出すようにします。

 

c_action_0390

 

一方、繰り返し処理ではなく、ある特定のタイミングでのみ処理を行いたいようなケースでは、定刻イベントやタグイベントから呼び出すようにします。

 

c_action_0389

 

hint

イベントを登録する際には、定周期/定刻/タグのイベントのうち、使用目的に合ったイベントを選択して本アクションを登録してください。例えば、定周期でスクリプトを実行したい場合は「定周期イベント」を選びます。あるいは、決まった時刻に定刻でワンショットで実行したいようなバッチ的な処理の場合は「定刻イベント」を、タグの値をトリガとして処理を実行したい場合は、タグイベントを選択します。

 

 

スクリプトの実行とイベントの発生タイミング

スクリプトVer2アクションがPanel Serverのイベントから実行されると、スクリプト内部ではOnTimer/OnHeartBeat/OnTagValueChanged/OnExpressionValueChangedなどの各イベントが発生します。

 

ここで重要な考え方として、スクリプトのイベントの発生タイミングがあります。スクリプトの各イベントはアクションが実行されたタイミングで評価され、発生条件を満たしているイベントが発生します。例えば、OnTagValueChanged/OnExpressionValueChangedなどは、タグの値や条件式などの条件が成立したタイミングに即座に発生するのではなく、アクションが実行されたタイミング(つまり、定周期イベントなどから呼び出されたタイミング)で発生します。

 

同様に、OnHeartBeatイベントはイベントによりアクションが実行される毎に必ず呼び出されます。例えば、1秒の定周期イベントでアクションを呼び出すように設定すると、OnHeartBeatイベントは1秒ごとに呼び出されます。又、OnTimerイベントのタイマー処理(一定間隔で処理を実行する)の発生間隔についても、Panel Serverのイベントからの呼び出し周期に依存します。例えば、10秒の定周期イベントにて本アクションを呼び出すように設定にした場合、スクリプト中で SetTimer(0, 5000, -1) のような記述を行って5秒周期のタイマーを発生させようとしても、OnTimerイベントの発生は10秒毎となります。従って、OnTimerイベントのタイマー処理を実装する場合は、タイマーより早い周期の定周期イベントから本アクションを呼び出す必要があります。

 

 

hint

定周期で実行させる処理をスクリプトに実装したい場合、OnHeartBeatイベントを使用する方法と、SetTimerメソッドによるOnTimerイベントを使用する方法があります。定周期処理の実装には、特別な理由が無い限り、SetTimerメソッドによるOnTimerイベントの使用を推奨します。OnHeartBeatイベントはイベントによりアクションが実行される毎に必ず呼び出されるため、実行される周期はPanel Serverのイベントから本アクションを呼び出すタイミングに依存します。一方、SetTimerを使用する場合は、周期が異なる複数のタイマーを同時に設定することができる等のメリットがあります。考え方としては、定周期的な処理の実装にはOnTimerイベントを使用し、Panel Serverの定刻イベントなどで指定した時間のタイミングにスクリプトを実行したいような場合はOnHeartBeatイベントを使用するなど、用途により選択してください。

 

hint

OnTimerイベントは、スクリプトVer2アクションがイベントにより呼ばれた時に、条件(OnTimerで設定した周期が経過している)を満たしていた場合に実行されます。

 

例えば、

 ・イベントの周期:10秒

 ・OnTimerの周期:11秒

と指定している場合、最初の実行から11秒後にOnTimerの処理がされるのではなく、以下のようにイベントでアクションが再び呼ばれた段階で、処理が実行されます。

 

1:初回実行(0秒)→OnTimerのカウント開始。

2:イベントで1度目の実行(10秒経過)→タイマー周期は11秒なので条件が不成立の為、まだ処理はされない。

3:OnTimerの周期経過(11秒経過)→スクリプトVer2アクションは呼び出されていない為、まだ実行されない。

4:イベントで2度目の実行(20秒経過)→OnTimerの設定周期を超えている為、条件が成立し、処理が実行される。

 

従って、イベント毎にOnTimerの処理を行いたい場合は、イベントの周期よりも短い周期をOnTimerの周期とする必要があります。