Package org.openmeetings.server.socket

Source Code of org.openmeetings.server.socket.ServerSocketMinaProcess

package org.openmeetings.server.socket;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
import javax.imageio.stream.ImageOutputStream;

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.DatagramSessionConfig;
import org.apache.mina.transport.socket.nio.NioDatagramAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.openmeetings.app.remote.red5.ScopeApplicationAdapter;
import org.openmeetings.server.beans.ServerFrameBean;
import org.openmeetings.server.beans.ServerFrameCursorStatus;
import org.openmeetings.server.beans.ServerSharingSessionBean;
import org.openmeetings.server.beans.ServerSharingViewerBean;
import org.openmeetings.server.beans.ServerStatusBean;
import org.openmeetings.server.beans.ServerViewerRegisterBean;
import org.openmeetings.server.cache.ServerSharingSessionList;
import org.openmeetings.server.cache.ServerSharingViewersList;
import org.openmeetings.server.codec.ServerDesktopCodecSharingFactory;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;

/**
* @author sebastianwagner
*
*/
public class ServerSocketMinaProcess {
 
  private static final Logger log = Red5LoggerFactory.getLogger(ServerSocketMinaProcess.class, ScopeApplicationAdapter.webAppRootKey);
 
  private static NioSocketAcceptor acceptor = null;
 
  public static final int port = 4445;
 
  public static void sendCursorPositionToSession(ServerFrameCursorStatus cursorStatus) {
    try {
     
      List<ServerSharingViewerBean> viewersList = ServerSharingViewersList.getViewersByPublicSID(cursorStatus.getPublicSID());
     
      if (viewersList == null) {
        //No Viewers registered via ODSP-Connection
        return;
      }
     
      for (ServerSharingViewerBean serverSharingViewerBean : viewersList) {
       
        IoSession session = ServerSocketMinaProcess.getSessionById(serverSharingViewerBean.getSessionId());
        session.write(cursorStatus);
       
      }
     
    } catch (Exception err) {
      log.error("[sendCursorPositionToSession]",err);
    }
  }
 
  public static void sendStatusToSession(ServerStatusBean serverStatusBean) {
    try {
     
      List<ServerSharingViewerBean> viewersList = ServerSharingViewersList.getViewersByPublicSID(serverStatusBean.getPublicSID());
     
      if (viewersList == null) {
        //No Viewers registered via ODSP-Connection
        return;
      }
     
      for (ServerSharingViewerBean serverSharingViewerBean : viewersList) {
       
        IoSession session = ServerSocketMinaProcess.getSessionById(serverSharingViewerBean.getSessionId());
        session.write(serverStatusBean);
       
      }
     
    } catch (Exception err) {
      log.error("[sendStatusToSession]",err);
    }
  }
 
  public static void sendMessageToSession(ServerFrameBean serverFrameBean) {
    try {
     
      List<ServerSharingViewerBean> viewersList = ServerSharingViewersList.getViewersByPublicSID(serverFrameBean.getPublicSID());
     
      if (viewersList == null) {
        //No Viewers registered via ODSP-Connection
        return;
      }
     
      for (ServerSharingViewerBean serverSharingViewerBean : viewersList) {
       
        IoSession session = ServerSocketMinaProcess.getSessionById(serverSharingViewerBean.getSessionId());
        session.write(serverFrameBean);
       
      }
     
    } catch (Exception err) {
      log.error("[sendMessageToSession]",err);
    }
  }
 
  public static IoSession getSessionById(Long sessionId) {
    try {
     
      if (acceptor == null) {
        throw new Exception("acceptor is Null");
      }
     
      if (acceptor.getManagedSessions().containsKey(sessionId)) {
        return acceptor.getManagedSessions().get(sessionId);
      } else {
        throw new Exception("Could Not Find IoSession for id: "+sessionId);
      }
     
     
     
    } catch (Exception err) {
      log.error("[getSession]",err);
    }
    return null;
  }
 
  public void doInitSocket() {
    try {
     
      acceptor = new NioSocketAcceptor();
     
      acceptor.getFilterChain().addLast("protocol", new ProtocolCodecFilter(new ServerDesktopCodecSharingFactory()));
     
      acceptor.getSessionConfig().setMinReadBufferSize(65535);
      acceptor.getSessionConfig().setMaxReadBufferSize(65535);
      acceptor.getSessionConfig().setReadBufferSize(65535);
      acceptor.getSessionConfig().setReceiveBufferSize(65535);
     
      acceptor.setHandler(new ServerPacketMinaHandler(this));
     
      DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();

          chain.addLast("logger", new LoggingFilter());


//        DatagramSessionConfig dcfg = acceptor.getSessionConfig();
// 
//        dcfg.setReuseAddress(true);

          acceptor.bind(new InetSocketAddress(port));

          log.warn("TCPServer listening on port " + port);
          //log.debug("UDPServer listening on port " + i);
         
     
    } catch (Exception err) {
      log.debug("[doInitSocket]",err);
    }
  }
 
 



  /**
   * @param remoteAddress
   * @param long1
   */
//  public void recvUpdate(SocketAddress remoteAddress, byte[] data) {
//    // TODO Auto-generated method stub
//   
//    ServerPacketHandler serverPacketHandler = new ServerPacketHandler();
//       
//        serverPacketHandler.handleIncomingByte(data);
//  }
 
