001package ca.bc.webarts.tools.isy; 002 003import com.universaldevices.common.UDClientStatus; 004import com.universaldevices.resources.errormessages.ErrorEventListener; 005import com.universaldevices.resources.errormessages.Errors; 006import com.universaldevices.upnp.UDControlPoint; 007import com.universaldevices.upnp.UDProxyDevice; 008 009public class MyISYErrorHandler implements ErrorEventListener{ 010 011 private int socket_open_failed_count=0; 012 private void offLine(int status, Object device){ 013 String err=Errors.getErrorMessage(status); 014 System.out.println("Warning: "+status + (err==null?" ":err)); 015 if (UDClientStatus.isBusy()) 016 return; 017 if (status==1050) 018 socket_open_failed_count++; 019 if (socket_open_failed_count < 3) 020 return; 021 socket_open_failed_count = 0; 022 023 if (device == null) 024 device = UDControlPoint.firstDevice; 025 if (device !=null && device instanceof UDProxyDevice) 026 UDControlPoint.getInstance().offLine((UDProxyDevice)device); 027 028 } 029 030 private void humanInterventionRequired(int status, String msg){ 031 String err=Errors.getErrorMessage(status); 032 System.out.println("Human Intervention Required: "+status + (err==null?" ":err)); 033 if (msg != null) 034 System.out.println(msg); 035 } 036 037 private void warning(int status, String msg){ 038 String err=Errors.getErrorMessage(status); 039 System.out.println("Warning: "+status + (err==null?" ":err)); 040 if (msg != null) 041 System.out.println(msg); 042 } 043 044 private void fatalError(int status, String msg){ 045 String err=Errors.getErrorMessage(status); 046 System.out.println("Fatal Error: "+status + (err==null?" ":err)); 047 if (msg != null) 048 System.out.println(msg); 049 } 050 051 /** 052 * This method is invoked when ISY encounters an error 053 * @param status - the error code 054 * @param msg - any generated messages by <code>ISYClient</code> 055 * @param device - the <code>UDProxyDevice</code> initiating this event 056 * @return - whether or not the client attempt displaying the error 057 * on a UI. if a <code>GUIErrorHandler</code> is installed, that object is invoked (showError) 058 */ 059 060 public boolean errorOccured(int status, String msg, Object device) { 061 062 switch (status){ 063 case -1: 064 case 803/*discovering nodes:retry*/: 065 case 902/*Node Is in Error; Check connections!*/: 066 warning(status,null); 067 break; 068 069 case 801/*maximum secure sessions*/: 070 case 805/*internal error: reboot*/: 071 case 815/*Maximum Subscribers Reached*/: 072 case 903/*System Not Initialized; Restart!*/: 073 case 905/*Subscription Failed; The device might need reboot!*/: 074 case 1020/*Couldn't create the event handler socket*/: 075 fatalError(status,"Exit the applciation; might have to reboot ISY"); 076 break; 077 078 case 781/*no such session*/: 079 case 802/*device in error*/: 080 case 813/*subscription id not found*/: 081 case 904/*Subscription Failed!*/: 082 case 906/*Event received for a different subscription; Restart!*/: 083 case 907/*Bad Event Received*/: 084 case 1021/*Subscription failed: socket*/: 085 case 1022/*Unsubscription failed: socket*/: 086 case 1023/*Interrupted I/O: ProxyDevice*/: 087 case 1024/*I/O error: ProxyDevice*/: 088 case 1025/*Server socket close failed*/: 089 case 1026/*Server socket close failed-2*/: 090 case 1050/*Socket open failed*/: 091 case 1051/*Socket close failed*/: 092 case 1100/*Couldn't open the stream*/: 093 case 1200/*Couldn't resolve localhost*/: 094 case 1301/*Device not responding*/: 095 offLine(status,device); 096 break; 097 098 case 604/*human intervention required*/: 099 case 701/*authorization failed*/: 100 case 1000/*XML parse error*/: 101 case 4000 /*No < or > in the name*/: 102 case 5000 /*Invalid userid/pwd */: 103 case 5001 /*Invalid length*/: 104 case 9000 /*Invalid SSL Certificate*/: 105 humanInterventionRequired(status,null); 106 offLine(status,device); 107 break; 108 109 } 110 111 return false; 112 } 113 114 115}