OpenECHO
 All Classes Namespaces Files Functions Variables
Echo.java
Go to the documentation of this file.
1 /*
2  * Copyright 2012 Sony Computer Science Laboratories, Inc. <info@kadecot.net>
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.sonycsl.echo;
17 
18 import java.io.IOException;
19 import java.io.PrintStream;
20 import java.net.InetAddress;
21 import java.util.ArrayList;
22 import java.util.Collection;
23 import java.util.HashMap;
24 import java.util.List;
25 import java.util.Map;
26 import java.util.concurrent.ConcurrentHashMap;
27 
30 import com.sonycsl.echo.eoj.device.airconditioner.*;
31 import com.sonycsl.echo.eoj.device.audiovisual.*;
32 import com.sonycsl.echo.eoj.device.cookinghousehold.*;
33 import com.sonycsl.echo.eoj.device.health.*;
34 import com.sonycsl.echo.eoj.device.housingfacilities.*;
35 import com.sonycsl.echo.eoj.device.managementoperation.*;
36 import com.sonycsl.echo.eoj.device.sensor.*;
37 import com.sonycsl.echo.eoj.profile.*;
39 
40 
41 
42 public final class Echo {
43 
44  private static volatile EchoNode sSelfNode;
45  private static Map<String, EchoNode> sOtherNodes;
46 
47  private static Events sEvents = null;
48  private static ArrayList<EventListener> sListeners;
49 
50  private volatile static boolean sStarted = false;
51  private volatile static boolean sCleared= true;
52 
53  static {
54  sOtherNodes = new ConcurrentHashMap<String, EchoNode>();
55  sListeners = new ArrayList<EventListener>();
56  sEvents = new Events();
57  }
58 
59  private Echo() {
60  }
61 
62  public synchronized static EchoNode start(NodeProfile profile, DeviceObject[] devices) throws IOException {
63  if(sStarted) return null;
64  if(!sCleared) return null;
65 
66  sStarted = true;
67  sCleared = false;
68 
69  sSelfNode = new EchoNode(profile, devices);
70  profile.setNode(sSelfNode);
71  for(DeviceObject dev : devices) {
72  dev.setNode(sSelfNode);
73  }
74  EchoSocket.openSocket();
75  EchoSocket.startReceiverThread();
76 
77  //Echo.getEventListener().onNewNode(sSelfNode);
78  sSelfNode.onNew();
79  //Echo.getEventListener().onFoundNode(sSelfNode);
80  sSelfNode.onFound();
81  sSelfNode.getNodeProfile().onNew();
82  sSelfNode.getNodeProfile().onFound();
83 
84  for(DeviceObject dev : devices) {
85  dev.onNew();
86  dev.onFound();
87  }
88 
89  sSelfNode.getNodeProfile().inform().reqInformInstanceListNotification().send();
90  return sSelfNode;
91  }
92 
93  public synchronized static void restart() throws IOException {
94  if(sCleared) return;
95  sStarted = true;
96  EchoSocket.openSocket();
97  EchoSocket.startReceiverThread();
98  sSelfNode.getNodeProfile().inform().reqInformInstanceListNotification().send();
99  }
100 
101  public synchronized static void stop() throws IOException {
102  System.err.println("Echo stop");
103  //if(!EchoSocket.isClosed()) {
104  EchoSocket.closeSocket();
105  EchoSocket.stopReceiverThread();
106  //}
107  sStarted = false;
108  //sNodes.clear();
109  }
110 
111  public synchronized static void clear() throws IOException {
112  stop();
113  sCleared = true;
114 
115  sSelfNode = null;
116 
117  sOtherNodes.clear();
118  sListeners.clear();
119  }
120 
121  public static boolean isStarted() {
122  return sStarted;
123  }
124 
125  // remain for back compatibility.
126  @Deprecated
127  public static EchoNode getNode() {
128  return getSelfNode();
129  }
130  public static EchoNode getSelfNode() {
131  return sSelfNode;
132  }
133 
134  public static EchoNode[] getNodes() {
135  Collection<EchoNode> nodes = sOtherNodes.values();
136  List<EchoNode> ret = new ArrayList<EchoNode>();
137  if(sSelfNode != null) {
138  ret.add(sSelfNode);
139  }
140  for(EchoNode n : nodes) {
141  ret.add(n);
142  }
143  return ret.toArray(new EchoNode[]{});
144  }
145 
146  public static EchoNode getNode(String address) {
147  if(EchoSocket.SELF_ADDRESS.equals(address)) {
148  return sSelfNode;
149  }
150  return sOtherNodes.get(address);
151  }
152 
153  public synchronized static EchoNode addOtherNode(String address) {
154  EchoNode node = new EchoNode(address);
155  node.getNodeProfile().setNode(node);
156  sOtherNodes.put(address, node);
157 
158  return node;
159  }
160 
161  public static void removeOtherNode(String address) {
162  sOtherNodes.remove(address);
163  }
164 
165  //public static void removeAllNode() {
166  // sNodes.clear();
167  //}
168 
169  /*
170  public synchronized static EchoNode[] getActiveNodes() {
171  Collection<EchoNode> nodes = sOtherNodes.values();
172  List<EchoNode> ret = new ArrayList<EchoNode>();
173  if(sSelfNode != null && sSelfNode.isActive()){
174  ret.add(sSelfNode);
175  }
176  for(EchoNode n : nodes) {
177  if(n.isActive())
178  ret.add(n);
179  }
180  return ret.toArray(new EchoNode[]{});
181  }*/
182 
183 
184 // @Deprecated
185 // public static EchoObject getInstance(InetAddress address, byte classGroupCode, byte classCode, byte instanceCode) {
186 // return getInstance(address, EchoUtils.getEchoClassCode(classGroupCode, classCode), instanceCode);
187 // }
188 //
189 // @Deprecated
190 // public static EchoObject getInstance(InetAddress address, int objectCode){
191 // return getInstance(address, EchoUtils.getEchoClassCodeFromObjectCode(objectCode), EchoUtils.getInstanceCodeFromObjectCode(objectCode));
192 // }
193 //
194 // @Deprecated
195 // public static EchoObject getInstance(InetAddress address, short echoClassCode, byte instanceCode) {
196 //
197 // if(sCleared) {
198 // return null;
199 // }
200 // if(address == null) {
201 // return null;
202 // }
203 // if(address.equals(sSelfNode.getAddressStr())) {
204 // if(!sSelfNode.containsInstance(echoClassCode, instanceCode)) return null;
205 // return sSelfNode.getInstance(echoClassCode, instanceCode);
206 // } else if(sOtherNodes.containsKey(address)) {
207 // EchoNode node = sOtherNodes.get(address);
208 // if(!node.containsInstance(echoClassCode, instanceCode)) return null;
209 // return node.getInstance(echoClassCode, instanceCode);
210 // } else {
211 // return null;
212 // }
213 // }
214  /*
215  public synchronized static void updateNodeInstance(InetAddress address, byte classGroupCode, byte classCode, byte instanceCode) {
216 
217  if(sCleared) {
218  return;
219  }
220  if(address == null) {
221  return;
222  }
223  if(address.equals(sSelfNode.getAddress())) {
224  //if(sLocalNode.containsInstance(classGroupCode, classCode, instanceCode)) return;
225  //sLocalNode.addDevice(EchoUtils.getEchoClassCode(classGroupCode, classCode), instanceCode);
226  if(sSelfNode.containsInstance(classGroupCode, classCode, instanceCode)) {
227  sSelfNode.getInstance(classGroupCode, classCode, instanceCode).setActive(true);
228  return;
229  }
230  } else if(sOtherNodes.containsKey(address)) {
231  EchoNode node = sOtherNodes.get(address);
232  if(node.containsInstance(classGroupCode, classCode, instanceCode)){
233  node.getInstance(classGroupCode, classCode, instanceCode).setActive(true);
234  return;
235  } else {
236  node.addDevice(EchoUtils.getEchoClassCode(classGroupCode, classCode), instanceCode);
237  }
238  } else {
239  if(NodeProfile.ECHO_CLASS_CODE == EchoUtils.getEchoClassCode(classGroupCode, classCode)
240  && NodeProfile.INSTANCE_CODE == instanceCode) {
241  new EchoNode(address, new ArrayList<Integer>());
242  } else {
243  ArrayList<Integer> list = new ArrayList<Integer>();
244  list.add(EchoUtils.getEchoObjectCode(classGroupCode, classCode, instanceCode));
245  new EchoNode(address, list);
246  }
247  }
248  }
249  */
250  //public synchronized static void updateNodeDevices(InetAddress address, List<Integer> echoObjectCodeList) {
251  // if(echoObjectCodeList == null) return;
252  /*
253  if(sLocalNode.getAddress().equals(address)) {
254  //sLocalNode.updateDevices(echoObjectCodeList);
255  return;
256  }else if(sNodes.containsKey(address)) {
257  EchoNode node = sNodes.get(address);
258  node.updateDevices(echoObjectCodeList);
259  } else {
260  new EchoNode(address, echoObjectCodeList);
261  }*/
262 /*
263  if(sCleared) {
264  return;
265  }
266  if(address == null) {
267  return;
268  }
269  if(!address.equals(sSelfNode.getAddress())
270  && !sOtherNodes.containsKey(address)) {
271  new EchoNode(address, echoObjectCodeList);
272  return;
273  }
274  for(int objCode: echoObjectCodeList) {
275  byte[] a = EchoUtils.toByteArray(objCode, 4);
276  updateNodeInstance(address, a[1],a[2],a[3]);
277  }
278  if(!sOtherNodes.containsKey(address)) return;
279  for(DeviceObject dev : sOtherNodes.get(address).getDevices()) {
280  boolean active = false;
281  for(int code : echoObjectCodeList) {
282  if(code == dev.getEchoObjectCode()) {
283  active = true;
284  break;
285  }
286  }
287  dev.setActive(active);
288  }
289  }*/
290 
291  public static void addEventListener(EventListener listener) {
292  sListeners.add(listener);
293  }
294 
295  public static EventListener getEventListener() {
296  return sEvents;
297  }
298 
299  public static class EventListener {
300  public void setProperty(EchoObject eoj, EchoProperty property, boolean success) {}
301  public void getProperty(EchoObject eoj, EchoProperty property) {}
302  public void isValidProperty(EchoObject eoj, EchoProperty property, boolean valid) {}
303 
304  public void onSetProperty(EchoObject eoj, short tid, byte esv, EchoProperty property, boolean success) {}
305  public void onGetProperty(EchoObject eoj, short tid, byte esv, EchoProperty property, boolean success) {}
306  public void onInformProperty(EchoObject eoj, short tid, byte esv, EchoProperty property) {}
307 
308  public void reqSetPropertyEvent(EchoObject eoj, EchoProperty property) {}
309  public void reqGetPropertyEvent(EchoObject eoj, EchoProperty property) {}
310  public void reqInformPropertyEvent(EchoObject eoj, EchoProperty property) {}
311  public void reqInformCPropertyEvent(EchoObject eoj, EchoProperty property) {}
312 
313  public void sendEvent(EchoFrame frame) {}
314  public void receiveEvent(EchoFrame frame) {}
315 
316  public void onCatchException(Exception e) {}
317 
318  public void onFoundNode(EchoNode node){}
319  public void onFoundEchoObject(EchoObject eoj){}
320 
321  public void onNewNode(EchoNode node) {}
322  public void onNewEchoObject(EchoObject eoj) {}
323  public void onNewProfileObject(ProfileObject profile) {}
324  public void onNewNodeProfile(NodeProfile profile) {}
325  public void onNewDeviceObject(DeviceObject device) {}
326  public void onNewActivityAmountSensor(ActivityAmountSensor device) {}
327  public void onNewAirPollutionSensor(AirPollutionSensor device) {}
328  public void onNewAirSpeedSensor(AirSpeedSensor device) {}
329  public void onNewBathHeatingStatusSensor(BathHeatingStatusSensor device) {}
330  public void onNewBathWaterLevelSensor(BathWaterLevelSensor device) {}
331  public void onNewBedPresenceSensor(BedPresenceSensor device) {}
332  public void onNewCallSensor(CallSensor device) {}
333  public void onNewCigaretteSmokeSensor(CigaretteSmokeSensor device) {}
334  public void onNewCO2Sensor(CO2Sensor device) {}
335  public void onNewCondensationSensor(CondensationSensor device) {}
336  public void onNewCrimePreventionSensor(CrimePreventionSensor device) {}
337  public void onNewCurrentValueSensor(CurrentValueSensor device) {}
338  public void onNewDifferentialPressureSensor(DifferentialPressureSensor device) {}
339  public void onNewEarthquakeSensor(EarthquakeSensor device) {}
340  public void onNewElectricEnergySensor(ElectricEnergySensor device) {}
341  public void onNewElectricLeakSensor(ElectricLeakSensor device) {}
342  public void onNewEmergencyButton(EmergencyButton device) {}
343  public void onNewFireSensor(FireSensor device) {}
344  public void onNewFirstAidSensor(FirstAidSensor device) {}
345  public void onNewFlameSensor(FlameSensor device) {}
346  public void onNewGasLeakSensor(GasLeakSensor device) {}
347  public void onNewGasSensor(GasSensor device) {}
348  public void onNewHumanBodyLocationSensor(HumanBodyLocationSensor device) {}
349  public void onNewHumanDetectionSensor(HumanDetectionSensor device) {}
350  public void onNewHumiditySensor(HumiditySensor device) {}
351  public void onNewIlluminanceSensor(IlluminanceSensor device) {}
352  public void onNewMailingSensor(MailingSensor device) {}
353  public void onNewMicromotionSensor(MicromotionSensor device) {}
354  public void onNewOdorSensor(OdorSensor device) {}
355  public void onNewOpenCloseSensor(OpenCloseSensor device) {}
356  public void onNewOxygenSensor(OxygenSensor device) {}
357  public void onNewPassageSensor(PassageSensor device) {}
358  public void onNewRainSensor(RainSensor device) {}
359  public void onNewSnowSensor(SnowSensor device) {}
360  public void onNewSoundSensor(SoundSensor device) {}
361  public void onNewTemperatureSensor(TemperatureSensor device) {}
362  public void onNewVisitorSensor(VisitorSensor device) {}
363  public void onNewVOCSensor(VOCSensor device) {}
364  public void onNewWaterFlowRateSensor(WaterFlowRateSensor device) {}
365  public void onNewWaterLeakSensor(WaterLeakSensor device) {}
366  public void onNewWaterLevelSensor(WaterLevelSensor device) {}
367  public void onNewWaterOverflowSensor(WaterOverflowSensor device) {}
368  public void onNewWeightSensor(WeightSensor device) {}
369  public void onNewAirCleaner(AirCleaner device) {}
370  public void onNewAirConditionerVentilationFan(AirConditionerVentilationFan device) {}
371  public void onNewElectricHeater(ElectricHeater device) {}
372  public void onNewFanHeater(FanHeater device) {}
373  public void onNewHomeAirConditioner(HomeAirConditioner device) {}
374  public void onNewHumidifier(Humidifier device) {}
375  public void onNewPackageTypeCommercialAirConditionerIndoorUnit(PackageTypeCommercialAirConditionerIndoorUnit device) {}
376  public void onNewPackageTypeCommercialAirConditionerOutdoorUnit(PackageTypeCommercialAirConditionerOutdoorUnit device) {}
377  public void onNewVentilationFan(VentilationFan device) {}
378  public void onNewBathroomHeaterAndDryer(BathroomHeaterAndDryer device) {}
379  public void onNewBattery(Battery device) {}
380  public void onNewBuzzer(Buzzer device) {}
381  public void onNewColdOrHotWaterHeatSourceEquipment(ColdOrHotWaterHeatSourceEquipment device) {}
382  public void onNewElectricallyOperatedShade(ElectricallyOperatedShade device) {}
383  public void onNewElectricLock(ElectricLock device) {}
384  public void onNewElectricShutter(ElectricShutter device) {}
385  public void onNewElectricStormWindow(ElectricStormWindow device) {}
386  public void onNewElectricToiletSeat(ElectricToiletSeat device) {}
387  public void onNewElectricVehicle(ElectricVehicle device) {}
388  public void onNewElectricWaterHeater(ElectricWaterHeater device) {}
389  public void onNewEngineCogeneration(EngineCogeneration device) {}
390  public void onNewFloorHeater(FloorHeater device) {}
391  public void onNewFuelCell(FuelCell device) {}
392  public void onNewGasMeter(GasMeter device) {}
393  public void onNewGeneralLighting(GeneralLighting device) {}
394  public void onNewHouseholdSolarPowerGeneration(HouseholdSolarPowerGeneration device) {}
395  public void onNewInstantaneousWaterHeater(InstantaneousWaterHeater device) {}
396  public void onNewLPGasMeter(LPGasMeter device) {}
397  public void onNewPowerDistributionBoardMetering(PowerDistributionBoardMetering device) {}
398  public void onNewSmartElectricEnergyMeter(SmartElectricEnergyMeter device) {}
399  public void onNewSmartGasMeter(SmartGasMeter device) {}
400  public void onNewSprinkler(Sprinkler device) {}
401  public void onNewWaterFlowmeter(WaterFlowmeter device) {}
402  public void onNewWattHourMeter(WattHourMeter device) {}
403  public void onNewClothesDryer(ClothesDryer device) {}
404  public void onNewCombinationMicrowaveOven(CombinationMicrowaveOven device) {}
405  public void onNewCookingHeater(CookingHeater device) {}
406  public void onNewElectricHotWaterPot(ElectricHotWaterPot device) {}
407  public void onNewRefrigerator(Refrigerator device) {}
408  public void onNewRiceCooker(RiceCooker device) {}
409  public void onNewWasherAndDryer(WasherAndDryer device) {}
410  public void onNewWashingMachine(WashingMachine device) {}
411  public void onNewWeighing(Weighing device) {}
412  public void onNewController(Controller device) {}
413  public void onNewSwitch(Switch device) {}
414  public void onNewDisplay(Display device) {}
415  public void onNewTelevision(Television device) {}
416  }
417 
418  public static class Logger extends EventListener {
419  PrintStream mOut;
420 
421  public Logger(PrintStream out) {
422  mOut = out;
423  }
424 
425  @Override
426  public void setProperty(EchoObject eoj, EchoProperty property,
427  boolean success) {
428  long millis = System.currentTimeMillis();
429  mOut.println("millis:"+millis
430  +",method:set,"+eoj.toString()
431  +",epc:"+EchoUtils.toHexString(property.epc)
432  +",pdc:"+EchoUtils.toHexString(property.pdc)
433  +",edt:"+EchoUtils.toHexString(property.edt)
434  +",success:"+success);
435  }
436 
437  @Override
438  public void getProperty(EchoObject eoj, EchoProperty property) {
439  long millis = System.currentTimeMillis();
440  mOut.println("millis:"+millis
441  +",method:get,"+eoj.toString()
442  +",epc:"+EchoUtils.toHexString(property.epc)
443  +",pdc:"+EchoUtils.toHexString(property.pdc)
444  +",edt:"+EchoUtils.toHexString(property.edt));
445  }
446 
447  @Override
448  public void isValidProperty(EchoObject eoj, EchoProperty property,
449  boolean valid) {
450  // TODO Auto-generated method stub
451  super.isValidProperty(eoj, property, valid);
452  }
453 
454  @Override
455  public void onSetProperty(EchoObject eoj, short tid, byte esv,
456  EchoProperty property, boolean success) {
457  long millis = System.currentTimeMillis();
458  mOut.println("millis:"+millis
459  +",method:onSet,"+eoj.toString()
460  +",tid:"+EchoUtils.toHexString(tid)
461  +",esv:"+EchoUtils.toHexString(esv)
462  +",epc:"+EchoUtils.toHexString(property.epc)
463  +",pdc:"+EchoUtils.toHexString(property.pdc)
464  +",edt:"+EchoUtils.toHexString(property.edt)
465  +",success:"+success);
466  }
467 
468  @Override
469  public void onGetProperty(EchoObject eoj, short tid, byte esv,
470  EchoProperty property, boolean success) {
471  long millis = System.currentTimeMillis();
472  mOut.println("millis:"+millis
473  +",method:onGet,"+eoj.toString()
474  +",tid:"+EchoUtils.toHexString(tid)
475  +",esv:"+EchoUtils.toHexString(esv)
476  +",epc:"+EchoUtils.toHexString(property.epc)
477  +",pdc:"+EchoUtils.toHexString(property.pdc)
478  +",edt:"+EchoUtils.toHexString(property.edt));
479 
480  }
481 
482  @Override
483  public void onInformProperty(EchoObject eoj, short tid, byte esv,
484  EchoProperty property) {
485  long millis = System.currentTimeMillis();
486  mOut.println("millis:"+millis
487  +",method:onInform,"+eoj.toString()
488  +",tid:"+EchoUtils.toHexString(tid)
489  +",esv:"+EchoUtils.toHexString(esv)
490  +",epc:"+EchoUtils.toHexString(property.epc));
491  }
492 
493  @Override
494  public void reqSetPropertyEvent(EchoObject eoj, EchoProperty property) {
495  long millis = System.currentTimeMillis();
496  mOut.println("millis:"+millis
497  +",method:reqSet,"+eoj.toString()
498  +",epc:"+EchoUtils.toHexString(property.epc)
499  +",pdc:"+EchoUtils.toHexString(property.pdc)
500  +",edt:"+EchoUtils.toHexString(property.edt));
501  }
502 
503  @Override
504  public void reqGetPropertyEvent(EchoObject eoj, EchoProperty property) {
505  long millis = System.currentTimeMillis();
506  mOut.println("millis:"+millis
507  +",method:reqGet,"+eoj.toString()
508  +",epc:"+EchoUtils.toHexString(property.epc)
509  +",pdc:"+EchoUtils.toHexString(property.pdc)
510  +",edt:"+EchoUtils.toHexString(property.edt));
511  }
512 
513  @Override
514  public void reqInformPropertyEvent(EchoObject eoj, EchoProperty property) {
515  long millis = System.currentTimeMillis();
516  mOut.println("millis:"+millis
517  +",method:reqInform,"+eoj.toString()
518  +",epc:"+EchoUtils.toHexString(property.epc)
519  +",pdc:"+EchoUtils.toHexString(property.pdc)
520  +",edt:"+EchoUtils.toHexString(property.edt));
521  }
522 
523  @Override
524  public void reqInformCPropertyEvent(EchoObject eoj,
525  EchoProperty property) {
526  long millis = System.currentTimeMillis();
527  mOut.println("millis:"+millis
528  +",method:reqInformC,"+eoj.toString()
529  +",epc:"+EchoUtils.toHexString(property.epc)
530  +",pdc:"+EchoUtils.toHexString(property.pdc)
531  +",edt:"+EchoUtils.toHexString(property.edt));
532  }
533 
534  @Override
535  public void sendEvent(EchoFrame frame) {
536  long millis = System.currentTimeMillis();
537  mOut.println("millis:"+millis
538  +",method:send,tid:"+EchoUtils.toHexString(frame.getTID())
539  +",esv:"+EchoUtils.toHexString(frame.getESV())
540  +",seoj:[class:"+String.format("%04x", frame.getSrcEchoClassCode())
541  +",instance:"+String.format("%02x", frame.getSrcEchoInstanceCode())
542  +"],deoj:[class:"+String.format("%04x", frame.getDstEchoClassCode())
543  +",instance:"+String.format("%02x", frame.getDstEchoInstanceCode())
544  +"],data:"+EchoUtils.toHexString(frame.getFrameByteArray()));
545  }
546 
547  @Override
548  public void receiveEvent(EchoFrame frame) {
549  long millis = System.currentTimeMillis();
550  mOut.println("millis:"+millis
551  +",method:receive,tid:"+EchoUtils.toHexString(frame.getTID())
552  +",esv:"+EchoUtils.toHexString(frame.getESV())
553  +",seoj:[class:"+String.format("%04x", frame.getSrcEchoClassCode())
554  +",instance:"+String.format("%02x", frame.getSrcEchoInstanceCode())
555  +"],deoj:[class:"+String.format("%04x", frame.getDstEchoClassCode())
556  +",instance:"+String.format("%02x", frame.getDstEchoInstanceCode())
557  +"],data:"+EchoUtils.toHexString(frame.getFrameByteArray()));
558  }
559 
560  @Override
561  public void onCatchException(Exception e) {
562  // TODO Auto-generated method stub
563  super.onCatchException(e);
564  }
565 
566  @Override
567  public void onNewNode(EchoNode node) {
568  long millis = System.currentTimeMillis();
569  mOut.println("millis:"+millis
570  +",method:new,type:node,address:"
571  +node.getAddressStr());
572  }
573 
574  @Override
575  public void onNewEchoObject(EchoObject eoj) {
576  long millis = System.currentTimeMillis();
577  mOut.println("millis:"+millis
578  +",method:new,type:eoj,"
579  +eoj.toString());
580  }
581 
582  }
583 
584  private static class Events extends EventListener {
585 
586  @Override
587  public void setProperty(EchoObject eoj, EchoProperty property,
588  boolean success) {
589  super.setProperty(eoj, property, success);
590  for(EventListener listener : sListeners) {
591  listener.setProperty(eoj, property, success);
592  }
593  }
594 
595  @Override
596  public void getProperty(EchoObject eoj, EchoProperty property) {
597  for(EventListener listener : sListeners) {
598  listener.getProperty(eoj, property);
599  }
600  }
601 
602  @Override
603  public void isValidProperty(EchoObject eoj, EchoProperty property,
604  boolean valid) {
605  for(EventListener listener : sListeners) {
606  listener.isValidProperty(eoj, property, valid);
607  }
608  }
609 
610  @Override
611  public void onSetProperty(EchoObject eoj, short tid, byte esv,
612  EchoProperty property, boolean success) {
613  for(EventListener listener : sListeners) {
614  listener.onSetProperty(eoj, tid, esv, property, success);
615  }
616  }
617 
618  @Override
619  public void onGetProperty(EchoObject eoj, short tid, byte esv,
620  EchoProperty property, boolean success) {
621  for(EventListener listener : sListeners) {
622  listener.onGetProperty(eoj, tid, esv, property, success);
623  }
624  }
625 
626  @Override
627  public void onInformProperty(EchoObject eoj, short tid, byte esv,
628  EchoProperty property) {
629  for(EventListener listener : sListeners) {
630  listener.onInformProperty(eoj, tid, esv, property);
631  }
632  }
633 
634  @Override
635  public void reqSetPropertyEvent(EchoObject eoj, EchoProperty property) {
636  for(EventListener listener : sListeners) {
637  listener.reqSetPropertyEvent(eoj, property);
638  }
639  }
640 
641  @Override
642  public void reqGetPropertyEvent(EchoObject eoj, EchoProperty property) {
643  for(EventListener listener : sListeners) {
644  listener.reqGetPropertyEvent(eoj, property);
645  }
646  }
647 
648  @Override
649  public void reqInformPropertyEvent(EchoObject eoj, EchoProperty property) {
650  for(EventListener listener : sListeners) {
651  listener.reqInformPropertyEvent(eoj, property);
652  }
653  }
654 
655  @Override
656  public void reqInformCPropertyEvent(EchoObject eoj,
657  EchoProperty property) {
658  for(EventListener listener : sListeners) {
659  listener.reqInformCPropertyEvent(eoj, property);
660  }
661  }
662 
663  @Override
664  public void sendEvent(EchoFrame frame) {
665  for(EventListener listener : sListeners) {
666  listener.sendEvent(frame);
667  }
668  }
669 
670  @Override
671  public void receiveEvent(EchoFrame frame) {
672  for(EventListener listener : sListeners) {
673  listener.receiveEvent(frame);
674  }
675  }
676 
677  @Override
678  public void onCatchException(Exception e) {
679  for(EventListener listener : sListeners) {
680  listener.onCatchException(e);
681  }
682  }
683 
684  @Override
685  public void onNewNode(EchoNode node) {
686  for(EventListener listener : sListeners) {
687  listener.onNewNode(node);
688  }
689  }
690 
691  @Override
692  public void onNewEchoObject(EchoObject eoj) {
693  for(EventListener listener : sListeners) {
694  listener.onNewEchoObject(eoj);
695  }
696  }
697 
698  @Override
699  public void onNewProfileObject(ProfileObject profile) {
700  for(EventListener listener : sListeners) {
701  listener.onNewProfileObject(profile);
702  }
703  }
704 
705  @Override
706  public void onNewNodeProfile(NodeProfile profile) {
707  for(EventListener listener : sListeners) {
708  listener.onNewNodeProfile(profile);
709  }
710  }
711 
712  @Override
713  public void onNewDeviceObject(DeviceObject device) {
714  for(EventListener listener : sListeners) {
715  listener.onNewDeviceObject(device);
716  }
717  }
718 
719  @Override
720  public void onNewActivityAmountSensor(ActivityAmountSensor device) {
721  for(EventListener listener : sListeners) {
722  listener.onNewActivityAmountSensor(device);
723  }
724  }
725 
726  @Override
727  public void onNewAirPollutionSensor(AirPollutionSensor device) {
728  for(EventListener listener : sListeners) {
729  listener.onNewAirPollutionSensor(device);
730  }
731  }
732 
733  @Override
734  public void onNewAirSpeedSensor(AirSpeedSensor device) {
735  for(EventListener listener : sListeners) {
736  listener.onNewAirSpeedSensor(device);
737  }
738  }
739 
740  @Override
741  public void onNewBathHeatingStatusSensor(BathHeatingStatusSensor device) {
742  for(EventListener listener : sListeners) {
743  listener.onNewBathHeatingStatusSensor(device);
744  }
745  }
746 
747  @Override
748  public void onNewBathWaterLevelSensor(BathWaterLevelSensor device) {
749  for(EventListener listener : sListeners) {
750  listener.onNewBathWaterLevelSensor(device);
751  }
752  }
753 
754  @Override
755  public void onNewBedPresenceSensor(BedPresenceSensor device) {
756  for(EventListener listener : sListeners) {
757  listener.onNewBedPresenceSensor(device);
758  }
759  }
760 
761  @Override
762  public void onNewCallSensor(CallSensor device) {
763  for(EventListener listener : sListeners) {
764  listener.onNewCallSensor(device);
765  }
766  }
767 
768  @Override
769  public void onNewCigaretteSmokeSensor(CigaretteSmokeSensor device) {
770  for(EventListener listener : sListeners) {
771  listener.onNewCigaretteSmokeSensor(device);
772  }
773  }
774 
775  @Override
776  public void onNewCO2Sensor(CO2Sensor device) {
777  for(EventListener listener : sListeners) {
778  listener.onNewCO2Sensor(device);
779  }
780  }
781 
782  @Override
783  public void onNewCondensationSensor(CondensationSensor device) {
784  for(EventListener listener : sListeners) {
785  listener.onNewCondensationSensor(device);
786  }
787  }
788 
789  @Override
790  public void onNewCrimePreventionSensor(CrimePreventionSensor device) {
791  for(EventListener listener : sListeners) {
792  listener.onNewCrimePreventionSensor(device);
793  }
794  }
795 
796  @Override
797  public void onNewCurrentValueSensor(CurrentValueSensor device) {
798  for(EventListener listener : sListeners) {
799  listener.onNewCurrentValueSensor(device);
800  }
801  }
802 
803  @Override
804  public void onNewDifferentialPressureSensor(
806  for(EventListener listener : sListeners) {
807  listener.onNewDifferentialPressureSensor(device);
808  }
809  }
810 
811  @Override
812  public void onNewEarthquakeSensor(EarthquakeSensor device) {
813  for(EventListener listener : sListeners) {
814  listener.onNewEarthquakeSensor(device);
815  }
816  }
817 
818  @Override
819  public void onNewElectricEnergySensor(ElectricEnergySensor device) {
820  for(EventListener listener : sListeners) {
821  listener.onNewElectricEnergySensor(device);
822  }
823  }
824 
825  @Override
826  public void onNewElectricLeakSensor(ElectricLeakSensor device) {
827  for(EventListener listener : sListeners) {
828  listener.onNewElectricLeakSensor(device);
829  }
830  }
831 
832  @Override
833  public void onNewEmergencyButton(EmergencyButton device) {
834  for(EventListener listener : sListeners) {
835  listener.onNewEmergencyButton(device);
836  }
837  }
838 
839  @Override
840  public void onNewFireSensor(FireSensor device) {
841  for(EventListener listener : sListeners) {
842  listener.onNewFireSensor(device);
843  }
844  }
845 
846  @Override
847  public void onNewFirstAidSensor(FirstAidSensor device) {
848  for(EventListener listener : sListeners) {
849  listener.onNewFirstAidSensor(device);
850  }
851  }
852 
853  @Override
854  public void onNewFlameSensor(FlameSensor device) {
855  for(EventListener listener : sListeners) {
856  listener.onNewFlameSensor(device);
857  }
858  }
859 
860  @Override
861  public void onNewGasLeakSensor(GasLeakSensor device) {
862  for(EventListener listener : sListeners) {
863  listener.onNewGasLeakSensor(device);
864  }
865  }
866 
867  @Override
868  public void onNewGasSensor(GasSensor device) {
869  for(EventListener listener : sListeners) {
870  listener.onNewGasSensor(device);
871  }
872  }
873 
874  @Override
875  public void onNewHumanBodyLocationSensor(HumanBodyLocationSensor device) {
876  for(EventListener listener : sListeners) {
877  listener.onNewHumanBodyLocationSensor(device);
878  }
879  }
880 
881  @Override
882  public void onNewHumanDetectionSensor(HumanDetectionSensor device) {
883  for(EventListener listener : sListeners) {
884  listener.onNewHumanDetectionSensor(device);
885  }
886  }
887 
888  @Override
889  public void onNewHumiditySensor(HumiditySensor device) {
890  for(EventListener listener : sListeners) {
891  listener.onNewHumiditySensor(device);
892  }
893  }
894 
895  @Override
896  public void onNewIlluminanceSensor(IlluminanceSensor device) {
897  for(EventListener listener : sListeners) {
898  listener.onNewIlluminanceSensor(device);
899  }
900  }
901 
902  @Override
903  public void onNewMailingSensor(MailingSensor device) {
904  for(EventListener listener : sListeners) {
905  listener.onNewMailingSensor(device);
906  }
907  }
908 
909  @Override
910  public void onNewMicromotionSensor(MicromotionSensor device) {
911  for(EventListener listener : sListeners) {
912  listener.onNewMicromotionSensor(device);
913  }
914  }
915 
916  @Override
917  public void onNewOdorSensor(OdorSensor device) {
918  for(EventListener listener : sListeners) {
919  listener.onNewOdorSensor(device);
920  }
921  }
922 
923  @Override
924  public void onNewOpenCloseSensor(OpenCloseSensor device) {
925  for(EventListener listener : sListeners) {
926  listener.onNewOpenCloseSensor(device);
927  }
928  }
929 
930  @Override
931  public void onNewOxygenSensor(OxygenSensor device) {
932  for(EventListener listener : sListeners) {
933  listener.onNewOxygenSensor(device);
934  }
935  }
936 
937  @Override
938  public void onNewPassageSensor(PassageSensor device) {
939  for(EventListener listener : sListeners) {
940  listener.onNewPassageSensor(device);
941  }
942  }
943 
944  @Override
945  public void onNewRainSensor(RainSensor device) {
946  for(EventListener listener : sListeners) {
947  listener.onNewRainSensor(device);
948  }
949  }
950 
951  @Override
952  public void onNewSnowSensor(SnowSensor device) {
953  for(EventListener listener : sListeners) {
954  listener.onNewSnowSensor(device);
955  }
956  }
957 
958  @Override
959  public void onNewSoundSensor(SoundSensor device) {
960  for(EventListener listener : sListeners) {
961  listener.onNewSoundSensor(device);
962  }
963  }
964 
965  @Override
966  public void onNewTemperatureSensor(TemperatureSensor device) {
967  for(EventListener listener : sListeners) {
968  listener.onNewTemperatureSensor(device);
969  }
970  }
971 
972  @Override
973  public void onNewVisitorSensor(VisitorSensor device) {
974  for(EventListener listener : sListeners) {
975  listener.onNewVisitorSensor(device);
976  }
977  }
978 
979  @Override
980  public void onNewVOCSensor(VOCSensor device) {
981  for(EventListener listener : sListeners) {
982  listener.onNewVOCSensor(device);
983  }
984  }
985 
986  @Override
987  public void onNewWaterFlowRateSensor(WaterFlowRateSensor device) {
988  for(EventListener listener : sListeners) {
989  listener.onNewWaterFlowRateSensor(device);
990  }
991  }
992 
993  @Override
994  public void onNewWaterLeakSensor(WaterLeakSensor device) {
995  for(EventListener listener : sListeners) {
996  listener.onNewWaterLeakSensor(device);
997  }
998  }
999 
1000  @Override
1001  public void onNewWaterLevelSensor(WaterLevelSensor device) {
1002  for(EventListener listener : sListeners) {
1003  listener.onNewWaterLevelSensor(device);
1004  }
1005  }
1006 
1007  @Override
1008  public void onNewWaterOverflowSensor(WaterOverflowSensor device) {
1009  for(EventListener listener : sListeners) {
1010  listener.onNewWaterOverflowSensor(device);
1011  }
1012  }
1013 
1014  @Override
1015  public void onNewWeightSensor(WeightSensor device) {
1016  for(EventListener listener : sListeners) {
1017  listener.onNewWeightSensor(device);
1018  }
1019  }
1020 
1021  @Override
1022  public void onNewAirCleaner(AirCleaner device) {
1023  for(EventListener listener : sListeners) {
1024  listener.onNewAirCleaner(device);
1025  }
1026  }
1027 
1028  @Override
1029  public void onNewAirConditionerVentilationFan(
1031  for(EventListener listener : sListeners) {
1032  listener.onNewAirConditionerVentilationFan(device);
1033  }
1034  }
1035 
1036  @Override
1037  public void onNewElectricHeater(ElectricHeater device) {
1038  for(EventListener listener : sListeners) {
1039  listener.onNewElectricHeater(device);
1040  }
1041  }
1042 
1043  @Override
1044  public void onNewFanHeater(FanHeater device) {
1045  for(EventListener listener : sListeners) {
1046  listener.onNewFanHeater(device);
1047  }
1048  }
1049 
1050  @Override
1051  public void onNewHomeAirConditioner(HomeAirConditioner device) {
1052  for(EventListener listener : sListeners) {
1053  listener.onNewHomeAirConditioner(device);
1054  }
1055  }
1056 
1057  @Override
1058  public void onNewHumidifier(Humidifier device) {
1059  for(EventListener listener : sListeners) {
1060  listener.onNewHumidifier(device);
1061  }
1062  }
1063 
1064  @Override
1065  public void onNewPackageTypeCommercialAirConditionerIndoorUnit(
1067  for(EventListener listener : sListeners) {
1068  listener.onNewPackageTypeCommercialAirConditionerIndoorUnit(device);
1069  }
1070  }
1071 
1072  @Override
1073  public void onNewPackageTypeCommercialAirConditionerOutdoorUnit(
1075  for(EventListener listener : sListeners) {
1076  listener.onNewPackageTypeCommercialAirConditionerOutdoorUnit(device);
1077  }
1078  }
1079 
1080  @Override
1081  public void onNewVentilationFan(VentilationFan device) {
1082  for(EventListener listener : sListeners) {
1083  listener.onNewVentilationFan(device);
1084  }
1085  }
1086 
1087  @Override
1088  public void onNewBathroomHeaterAndDryer(BathroomHeaterAndDryer device) {
1089  for(EventListener listener : sListeners) {
1090  listener.onNewBathroomHeaterAndDryer(device);
1091  }
1092  }
1093 
1094  @Override
1095  public void onNewBattery(Battery device) {
1096  for(EventListener listener : sListeners) {
1097  listener.onNewBattery(device);
1098  }
1099  }
1100 
1101  @Override
1102  public void onNewBuzzer(Buzzer device) {
1103  for(EventListener listener : sListeners) {
1104  listener.onNewBuzzer(device);
1105  }
1106  }
1107 
1108  @Override
1109  public void onNewColdOrHotWaterHeatSourceEquipment(
1111  for(EventListener listener : sListeners) {
1112  listener.onNewColdOrHotWaterHeatSourceEquipment(device);
1113  }
1114  }
1115 
1116  @Override
1117  public void onNewElectricallyOperatedShade(
1118  ElectricallyOperatedShade device) {
1119  for(EventListener listener : sListeners) {
1120  listener.onNewElectricallyOperatedShade(device);
1121  }
1122  }
1123 
1124  @Override
1125  public void onNewElectricLock(ElectricLock device) {
1126  for(EventListener listener : sListeners) {
1127  listener.onNewElectricLock(device);
1128  }
1129  }
1130 
1131  @Override
1132  public void onNewElectricShutter(ElectricShutter device) {
1133  for(EventListener listener : sListeners) {
1134  listener.onNewElectricShutter(device);
1135  }
1136  }
1137 
1138  @Override
1139  public void onNewElectricStormWindow(ElectricStormWindow device) {
1140  for(EventListener listener : sListeners) {
1141  listener.onNewElectricStormWindow(device);
1142  }
1143  }
1144 
1145  @Override
1146  public void onNewElectricToiletSeat(ElectricToiletSeat device) {
1147  for(EventListener listener : sListeners) {
1148  listener.onNewElectricToiletSeat(device);
1149  }
1150  }
1151 
1152  @Override
1153  public void onNewElectricVehicle(ElectricVehicle device) {
1154  for(EventListener listener : sListeners) {
1155  listener.onNewElectricVehicle(device);
1156  }
1157  }
1158 
1159  @Override
1160  public void onNewElectricWaterHeater(ElectricWaterHeater device) {
1161  for(EventListener listener : sListeners) {
1162  listener.onNewElectricWaterHeater(device);
1163  }
1164  }
1165 
1166  @Override
1167  public void onNewEngineCogeneration(EngineCogeneration device) {
1168  for(EventListener listener : sListeners) {
1169  listener.onNewEngineCogeneration(device);
1170  }
1171  }
1172 
1173  @Override
1174  public void onNewFloorHeater(FloorHeater device) {
1175  for(EventListener listener : sListeners) {
1176  listener.onNewFloorHeater(device);
1177  }
1178  }
1179 
1180  @Override
1181  public void onNewFuelCell(FuelCell device) {
1182  for(EventListener listener : sListeners) {
1183  listener.onNewFuelCell(device);
1184  }
1185  }
1186 
1187  @Override
1188  public void onNewGasMeter(GasMeter device) {
1189  for(EventListener listener : sListeners) {
1190  listener.onNewGasMeter(device);
1191  }
1192  }
1193 
1194  @Override
1195  public void onNewGeneralLighting(GeneralLighting device) {
1196  for(EventListener listener : sListeners) {
1197  listener.onNewGeneralLighting(device);
1198  }
1199  }
1200 
1201  @Override
1202  public void onNewHouseholdSolarPowerGeneration(
1204  for(EventListener listener : sListeners) {
1205  listener.onNewHouseholdSolarPowerGeneration(device);
1206  }
1207  }
1208 
1209  @Override
1210  public void onNewInstantaneousWaterHeater(
1211  InstantaneousWaterHeater device) {
1212  for(EventListener listener : sListeners) {
1213  listener.onNewInstantaneousWaterHeater(device);
1214  }
1215  }
1216 
1217  @Override
1218  public void onNewLPGasMeter(LPGasMeter device) {
1219  for(EventListener listener : sListeners) {
1220  listener.onNewLPGasMeter(device);
1221  }
1222  }
1223 
1224  @Override
1225  public void onNewPowerDistributionBoardMetering(
1227  for(EventListener listener : sListeners) {
1228  listener.onNewPowerDistributionBoardMetering(device);
1229  }
1230  }
1231 
1232  @Override
1233  public void onNewSmartElectricEnergyMeter(
1234  SmartElectricEnergyMeter device) {
1235  for(EventListener listener : sListeners) {
1236  listener.onNewSmartElectricEnergyMeter(device);
1237  }
1238  }
1239 
1240  @Override
1241  public void onNewSmartGasMeter(SmartGasMeter device) {
1242  for(EventListener listener : sListeners) {
1243  listener.onNewSmartGasMeter(device);
1244  }
1245  }
1246 
1247  @Override
1248  public void onNewSprinkler(Sprinkler device) {
1249  for(EventListener listener : sListeners) {
1250  listener.onNewSprinkler(device);
1251  }
1252  }
1253 
1254  @Override
1255  public void onNewWaterFlowmeter(WaterFlowmeter device) {
1256  for(EventListener listener : sListeners) {
1257  listener.onNewWaterFlowmeter(device);
1258  }
1259  }
1260 
1261  @Override
1262  public void onNewWattHourMeter(WattHourMeter device) {
1263  for(EventListener listener : sListeners) {
1264  listener.onNewWattHourMeter(device);
1265  }
1266  }
1267 
1268  @Override
1269  public void onNewClothesDryer(ClothesDryer device) {
1270  for(EventListener listener : sListeners) {
1271  listener.onNewClothesDryer(device);
1272  }
1273  }
1274 
1275  @Override
1276  public void onNewCombinationMicrowaveOven(
1277  CombinationMicrowaveOven device) {
1278  for(EventListener listener : sListeners) {
1279  listener.onNewCombinationMicrowaveOven(device);
1280  }
1281  }
1282 
1283  @Override
1284  public void onNewCookingHeater(CookingHeater device) {
1285  for(EventListener listener : sListeners) {
1286  listener.onNewCookingHeater(device);
1287  }
1288  }
1289 
1290  @Override
1291  public void onNewElectricHotWaterPot(ElectricHotWaterPot device) {
1292  for(EventListener listener : sListeners) {
1293  listener.onNewElectricHotWaterPot(device);
1294  }
1295  }
1296 
1297  @Override
1298  public void onNewRefrigerator(Refrigerator device) {
1299  for(EventListener listener : sListeners) {
1300  listener.onNewRefrigerator(device);
1301  }
1302  }
1303 
1304  @Override
1305  public void onNewRiceCooker(RiceCooker device) {
1306  for(EventListener listener : sListeners) {
1307  listener.onNewRiceCooker(device);
1308  }
1309  }
1310 
1311  @Override
1312  public void onNewWasherAndDryer(WasherAndDryer device) {
1313  for(EventListener listener : sListeners) {
1314  listener.onNewWasherAndDryer(device);
1315  }
1316  }
1317 
1318  @Override
1319  public void onNewWashingMachine(WashingMachine device) {
1320  for(EventListener listener : sListeners) {
1321  listener.onNewWashingMachine(device);
1322  }
1323  }
1324 
1325  @Override
1326  public void onNewWeighing(Weighing device) {
1327  for(EventListener listener : sListeners) {
1328  listener.onNewWeighing(device);
1329  }
1330  }
1331 
1332  @Override
1333  public void onNewController(Controller device) {
1334  for(EventListener listener : sListeners) {
1335  listener.onNewController(device);
1336  }
1337  }
1338 
1339  @Override
1340  public void onNewSwitch(Switch device) {
1341  for(EventListener listener : sListeners) {
1342  listener.onNewSwitch(device);
1343  }
1344  }
1345 
1346  @Override
1347  public void onNewDisplay(Display device) {
1348  for(EventListener listener : sListeners) {
1349  listener.onNewDisplay(device);
1350  }
1351  }
1352 
1353  @Override
1354  public void onNewTelevision(Television device) {
1355  for(EventListener listener : sListeners) {
1356  listener.onNewTelevision(device);
1357  }
1358  }
1359 
1360  }
1361 }
static final String SELF_ADDRESS
Definition: EchoSocket.java:52
static synchronized void restart()
Definition: Echo.java:93
static synchronized EchoNode addOtherNode(String address)
Definition: Echo.java:153
static String toHexString(byte[] data)
Definition: EchoUtils.java:167
static EchoNode getSelfNode()
Definition: Echo.java:130
static EventListener getEventListener()
Definition: Echo.java:295
static synchronized EchoNode start(NodeProfile profile, DeviceObject[] devices)
Definition: Echo.java:62
static void addEventListener(EventListener listener)
Definition: Echo.java:291
static synchronized void stop()
Definition: Echo.java:101
static EchoNode getNode(String address)
Definition: Echo.java:146
static EchoNode getNode()
Definition: Echo.java:127
static boolean isStarted()
Definition: Echo.java:121
static EchoNode[] getNodes()
Definition: Echo.java:134
static synchronized void clear()
Definition: Echo.java:111
static void removeOtherNode(String address)
Definition: Echo.java:161