Package org.openmeetings.client.codec

Source Code of org.openmeetings.client.codec.ClientDesktopRequestDecoder$ServerFrameBeanState

package org.openmeetings.client.codec;


import org.apache.mina.filter.codec.ProtocolDecoderOutput;
import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;
import org.openmeetings.client.beans.ClientCursorStatus;
import org.openmeetings.client.beans.ClientFrameBean;
import org.openmeetings.client.beans.ClientStatusBean;
import org.apache.log4j.Logger;

/**
* @author sebastianwagner
*
*/
public class ClientDesktopRequestDecoder extends CumulativeProtocolDecoder {
 
  private static Logger log = Logger.getLogger(ClientDesktopRequestDecoder.class);

  private static final String DECODER_STATE_KEY = ClientDesktopRequestDecoder.class.getName() + ".STATE";

    public static final int MAX_IMAGE_SIZE = 5 * 400 * 400;

    private static class ServerFrameBeanState {

      private Integer mode = null;//4Byte
      private Integer sequenceNumber = null;//4Byte
      private Integer lengthSecurityToken = null;//4Byte
      private Integer xValue = null;//4Byte
      private Integer yValue = null;//4Byte
      private Integer width = null;//4Byte
      private Integer height = null;//4Byte
      private Integer lengthPayload = null;//4Byte
      private String publicSID = null;//read from lengthSecurityToken, but should be 32Byte
      private byte[] imageBytes = null;//read from lengthPayload
     
      //In case its mode 0 or 4 it is a start/stop Packet that has no payload
      private Integer tileWidth = null;//4 Byte
      private Integer tileHeight = null;// 4 Byte

    }
   
