navweapdatahandler.java
来自「这是广泛使用的通信开源项目,对于大容量,高并发的通讯要求完全能够胜任,他广泛可用」· Java 代码 · 共 408 行
JAVA
408 行
// NavWeapDataHandler.java,v 1.7 1999/11/19 23:57:33 cdgill Exp
//
// = FILENAME
// NavWeapDataHandler.java
//
// = AUTHOR
// Michael Kircher (mk1@cs.wustl.edu)
//
// = DESCRIPTION
// This is an implementation of the interface Data Handler,
// it handles Navigation and Weapons data, where statistic data is
// part of it. Several Observables are declared, they can be accessed by
// any number of Observers, which could reside in a Java Bean for example.
//
// ============================================================================
import org.omg.CORBA.*;
public class NavWeapDataHandler implements DataHandler {
java.util.Hashtable ObservablesTable;
int received_events_;
// Observable for Persian Recursion data
class PersianObservable extends DemoObservable {
// to ask which kind of viewer is needed to display data
public int getProperty () {
return Properties.PERSIAN;
}
public void updatePersianData (PersianRecursion.Data data) {
// System.out.println ("in PersianObservable.updatePersianData");
setChanged ();
notifyObservers (data);
}
}
// Observable for Navigation data
class NavigationObservable extends DemoObservable {
// to ask which kind of viewer is needed to display data
public int getProperty () {
return Properties.NAVIGATION;
}
public void updateNavigation (Navigation navigation) {
setChanged ();
notifyObservers (navigation);
}
}
class WeaponsObservable extends DemoObservable {
// to ask which kind of viewer is needed to display data
public int getProperty () {
return Properties.WEAPONS;
}
public void updateWeapons (Weapons weapons) {
setChanged ();
notifyObservers (weapons);
}
}
class Cpu_UsageObservable extends DemoObservable {
public int getProperty () {
return Properties.DOUBLE;
}
public void updateCpu_Usage (double utilization) {
setChanged ();
Double temp_ = new Double (utilization);
notifyObservers (temp_);
}
}
class OverheadObservable extends DemoObservable {
public int getProperty () {
return Properties.DOUBLE;
}
public void updateOverhead (double overhead) {
setChanged ();
Double temp_ = new Double (overhead);
notifyObservers (temp_);
}
}
class JitterObservable extends DemoObservable {
double latency = 0.0;
double avg_latency = 0.0;
double sample_count = 0.0;
public int getProperty () {
return Properties.DOUBLE;
}
public void updateJitter (long completion_time,
long computation_time,
long arrival_time) {
latency = (double)(completion_time) -
(double)(computation_time) -
(double)(arrival_time);
latency = latency > 0 ? latency : 0;
sample_count = sample_count + 1.0;
avg_latency = (avg_latency * (sample_count - 1.0) + latency) /
(sample_count);
double jitter_ = (double)Math.abs(latency - avg_latency);
setChanged ();
Double temp_ = new Double (jitter_);
notifyObservers (temp_);
}
}
class DeadlinesObservable extends DemoObservable {
public int getProperty () {
return Properties.DOUBLE;
}
public void updateDeadlines (long deadline_time,
long completion_time) {
double missed_ = (deadline_time < completion_time) ? 1.0 : 0.0;
Double temp_ = new Double (missed_);
setChanged ();
notifyObservers (temp_);
}
}
class CriticalDeadlinesObservable extends DeadlinesObservable {
public int getProperty () {
return Properties.DOUBLE;
}
public void updateDeadlines (long deadline_time,
long completion_time,
long criticality) {
double missed_ = ((criticality > 0) &&
(deadline_time < completion_time)) ? 1.0 : 0.0;
Double temp_ = new Double (missed_);
setChanged ();
notifyObservers (temp_);
}
}
class LatencyObservable extends DemoObservable {
double latency = 0.0;
double last_latency = 0.0;
public int getProperty () {
return Properties.DOUBLE;
}
public void updateLatency (long computation_time) {
last_latency = latency;
latency = (double)(computation_time);
latency = latency > 0 ? latency : 0;
setChanged ();
Double temp_ = new Double(latency);
notifyObservers (temp_);
}
public void updateLatency (long completion_time,
long computation_time,
long arrival_time) {
last_latency = latency;
latency = (double)(completion_time) -
(double)(computation_time) -
(double)(arrival_time);
latency = latency > 0 ? latency : 0;
setChanged ();
Double temp_ = new Double(latency);
notifyObservers (temp_);
}
}
public synchronized void update (RtecEventComm.Event event) {
// System.out.println ("in NavWeapDataHandler.update");
Any any_value;
PersianRecursion.Data persian_recursion_data;
any_value = event.data.any_value;
if (any_value.type().equal (PersianRecursion.DataHelper.type()))
{
// System.out.println ("type matched PersianRecursion.Data");
try
{
persian_recursion_data =
PersianRecursion.DataHelper.extract (any_value);
}
catch (Exception e)
{
System.err.println (e.getMessage () +
"\nThe stack trace is:\n");
e.printStackTrace ();
return;
}
// System.out.println ("extracted any");
if (persian_recursion_data.criticality_level.equals (RtecScheduler.Criticality_t.HIGH_CRITICALITY)
|| persian_recursion_data.criticality_level.equals (RtecScheduler.Criticality_t.VERY_HIGH_CRITICALITY))
{
// System.out.println ("obtaining high priority persian recursion observable");
PersianObservable pobs_hi =
(PersianObservable) ObservablesTable.get ("High Consumer Persian Recursion");
// System.out.println ("updating high priority persian recursion observable");
pobs_hi.updatePersianData (persian_recursion_data);
// LatencyObservable lobs_hi =
// (LatencyObservable) ObservablesTable.get ("High Consumer Execution Time (100 ns)");
// lobs_hi.updateLatency (persian_recursion_data.computation_time);
}
else
{
// System.out.println ("obtaining low priority persian recursion observable");
PersianObservable pobs_lo =
(PersianObservable) ObservablesTable.get ("Low Consumer Persian Recursion");
// System.out.println ("obtained low priority persian recursion observable");
// System.out.println ("updating low priority persian recursion observable");
pobs_lo.updatePersianData (persian_recursion_data);
// System.out.println ("updated low priority persian recursion observable");
// LatencyObservable lobs_lo =
// (LatencyObservable) ObservablesTable.get ("Low Consumer Execution Time (100 ns)");
// lobs_lo.updateLatency (persian_recursion_data.computation_time);
}
// System.out.println ("done updating PersianObservables");
received_events_++;
// System.out.println ("total events received: " + received_events_);
}
else if (any_value.type().equal (NavigationHelper.type()))
{
Navigation navigation_ = NavigationHelper.extract (any_value);
// if the navigation data structure's update data flag is set,
// update its scheduling data with actual values from the EC
if (navigation_.update_data > 0)
{
navigation_.arrival_time = event.header.creation_time;
navigation_.completion_time = event.header.ec_send_time;
navigation_.deadline_time += event.header.creation_time;
}
NavigationObservable nobs = (NavigationObservable)ObservablesTable.get ("Navigation");
nobs.updateNavigation (navigation_);
Cpu_UsageObservable cobs = (Cpu_UsageObservable)ObservablesTable.get ("CPU Usage");
cobs.updateCpu_Usage (navigation_.utilization);
OverheadObservable oobs = (OverheadObservable)ObservablesTable.get ("Overhead");
oobs.updateOverhead (navigation_.overhead);
JitterObservable jobs = (JitterObservable)ObservablesTable.get ("Latency Jitter (100 ns)");
jobs.updateJitter (navigation_.completion_time,
navigation_.computation_time,
navigation_.arrival_time);
JitterObservable njobs = (JitterObservable)ObservablesTable.get ("Navigation Latency Jitter (100 ns)");
njobs.updateJitter (navigation_.completion_time,
navigation_.computation_time,
navigation_.arrival_time);
DeadlinesObservable dobs = (DeadlinesObservable)ObservablesTable.get ("Missed Deadlines");
dobs.updateDeadlines (navigation_.deadline_time,
navigation_.completion_time);
CriticalDeadlinesObservable cdobs =
(CriticalDeadlinesObservable)ObservablesTable.get ("Missed Critical Deadlines");
cdobs.updateDeadlines (navigation_.deadline_time,
navigation_.completion_time,
navigation_.criticality);
LatencyObservable lobs = (LatencyObservable)ObservablesTable.get ("Latency (100 ns)");
lobs.updateLatency (navigation_.completion_time,
navigation_.computation_time,
navigation_.arrival_time);
LatencyObservable nlobs = (LatencyObservable)ObservablesTable.get ("Navigation Latency (100 ns)");
nlobs.updateLatency (navigation_.completion_time,
navigation_.computation_time,
navigation_.arrival_time);
received_events_++;
}
else if (any_value.type().equal (WeaponsHelper.type()))
{
Weapons weapons_ = WeaponsHelper.extract (any_value);
// if the weapons structure's update data flag is set, update
// itss scheduling data with actual values from the EC
if (weapons_.update_data > 0)
{
weapons_.arrival_time = event.header.creation_time;
weapons_.completion_time = event.header.ec_send_time;
weapons_.deadline_time += event.header.creation_time;
}
WeaponsObservable wobs = (WeaponsObservable)ObservablesTable.get ("Weapons");;
wobs.updateWeapons (weapons_);
Cpu_UsageObservable cobs = (Cpu_UsageObservable)ObservablesTable.get ("CPU Usage");
cobs.updateCpu_Usage (weapons_.utilization);
OverheadObservable oobs = (OverheadObservable)ObservablesTable.get ("Overhead");
oobs.updateOverhead (weapons_.overhead);
JitterObservable jobs = (JitterObservable)ObservablesTable.get ("Latency Jitter (100 ns)");
jobs.updateJitter (weapons_.completion_time,
weapons_.computation_time,
weapons_.arrival_time);
JitterObservable wjobs = (JitterObservable)ObservablesTable.get ("Weapons Latency Jitter (100 ns)");
wjobs.updateJitter (weapons_.completion_time,
weapons_.computation_time,
weapons_.arrival_time);
DeadlinesObservable dobs = (DeadlinesObservable)ObservablesTable.get ("Missed Deadlines");
dobs.updateDeadlines (weapons_.deadline_time,
weapons_.completion_time);
CriticalDeadlinesObservable cdobs = (CriticalDeadlinesObservable)ObservablesTable.get ("Missed Critical Deadlines");
cdobs.updateDeadlines (weapons_.deadline_time,
weapons_.completion_time,
weapons_.criticality);
LatencyObservable lobs = (LatencyObservable)ObservablesTable.get ("Latency (100 ns)");
lobs.updateLatency (weapons_.completion_time,
weapons_.computation_time,
weapons_.arrival_time);
LatencyObservable wlobs = (LatencyObservable)ObservablesTable.get ("Weapons Latency (100 ns)");
wlobs.updateLatency (weapons_.completion_time,
weapons_.computation_time,
weapons_.arrival_time);
received_events_++;
}
else
{
System.out.println ("Received wrong type information");
System.out.println ("Received any_value.type (): [" +
any_value.type() + "]");
System.out.println ("Expected NavigationHelper.type (): [" +
NavigationHelper.type() + "]");
System.out.println ("OR WeaponsHelper.type (): [" +
WeaponsHelper.type() + "]");
System.out.println ("OR PersianRecursion.DataHelper.type (): [" +
PersianRecursion.DataHelper.type() + "]");
}
}
NavWeapDataHandler () {
ObservablesTable = new java.util.Hashtable();
ObservablesTable.put ("Navigation", new NavigationObservable());
ObservablesTable.put ("Weapons", new WeaponsObservable());
ObservablesTable.put ("CPU Usage", new Cpu_UsageObservable());
ObservablesTable.put ("Overhead", new OverheadObservable());
ObservablesTable.put ("Latency Jitter (100 ns)", new JitterObservable());
ObservablesTable.put ("Navigation Latency Jitter (100 ns)", new JitterObservable());
ObservablesTable.put ("Weapons Latency Jitter (100 ns)", new JitterObservable());
ObservablesTable.put ("Missed Deadlines", new DeadlinesObservable());
ObservablesTable.put ("Missed Critical Deadlines", new CriticalDeadlinesObservable());
ObservablesTable.put ("Latency (100 ns)", new LatencyObservable());
ObservablesTable.put ("Weapons Latency (100 ns)", new LatencyObservable());
ObservablesTable.put ("Navigation Latency (100 ns)", new LatencyObservable());
ObservablesTable.put ("High Consumer Persian Recursion", new PersianObservable());
ObservablesTable.put ("Low Consumer Persian Recursion", new PersianObservable());
ObservablesTable.put ("High Consumer Execution Time (100 ns)", new LatencyObservable());
ObservablesTable.put ("Low Consumer Execution Time (100 ns)", new LatencyObservable());
}
public java.util.Enumeration getObservablesList () {
return ObservablesTable.keys ();
}
public DemoObservable getObservable(String name) {
return (DemoObservable)ObservablesTable.get (name);
}
public int getObservableProperty (String name) {
DemoObservable obs = (DemoObservable)ObservablesTable.get (name);
return obs.getProperty ();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?