  public void recvServerStatusBean(SocketAddress remoteAddress, Long sessionId, ServerStatusBean serverStatusBean) {
    log.debug("sequenceNumber STATUS "+serverStatusBean.getSequenceNumber());
   
    //log.debug("handleIncomingByte -- Status Bean ");
    if (serverStatusBean.getMode() == 0) {
      ServerSharingSessionList.startSession(sessionId,serverStatusBean);
    } else if (serverStatusBean.getMode() == 4) {
      log.debug("STOP SESSION");
      ServerSharingSessionList.stopSession(sessionId);
    }
   
  }

  public void recvServerFrameBean(SocketAddress remoteAddress, ServerFrameBean serverFrameBean) {
    try {
   
  //    log.debug("mode "+serverFrameBean.getMode());
      log.debug("recvServerFrameBean sequenceNumber "+serverFrameBean.getSequenceNumber());
  //    log.debug("lengthSecurityToken "+serverFrameBean.getLengthSecurityToken());
  //    log.debug("xValue "+serverFrameBean.getXValue());
  //    log.debug("yValue "+serverFrameBean.getYValue());
  //    log.debug("width "+serverFrameBean.getWidth());
  //    log.debug("height "+serverFrameBean.getHeight());
  //    log.debug("lengthPayload "+serverFrameBean.getLengthPayload());
     
      //log.debug("handleIncomingByte -- Frame Bean ");
     
      //if (false) {
//        ByteArrayInputStream byteGzipIn = new ByteArrayInputStream(serverFrameBean.getImageBytes());
//          GZIPInputStream gZipIn = new GZIPInputStream(byteGzipIn);
// 
//          ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
//         
//          byte[] buffer = new byte[1024];
//          int count = 0;
//          while ((count = gZipIn.read(buffer)) > 0 ){
//            bytesOut.write(buffer,0,count);
//        }
//        bytesOut.close();
//        gZipIn.close();
//       
//        ByteArrayInputStream in = new ByteArrayInputStream(bytesOut.toByteArray());
//       
//        BufferedImage bufferedImage = ImageIO.read(in);
//       
//        ByteArrayOutputStream out = new ByteArrayOutputStream();
//        ImageWriter writer = ImageIO.getImageWritersByFormatName( "jpg" ).next();
//          ImageOutputStream ios = ImageIO.createImageOutputStream( out );
//          writer.setOutput( ios );
//         
//          ImageWriteParam iwparam = new JPEGImageWriteParam( Locale.getDefault() );
//          iwparam.setCompressionMode( ImageWriteParam.MODE_EXPLICIT ) ;
//          iwparam.setCompressionQuality( new Float(0.7) );
//          writer.write( null, new IIOImage(bufferedImage, null, null), null );
//         
//          //GZip
//        ByteArrayOutputStream byteGzipOut = new ByteArrayOutputStream();
//          GZIPOutputStream gZipOut = new GZIPOutputStream(byteGzipOut);
//         
//          gZipOut.write(out.toByteArray());
//          gZipOut.close();
//         
//          //Flush
//          ios.flush();
//          writer.dispose();
//          ios.close();
//          bufferedImage.flush();
//          out.flush();
//       
//          serverFrameBean.setImageBytesAsJPEG(byteGzipOut.toByteArray());
//         
//          byteGzipOut.flush();
//         
//      } else {
        serverFrameBean.setImageBytesAsJPEG(serverFrameBean.getImageBytes());
//      }
     
      ServerSharingSessionList.addFrameToSession(serverFrameBean);
     
    } catch (Exception err) {
      log.error("[recvServerFrameBean]",err);
    }
  }
 
  /**
   * @param remoteAddress
   */
  public void updateClientCursor(SocketAddress remoteAddress, ServerFrameCursorStatus serverFrameCursorStatus) {
    // TODO Auto-generated method stub
   
    ServerSharingSessionList.updateCursorPosition(serverFrameCursorStatus);

  }

  /**
   * @param remoteAddress
   */
  public void removeClient(SocketAddress remoteAddress, Long sessionId) {
    // TODO Auto-generated method stub
   
    ServerSharingSessionList.removeSession(sessionId);
    ServerSharingViewersList.removeSession(sessionId);
  }



  /**
   * @param remoteAddress
   */
  public void addClient(SocketAddress remoteAddress) {
    // TODO Auto-generated method stub
   
  }

  /**
   * @param remoteAddress
   * @param message
   */
  public void recvServerViewerRegisterBean(SocketAddress remoteAddress, Long sessionId,
      ServerViewerRegisterBean message) {
   
    ServerSharingViewersList.addNewViewerClient(sessionId,message);
   
    //Initial Screens loading
    ServerSharingSessionBean serverSharingSessionBean = ServerSharingSessionList.getServerSharingSessionBeanByPublicSID(message.getPublicSID());
   
    IoSession session = ServerSocketMinaProcess.getSessionById(sessionId);
   
    for (ServerFrameBean serverFrameBean : serverSharingSessionBean.getServerFrameBeans()) {
      session.write(serverFrameBean);
    }
   
  }
 

}
TOP

Related Classes of org.openmeetings.server.socket.ServerSocketMinaProcess

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.