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}