Package manual.core.misc.remctrl

Source Code of manual.core.misc.remctrl.RemoteControlSupervision

/*
* This file is not part of the ItsNat framework.
*
* Original source code use and closed source derivatives are authorized
* to third parties with no restriction or fee.
* The original source code is owned by the author.
*
* This program is distributed AS IS in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* Author: Jose Maria Arranz Santamaria
* (C) Innowhere Software Services S.L., Spanish company, year 2007
*/

package manual.core.misc.remctrl;

import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletRequest;
import org.itsnat.core.ClientDocument;
import org.itsnat.core.ItsNatDocument;
import org.itsnat.core.ItsNatServlet;
import org.itsnat.core.ItsNatServletRequest;
import org.itsnat.core.ItsNatServletResponse;
import org.itsnat.core.event.ItsNatAttachedClientCometEvent;
import org.itsnat.core.event.ItsNatAttachedClientEvent;
import org.itsnat.core.event.ItsNatAttachedClientEventListener;
import org.itsnat.core.event.ItsNatAttachedClientTimerEvent;


public class RemoteControlSupervision implements ItsNatAttachedClientEventListener
{
    public RemoteControlSupervision()
    {
    }

    public void handleEvent(ItsNatAttachedClientEvent event)
    {
        if (event.getItsNatDocument() != null)
            processWithDocument(event);
        else
            processNotDocument(event);
    }

    public void processWithDocument(ItsNatAttachedClientEvent event)
    {
        int phase = event.getPhase();
        if (phase == ItsNatAttachedClientEvent.REQUEST)
        {
            String[] msg = new String[1];
            if (event instanceof ItsNatAttachedClientTimerEvent)
            {
                ItsNatAttachedClientTimerEvent timerEvent = (ItsNatAttachedClientTimerEvent)event;
                boolean accepted = (timerEvent.getRefreshInterval() >= 3000);
                event.setAccepted(accepted);
                if (!accepted) msg[0] = "Refresh interval too short: " + timerEvent.getRefreshInterval();
            }
            else if (event instanceof ItsNatAttachedClientCometEvent)
            {
                event.setAccepted(true);
            }
            else // "none" refresh mode
            {
                event.setAccepted(true);
            }

            if (event.getWaitDocTimeout() > 30000)
            {
                event.setAccepted(false);
                msg[0] = "Too much time waiting for iframe/object/embed: " + event.getWaitDocTimeout();
            }

            ItsNatServletRequest request = event.getItsNatServletRequest();
            ServletRequest servRequest = request.getServletRequest();

            if (!event.isAccepted())
            {
                ItsNatServletResponse response = event.getItsNatServletResponse();
                ItsNatServlet servlet = response.getItsNatServlet();
                @SuppressWarnings("unchecked")
                Map<String,String[]> newParams = new HashMap<String,String[]>(servRequest.getParameterMap());
                newParams.remove("itsnat_action"); // Removes: itsnat_action=attach_doc
                newParams.put("itsnat_doc_name",new String[]{"feashow.ext.core.misc.remCtrlReqRejected"});
                newParams.put("reason", msg); // submitted as array
                servRequest = servlet.createServletRequest(servRequest, newParams);
                servlet.processRequest(servRequest,response.getServletResponse());
            }
        }
        else if (phase == ItsNatAttachedClientEvent.REFRESH)
        {
            ClientDocument observer = event.getClientDocument();
            if (observer.getItsNatDocument().isInvalid())
            {
                observer.addCodeToSend("alert('Observed document was destroyed');");
            }
            else
            {
                long initTime = observer.getCreationTime();
                long currentTime = System.currentTimeMillis();
                long limitMilisec = 15*60*1000;
                // 15 minutes (to avoid a long monitoring session)
                if (currentTime - initTime > limitMilisec)
                {
                    event.setAccepted(false);
                    observer.addCodeToSend("alert('Remote Control Timeout');\n");
                }
            }
        }
        // ItsNatAttachedClientEvent.LOAD & UNLOAD : nothing to do

        if (!event.isAccepted())
            event.getItsNatEventListenerChain().stop(); // Not really necessary
    }

    public void processNotDocument(ItsNatAttachedClientEvent event)
    {
        ItsNatServletResponse response = event.getItsNatServletResponse();
        if (event.getPhase() == ItsNatAttachedClientEvent.REQUEST)
        {
            ItsNatServlet servlet = response.getItsNatServlet();
            ServletRequest servRequest = event.getItsNatServletRequest().getServletRequest();
            @SuppressWarnings("unchecked")
            Map<String,String[]> newParams = new HashMap<String,String[]>(servRequest.getParameterMap());
            newParams.remove("itsnat_action"); // Removes: itsnat_action=attach_doc
            newParams.put("itsnat_doc_name",new String[]{"feashow.ext.core.misc.remCtrlDocNotFound"});
            servRequest = servlet.createServletRequest(servRequest, newParams);
            servlet.processRequest(servRequest,response.getServletResponse());
        }
        else // ItsNatAttachedClientEvent.REFRESH
        {
            response.addCodeToSend("if (confirm('Session is expired. Close Window?')) window.close();");
        }

        /*
        if (event.getPhase() == ItsNatAttachedClientEvent.REQUEST)
        {
            ServletRequest request =
      event.getItsNatServletRequest().getServletRequest();
            String sessionId = request.getParameter("itsnat_session_id");
            String docId = request.getParameter("itsnat_doc_id");
            try
            {
              Writer out = response.getServletResponse().getWriter();
              out.write("<html><body><h1>Session/document not found with id:");
              out.write(sessionId + "/" + docId);
              out.write("</h1></body></html>");
            }
            catch(IOException ex) { new RuntimeException(ex); }
        }
        */
    }
}
TOP

Related Classes of manual.core.misc.remctrl.RemoteControlSupervision

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.