16 package com.sonycsl.echo;
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;
26 import java.util.concurrent.ConcurrentHashMap;
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.*;
44 private static volatile EchoNode sSelfNode;
45 private static Map<String, EchoNode> sOtherNodes;
47 private static Events sEvents = null;
48 private static ArrayList<EventListener> sListeners;
50 private volatile static boolean sStarted =
false;
51 private volatile static boolean sCleared=
true;
54 sOtherNodes =
new ConcurrentHashMap<String, EchoNode>();
55 sListeners =
new ArrayList<EventListener>();
56 sEvents =
new Events();
63 if(sStarted)
return null;
64 if(!sCleared)
return null;
69 sSelfNode =
new EchoNode(profile, devices);
70 profile.setNode(sSelfNode);
72 dev.setNode(sSelfNode);
74 EchoSocket.openSocket();
75 EchoSocket.startReceiverThread();
81 sSelfNode.getNodeProfile().onNew();
82 sSelfNode.getNodeProfile().onFound();
89 sSelfNode.getNodeProfile().inform().reqInformInstanceListNotification().send();
93 public synchronized static void restart() throws IOException {
96 EchoSocket.openSocket();
97 EchoSocket.startReceiverThread();
98 sSelfNode.getNodeProfile().inform().reqInformInstanceListNotification().send();
101 public synchronized static void stop() throws IOException {
102 System.err.println(
"Echo stop");
104 EchoSocket.closeSocket();
105 EchoSocket.stopReceiverThread();
111 public synchronized static void clear() throws IOException {
135 Collection<EchoNode> nodes = sOtherNodes.values();
136 List<EchoNode> ret =
new ArrayList<EchoNode>();
137 if(sSelfNode != null) {
143 return ret.toArray(
new EchoNode[]{});
150 return sOtherNodes.get(address);
155 node.getNodeProfile().setNode(node);
156 sOtherNodes.put(address, node);
162 sOtherNodes.remove(address);
292 sListeners.add(listener);
299 public static class EventListener {
313 public void sendEvent(
EchoFrame frame) {}
314 public void receiveEvent(
EchoFrame frame) {}
316 public void onCatchException(Exception e) {}
318 public void onFoundNode(
EchoNode node){}
319 public void onFoundEchoObject(
EchoObject eoj){}
321 public void onNewNode(
EchoNode node) {}
322 public void onNewEchoObject(
EchoObject eoj) {}
324 public void onNewNodeProfile(
NodeProfile profile) {}
332 public void onNewCallSensor(
CallSensor device) {}
334 public void onNewCO2Sensor(
CO2Sensor device) {}
343 public void onNewFireSensor(
FireSensor device) {}
345 public void onNewFlameSensor(
FlameSensor device) {}
347 public void onNewGasSensor(
GasSensor device) {}
354 public void onNewOdorSensor(
OdorSensor device) {}
358 public void onNewRainSensor(
RainSensor device) {}
359 public void onNewSnowSensor(
SnowSensor device) {}
360 public void onNewSoundSensor(
SoundSensor device) {}
363 public void onNewVOCSensor(
VOCSensor device) {}
369 public void onNewAirCleaner(
AirCleaner device) {}
372 public void onNewFanHeater(
FanHeater device) {}
374 public void onNewHumidifier(
Humidifier device) {}
379 public void onNewBattery(
Battery device) {}
380 public void onNewBuzzer(
Buzzer device) {}
390 public void onNewFloorHeater(
FloorHeater device) {}
391 public void onNewFuelCell(
FuelCell device) {}
392 public void onNewGasMeter(
GasMeter device) {}
396 public void onNewLPGasMeter(
LPGasMeter device) {}
400 public void onNewSprinkler(
Sprinkler device) {}
408 public void onNewRiceCooker(
RiceCooker 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) {}
418 public static class Logger
extends EventListener {
421 public Logger(PrintStream out) {
428 long millis = System.currentTimeMillis();
429 mOut.println(
"millis:"+millis
430 +
",method:set,"+eoj.toString()
432 +
",pdc:"+EchoUtils.toHexString(property.pdc)
434 +
",success:"+success);
439 long millis = System.currentTimeMillis();
440 mOut.println(
"millis:"+millis
441 +
",method:get,"+eoj.toString()
443 +
",pdc:"+EchoUtils.toHexString(property.pdc)
451 super.isValidProperty(eoj, property, valid);
455 public void onSetProperty(
EchoObject eoj,
short tid, byte esv,
457 long millis = System.currentTimeMillis();
458 mOut.println(
"millis:"+millis
459 +
",method:onSet,"+eoj.toString()
461 +
",esv:"+EchoUtils.toHexString(esv)
463 +
",pdc:"+EchoUtils.toHexString(property.pdc)
465 +
",success:"+success);
469 public void onGetProperty(
EchoObject eoj,
short tid, byte esv,
471 long millis = System.currentTimeMillis();
472 mOut.println(
"millis:"+millis
473 +
",method:onGet,"+eoj.toString()
475 +
",esv:"+EchoUtils.toHexString(esv)
477 +
",pdc:"+EchoUtils.toHexString(property.pdc)
483 public void onInformProperty(
EchoObject eoj,
short tid, byte esv,
485 long millis = System.currentTimeMillis();
486 mOut.println(
"millis:"+millis
487 +
",method:onInform,"+eoj.toString()
489 +
",esv:"+EchoUtils.toHexString(esv)
495 long millis = System.currentTimeMillis();
496 mOut.println(
"millis:"+millis
497 +
",method:reqSet,"+eoj.toString()
499 +
",pdc:"+EchoUtils.toHexString(property.pdc)
505 long millis = System.currentTimeMillis();
506 mOut.println(
"millis:"+millis
507 +
",method:reqGet,"+eoj.toString()
509 +
",pdc:"+EchoUtils.toHexString(property.pdc)
515 long millis = System.currentTimeMillis();
516 mOut.println(
"millis:"+millis
517 +
",method:reqInform,"+eoj.toString()
519 +
",pdc:"+EchoUtils.toHexString(property.pdc)
524 public void reqInformCPropertyEvent(
EchoObject eoj,
526 long millis = System.currentTimeMillis();
527 mOut.println(
"millis:"+millis
528 +
",method:reqInformC,"+eoj.toString()
530 +
",pdc:"+EchoUtils.toHexString(property.pdc)
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()));
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()));
561 public void onCatchException(Exception e) {
563 super.onCatchException(e);
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());
576 long millis = System.currentTimeMillis();
577 mOut.println(
"millis:"+millis
578 +
",method:new,type:eoj,"
584 private static class Events
extends EventListener {
589 super.setProperty(eoj, property, success);
590 for(EventListener listener : sListeners) {
591 listener.setProperty(eoj, property, success);
597 for(EventListener listener : sListeners) {
598 listener.getProperty(eoj, property);
605 for(EventListener listener : sListeners) {
606 listener.isValidProperty(eoj, property, valid);
611 public void onSetProperty(
EchoObject eoj,
short tid, byte esv,
613 for(EventListener listener : sListeners) {
614 listener.onSetProperty(eoj, tid, esv, property, success);
619 public void onGetProperty(
EchoObject eoj,
short tid, byte esv,
621 for(EventListener listener : sListeners) {
622 listener.onGetProperty(eoj, tid, esv, property, success);
627 public void onInformProperty(
EchoObject eoj,
short tid, byte esv,
629 for(EventListener listener : sListeners) {
630 listener.onInformProperty(eoj, tid, esv, property);
636 for(EventListener listener : sListeners) {
637 listener.reqSetPropertyEvent(eoj, property);
643 for(EventListener listener : sListeners) {
644 listener.reqGetPropertyEvent(eoj, property);
650 for(EventListener listener : sListeners) {
651 listener.reqInformPropertyEvent(eoj, property);
656 public void reqInformCPropertyEvent(
EchoObject eoj,
658 for(EventListener listener : sListeners) {
659 listener.reqInformCPropertyEvent(eoj, property);
665 for(EventListener listener : sListeners) {
666 listener.sendEvent(frame);
671 public void receiveEvent(
EchoFrame frame) {
672 for(EventListener listener : sListeners) {
673 listener.receiveEvent(frame);
678 public void onCatchException(Exception e) {
679 for(EventListener listener : sListeners) {
680 listener.onCatchException(e);
685 public void onNewNode(
EchoNode node) {
686 for(EventListener listener : sListeners) {
687 listener.onNewNode(node);
693 for(EventListener listener : sListeners) {
694 listener.onNewEchoObject(eoj);
700 for(EventListener listener : sListeners) {
701 listener.onNewProfileObject(profile);
706 public void onNewNodeProfile(
NodeProfile profile) {
707 for(EventListener listener : sListeners) {
708 listener.onNewNodeProfile(profile);
714 for(EventListener listener : sListeners) {
715 listener.onNewDeviceObject(device);
721 for(EventListener listener : sListeners) {
722 listener.onNewActivityAmountSensor(device);
728 for(EventListener listener : sListeners) {
729 listener.onNewAirPollutionSensor(device);
735 for(EventListener listener : sListeners) {
736 listener.onNewAirSpeedSensor(device);
742 for(EventListener listener : sListeners) {
743 listener.onNewBathHeatingStatusSensor(device);
749 for(EventListener listener : sListeners) {
750 listener.onNewBathWaterLevelSensor(device);
756 for(EventListener listener : sListeners) {
757 listener.onNewBedPresenceSensor(device);
762 public void onNewCallSensor(
CallSensor device) {
763 for(EventListener listener : sListeners) {
764 listener.onNewCallSensor(device);
770 for(EventListener listener : sListeners) {
771 listener.onNewCigaretteSmokeSensor(device);
776 public void onNewCO2Sensor(
CO2Sensor device) {
777 for(EventListener listener : sListeners) {
778 listener.onNewCO2Sensor(device);
784 for(EventListener listener : sListeners) {
785 listener.onNewCondensationSensor(device);
791 for(EventListener listener : sListeners) {
792 listener.onNewCrimePreventionSensor(device);
798 for(EventListener listener : sListeners) {
799 listener.onNewCurrentValueSensor(device);
804 public void onNewDifferentialPressureSensor(
806 for(EventListener listener : sListeners) {
807 listener.onNewDifferentialPressureSensor(device);
813 for(EventListener listener : sListeners) {
814 listener.onNewEarthquakeSensor(device);
820 for(EventListener listener : sListeners) {
821 listener.onNewElectricEnergySensor(device);
827 for(EventListener listener : sListeners) {
828 listener.onNewElectricLeakSensor(device);
834 for(EventListener listener : sListeners) {
835 listener.onNewEmergencyButton(device);
840 public void onNewFireSensor(
FireSensor device) {
841 for(EventListener listener : sListeners) {
842 listener.onNewFireSensor(device);
848 for(EventListener listener : sListeners) {
849 listener.onNewFirstAidSensor(device);
855 for(EventListener listener : sListeners) {
856 listener.onNewFlameSensor(device);
862 for(EventListener listener : sListeners) {
863 listener.onNewGasLeakSensor(device);
868 public void onNewGasSensor(
GasSensor device) {
869 for(EventListener listener : sListeners) {
870 listener.onNewGasSensor(device);
876 for(EventListener listener : sListeners) {
877 listener.onNewHumanBodyLocationSensor(device);
883 for(EventListener listener : sListeners) {
884 listener.onNewHumanDetectionSensor(device);
890 for(EventListener listener : sListeners) {
891 listener.onNewHumiditySensor(device);
897 for(EventListener listener : sListeners) {
898 listener.onNewIlluminanceSensor(device);
904 for(EventListener listener : sListeners) {
905 listener.onNewMailingSensor(device);
911 for(EventListener listener : sListeners) {
912 listener.onNewMicromotionSensor(device);
917 public void onNewOdorSensor(
OdorSensor device) {
918 for(EventListener listener : sListeners) {
919 listener.onNewOdorSensor(device);
925 for(EventListener listener : sListeners) {
926 listener.onNewOpenCloseSensor(device);
932 for(EventListener listener : sListeners) {
933 listener.onNewOxygenSensor(device);
939 for(EventListener listener : sListeners) {
940 listener.onNewPassageSensor(device);
945 public void onNewRainSensor(
RainSensor device) {
946 for(EventListener listener : sListeners) {
947 listener.onNewRainSensor(device);
952 public void onNewSnowSensor(
SnowSensor device) {
953 for(EventListener listener : sListeners) {
954 listener.onNewSnowSensor(device);
960 for(EventListener listener : sListeners) {
961 listener.onNewSoundSensor(device);
967 for(EventListener listener : sListeners) {
968 listener.onNewTemperatureSensor(device);
974 for(EventListener listener : sListeners) {
975 listener.onNewVisitorSensor(device);
980 public void onNewVOCSensor(
VOCSensor device) {
981 for(EventListener listener : sListeners) {
982 listener.onNewVOCSensor(device);
988 for(EventListener listener : sListeners) {
989 listener.onNewWaterFlowRateSensor(device);
995 for(EventListener listener : sListeners) {
996 listener.onNewWaterLeakSensor(device);
1002 for(EventListener listener : sListeners) {
1003 listener.onNewWaterLevelSensor(device);
1009 for(EventListener listener : sListeners) {
1010 listener.onNewWaterOverflowSensor(device);
1016 for(EventListener listener : sListeners) {
1017 listener.onNewWeightSensor(device);
1022 public void onNewAirCleaner(
AirCleaner device) {
1023 for(EventListener listener : sListeners) {
1024 listener.onNewAirCleaner(device);
1029 public void onNewAirConditionerVentilationFan(
1031 for(EventListener listener : sListeners) {
1032 listener.onNewAirConditionerVentilationFan(device);
1038 for(EventListener listener : sListeners) {
1039 listener.onNewElectricHeater(device);
1044 public void onNewFanHeater(
FanHeater device) {
1045 for(EventListener listener : sListeners) {
1046 listener.onNewFanHeater(device);
1052 for(EventListener listener : sListeners) {
1053 listener.onNewHomeAirConditioner(device);
1058 public void onNewHumidifier(
Humidifier device) {
1059 for(EventListener listener : sListeners) {
1060 listener.onNewHumidifier(device);
1065 public void onNewPackageTypeCommercialAirConditionerIndoorUnit(
1067 for(EventListener listener : sListeners) {
1068 listener.onNewPackageTypeCommercialAirConditionerIndoorUnit(device);
1073 public void onNewPackageTypeCommercialAirConditionerOutdoorUnit(
1075 for(EventListener listener : sListeners) {
1076 listener.onNewPackageTypeCommercialAirConditionerOutdoorUnit(device);
1082 for(EventListener listener : sListeners) {
1083 listener.onNewVentilationFan(device);
1089 for(EventListener listener : sListeners) {
1090 listener.onNewBathroomHeaterAndDryer(device);
1095 public void onNewBattery(
Battery device) {
1096 for(EventListener listener : sListeners) {
1097 listener.onNewBattery(device);
1102 public void onNewBuzzer(
Buzzer device) {
1103 for(EventListener listener : sListeners) {
1104 listener.onNewBuzzer(device);
1109 public void onNewColdOrHotWaterHeatSourceEquipment(
1111 for(EventListener listener : sListeners) {
1112 listener.onNewColdOrHotWaterHeatSourceEquipment(device);
1117 public void onNewElectricallyOperatedShade(
1119 for(EventListener listener : sListeners) {
1120 listener.onNewElectricallyOperatedShade(device);
1126 for(EventListener listener : sListeners) {
1127 listener.onNewElectricLock(device);
1133 for(EventListener listener : sListeners) {
1134 listener.onNewElectricShutter(device);
1140 for(EventListener listener : sListeners) {
1141 listener.onNewElectricStormWindow(device);
1147 for(EventListener listener : sListeners) {
1148 listener.onNewElectricToiletSeat(device);
1154 for(EventListener listener : sListeners) {
1155 listener.onNewElectricVehicle(device);
1161 for(EventListener listener : sListeners) {
1162 listener.onNewElectricWaterHeater(device);
1168 for(EventListener listener : sListeners) {
1169 listener.onNewEngineCogeneration(device);
1174 public void onNewFloorHeater(
FloorHeater device) {
1175 for(EventListener listener : sListeners) {
1176 listener.onNewFloorHeater(device);
1181 public void onNewFuelCell(
FuelCell device) {
1182 for(EventListener listener : sListeners) {
1183 listener.onNewFuelCell(device);
1188 public void onNewGasMeter(
GasMeter device) {
1189 for(EventListener listener : sListeners) {
1190 listener.onNewGasMeter(device);
1196 for(EventListener listener : sListeners) {
1197 listener.onNewGeneralLighting(device);
1202 public void onNewHouseholdSolarPowerGeneration(
1204 for(EventListener listener : sListeners) {
1205 listener.onNewHouseholdSolarPowerGeneration(device);
1210 public void onNewInstantaneousWaterHeater(
1212 for(EventListener listener : sListeners) {
1213 listener.onNewInstantaneousWaterHeater(device);
1218 public void onNewLPGasMeter(
LPGasMeter device) {
1219 for(EventListener listener : sListeners) {
1220 listener.onNewLPGasMeter(device);
1225 public void onNewPowerDistributionBoardMetering(
1227 for(EventListener listener : sListeners) {
1228 listener.onNewPowerDistributionBoardMetering(device);
1233 public void onNewSmartElectricEnergyMeter(
1235 for(EventListener listener : sListeners) {
1236 listener.onNewSmartElectricEnergyMeter(device);
1242 for(EventListener listener : sListeners) {
1243 listener.onNewSmartGasMeter(device);
1248 public void onNewSprinkler(
Sprinkler device) {
1249 for(EventListener listener : sListeners) {
1250 listener.onNewSprinkler(device);
1256 for(EventListener listener : sListeners) {
1257 listener.onNewWaterFlowmeter(device);
1263 for(EventListener listener : sListeners) {
1264 listener.onNewWattHourMeter(device);
1270 for(EventListener listener : sListeners) {
1271 listener.onNewClothesDryer(device);
1276 public void onNewCombinationMicrowaveOven(
1278 for(EventListener listener : sListeners) {
1279 listener.onNewCombinationMicrowaveOven(device);
1285 for(EventListener listener : sListeners) {
1286 listener.onNewCookingHeater(device);
1292 for(EventListener listener : sListeners) {
1293 listener.onNewElectricHotWaterPot(device);
1299 for(EventListener listener : sListeners) {
1300 listener.onNewRefrigerator(device);
1305 public void onNewRiceCooker(
RiceCooker device) {
1306 for(EventListener listener : sListeners) {
1307 listener.onNewRiceCooker(device);
1313 for(EventListener listener : sListeners) {
1314 listener.onNewWasherAndDryer(device);
1320 for(EventListener listener : sListeners) {
1321 listener.onNewWashingMachine(device);
1326 public void onNewWeighing(
Weighing device) {
1327 for(EventListener listener : sListeners) {
1328 listener.onNewWeighing(device);
1333 public void onNewController(
Controller device) {
1334 for(EventListener listener : sListeners) {
1335 listener.onNewController(device);
1340 public void onNewSwitch(
Switch device) {
1341 for(EventListener listener : sListeners) {
1342 listener.onNewSwitch(device);
1347 public void onNewDisplay(
Display device) {
1348 for(EventListener listener : sListeners) {
1349 listener.onNewDisplay(device);
1354 public void onNewTelevision(
Television device) {
1355 for(EventListener listener : sListeners) {
1356 listener.onNewTelevision(device);
static final String SELF_ADDRESS
static synchronized void restart()
static synchronized EchoNode addOtherNode(String address)
static String toHexString(byte[] data)
static EchoNode getSelfNode()
static EventListener getEventListener()
static synchronized EchoNode start(NodeProfile profile, DeviceObject[] devices)
static void addEventListener(EventListener listener)
static synchronized void stop()
static EchoNode getNode(String address)
static EchoNode getNode()
static boolean isStarted()
static EchoNode[] getNodes()
static synchronized void clear()
static void removeOtherNode(String address)