  @Override
  protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
    try {
      ServerFrameBeanState serverFrameBeanState = (ServerFrameBeanState) session.getAttribute(DECODER_STATE_KEY);
          if (serverFrameBeanState == null) {
            serverFrameBeanState = new ServerFrameBeanState();
              session.setAttribute(DECODER_STATE_KEY, serverFrameBeanState);
          }

          if (serverFrameBeanState.mode == null) {
            // try to set Modus
              if (in.remaining() >= 4) {
                serverFrameBeanState.mode = in.getInt();
                //log.debug("mode SET "+serverFrameBeanState.mode);
              } else {
                return false;
              }
          }
         
          if (serverFrameBeanState.sequenceNumber == null) {
            //try to set the sequenceNumber
            if (in.remaining() >= 4) {
              serverFrameBeanState.sequenceNumber = in.getInt();
              //log.debug("sequenceNumber SET "+serverFrameBeanState.sequenceNumber);
            } else {
                return false;
              }
          }
         
          if (serverFrameBeanState.lengthSecurityToken == null) {
            //try to set the lengthSecurityToken
            if (in.remaining() >= 4) {
              serverFrameBeanState.lengthSecurityToken = in.getInt();
              //log.debug("lengthSecurityToken SET "+serverFrameBeanState.lengthSecurityToken);
            } else {
                return false;
              }
          }

          if (serverFrameBeanState.xValue == null) {
            //try to set the xValue
            if (in.remaining() >= 4) {
              serverFrameBeanState.xValue = in.getInt();
              //log.debug("xValue SET "+serverFrameBeanState.xValue);
            } else {
                return false;
              }
          }

          if (serverFrameBeanState.yValue == null) {
           
            //log.debug("yValue in.remaining() "+in.remaining());
           
            //try to set the yValue
            if (in.remaining() >= 4) {
              serverFrameBeanState.yValue = in.getInt();
              //log.debug("yValue SET "+serverFrameBeanState.yValue);
            } else {
                return false;
              }
          }

          if (serverFrameBeanState.width == null) {
           
            //log.debug("width in.remaining() "+in.remaining());
           
            //try to set the width
            if (in.remaining() >= 4) {
              serverFrameBeanState.width = in.getInt();
              //log.debug("width SET "+serverFrameBeanState.width);
            } else {
                return false;
              }
          }

          if (serverFrameBeanState.height == null) {
           
            //log.debug("height in.remaining() "+in.remaining());
           
            //try to set the height
            if (in.remaining() >= 4) {
              serverFrameBeanState.height = in.getInt();
              //log.debug("height SET "+serverFrameBeanState.height);
            } else {
                return false;
              }
          }

          if (serverFrameBeanState.lengthPayload == null) {
            //try to set the lengthPayload
            if (in.remaining() >= 4) {
              serverFrameBeanState.lengthPayload = in.getInt();
              //log.debug("lengthPayload SET "+serverFrameBeanState.lengthPayload);
            } else {
                return false;
              }
          }

          if (serverFrameBeanState.publicSID == null) {
            //try to set the xValue
           
            if (in.remaining() >= serverFrameBeanState.lengthSecurityToken) {
            //if (in.prefixedDataAvailable(4,serverFrameBeanState.lengthSecurityToken)) {
              byte[] byteBuffer = new byte[serverFrameBeanState.lengthSecurityToken];
              in.get(byteBuffer, 0, serverFrameBeanState.lengthSecurityToken);
              serverFrameBeanState.publicSID = new String(byteBuffer);
             
              log.debug("publicSID SET "+serverFrameBeanState.publicSID);
             
              if (serverFrameBeanState.mode == 6) {
               
                ClientCursorStatus clientCursorStatus = new ClientCursorStatus();
               
                clientCursorStatus.setMode(serverFrameBeanState.mode);
                clientCursorStatus.setSequenceNumber(serverFrameBeanState.sequenceNumber);
                clientCursorStatus.setPublicSID(serverFrameBeanState.publicSID);
                clientCursorStatus.setX(serverFrameBeanState.xValue);
                clientCursorStatus.setY(serverFrameBeanState.yValue);
               
                log.debug("Out Buffer Full clientCursorStatus Bean");
               
                //Write the result to the Handler
                out.write(clientCursorStatus);
               
                //Reset the Buffer Values
                serverFrameBeanState.mode = null;
                serverFrameBeanState.sequenceNumber = null;
                serverFrameBeanState.lengthSecurityToken = null;
            serverFrameBeanState.xValue = null;
            serverFrameBeanState.yValue = null;
            serverFrameBeanState.width = null;
            serverFrameBeanState.height = null;
            serverFrameBeanState.lengthPayload = null;
            serverFrameBeanState.publicSID = null;
            serverFrameBeanState.imageBytes = null;
            serverFrameBeanState.tileHeight = null;
            serverFrameBeanState.tileWidth = null;
               
                return true;
               
              } else {
               
                return false;
               
              }
             
             
            } else {
                return false;
              }
          }         

          if (serverFrameBeanState.imageBytes == null &&
                (serverFrameBeanState.mode == 1 || serverFrameBeanState.mode == 2 || serverFrameBeanState.mode == 3)) {
           
            //log.debug("in.remaining() "+in.remaining());
            //log.debug("serverFrameBeanState.lengthPayload "+serverFrameBeanState.lengthPayload);
           
            if (in.remaining() >= serverFrameBeanState.lengthPayload) {
            //if (in.prefixedDataAvailable(4,serverFrameBeanState.lengthPayload)) {
              byte[] byteBuffer = new byte[serverFrameBeanState.lengthPayload];
              in.get(byteBuffer, 0, serverFrameBeanState.lengthPayload);
             
              serverFrameBeanState.imageBytes = byteBuffer;
             
              ClientFrameBean serverFrameBean = new ClientFrameBean(
                        serverFrameBeanState.mode,
                        serverFrameBeanState.sequenceNumber,
                        serverFrameBeanState.lengthSecurityToken,
                        serverFrameBeanState.xValue,
                        serverFrameBeanState.yValue,
                        serverFrameBeanState.width,
                        serverFrameBeanState.height,
                        serverFrameBeanState.lengthPayload,
                        serverFrameBeanState.publicSID,
                        serverFrameBeanState.imageBytes);
             
              //Write the result to the Handler
              out.write(serverFrameBean);
             
              //Reset the Buffer Values
              serverFrameBeanState.mode = null;
              serverFrameBeanState.sequenceNumber = null;
              serverFrameBeanState.lengthSecurityToken = null;
          serverFrameBeanState.xValue = null;
          serverFrameBeanState.yValue = null;
          serverFrameBeanState.width = null;
          serverFrameBeanState.height = null;
          serverFrameBeanState.lengthPayload = null;
          serverFrameBeanState.publicSID = null;
          serverFrameBeanState.imageBytes = null;
          serverFrameBeanState.tileHeight = null;
          serverFrameBeanState.tileWidth = null;

                  return true;
                 
            } else {
              return false;
            }
          }
         
          if (serverFrameBeanState.tileWidth == null &&
              (serverFrameBeanState.mode == 0 || serverFrameBeanState.mode == 4)) {
            //try to set the lengthPayload
            if (in.remaining() >= 4) {
              serverFrameBeanState.tileWidth = in.getInt();
              log.debug("tileWidth SET "+serverFrameBeanState.tileWidth);
            } else {
                return false;
              }
          }
         
          if (serverFrameBeanState.tileHeight == null &&
              (serverFrameBeanState.mode == 0 || serverFrameBeanState.mode == 4)) {
            //try to set the lengthPayload
            if (in.remaining() >= 4) {
              serverFrameBeanState.tileHeight = in.getInt();
             
              ClientStatusBean serverStatusBean = new ClientStatusBean();

              serverStatusBean.setMode(serverFrameBeanState.mode);
              serverStatusBean.setSequenceNumber(serverFrameBeanState.sequenceNumber);
              serverStatusBean.setPublicSID(serverFrameBeanState.publicSID);
              serverStatusBean.setXValue(serverFrameBeanState.xValue);
              serverStatusBean.setYValue(serverFrameBeanState.yValue);
              serverStatusBean.setWidth(serverFrameBeanState.width);
              serverStatusBean.setHeight(serverFrameBeanState.height);
              serverStatusBean.setTileWidth(serverFrameBeanState.tileWidth);
              serverStatusBean.setTileHeight(serverFrameBeanState.tileHeight);
             
              log.debug("Out Buffer Full Status Bean");
             
              //Write the result to the Handler
              out.write(serverStatusBean);
             
              //Reset the Buffer Values
              serverFrameBeanState.mode = null;
              serverFrameBeanState.sequenceNumber = null;
              serverFrameBeanState.lengthSecurityToken = null;
          serverFrameBeanState.xValue = null;
          serverFrameBeanState.yValue = null;
          serverFrameBeanState.width = null;
          serverFrameBeanState.height = null;
          serverFrameBeanState.lengthPayload = null;
          serverFrameBeanState.publicSID = null;
          serverFrameBeanState.imageBytes = null;
          serverFrameBeanState.tileHeight = null;
          serverFrameBeanState.tileWidth = null;
             
              return true;
             
            } else {
                return false;
              }
          }
         
         
//          if (serverFrameBeanState.tileHeight == null &&
//              (serverFrameBeanState.mode == 6)) {
//            //try to set the lengthPayload
//            if (in.remaining() >= 4) {
//              serverFrameBeanState.tileHeight = in.getInt();
//             
//              ClientCursorStatus clientCursorStatus = new ClientCursorStatus();
//
//              clientCursorStatus.setMode(serverFrameBeanState.mode);
//              clientCursorStatus.setSequenceNumber(serverFrameBeanState.sequenceNumber);
//              clientCursorStatus.setPublicSID(serverFrameBeanState.publicSID);
//              clientCursorStatus.setX(serverFrameBeanState.xValue);
//              clientCursorStatus.setY(serverFrameBeanState.yValue);
//             
//              log.debug("Out Buffer Full Status Bean");
//             
//              //Write the result to the Handler
//              out.write(clientCursorStatus);
//             
//              //Reset the Buffer Values
//              serverFrameBeanState.mode = null;
//              serverFrameBeanState.sequenceNumber = null;
//              serverFrameBeanState.lengthSecurityToken = null;
//          serverFrameBeanState.xValue = null;
//          serverFrameBeanState.yValue = null;
//          serverFrameBeanState.width = null;
//          serverFrameBeanState.height = null;
//          serverFrameBeanState.lengthPayload = null;
//          serverFrameBeanState.publicSID = null;
//          serverFrameBeanState.imageBytes = null;
//          serverFrameBeanState.tileHeight = null;
//          serverFrameBeanState.tileWidth = null;
//             
//              return true;
//             
//            } else {
//                return false;
//              }
//          }
     
      return false;
     
    } catch (Exception err) {
      log.error("[doDecode]",err);
    }
    return false;
  }


}
TOP

Related Classes of org.openmeetings.client.codec.ClientDesktopRequestDecoder$ServerFrameBeanState

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.