Package com.neophob.sematrix.core.osc

Source Code of com.neophob.sematrix.core.osc.PixelControllerOscServer

/**
* Copyright (C) 2011-2013 Michael Vogt <michu@neophob.com>
*
* This file is part of PixelController.
*
* PixelController is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* PixelController is distributed 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.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PixelController.  If not, see <http://www.gnu.org/licenses/>.
*/
package com.neophob.sematrix.core.osc;

import java.util.logging.Level;
import java.util.logging.Logger;

import org.apache.commons.lang3.StringUtils;

import com.neophob.sematrix.core.glue.Collector;
import com.neophob.sematrix.core.jmx.PacketAndBytesStatictics;
import com.neophob.sematrix.core.listener.MessageProcessor;
import com.neophob.sematrix.core.properties.ValidCommands;
import com.neophob.sematrix.osc.model.OscMessage;
import com.neophob.sematrix.osc.server.OscMessageHandler;
import com.neophob.sematrix.osc.server.OscServerException;
import com.neophob.sematrix.osc.server.impl.OscServer;
import com.neophob.sematrix.osc.server.impl.OscServerFactory;

/**
* OSC Interface
*
* @author michu
*
*/
public class PixelControllerOscServer extends OscMessageHandler implements PacketAndBytesStatictics {

  /** The log. */
  private static final Logger LOG = Logger.getLogger(PixelControllerOscServer.class.getName());

  //size of recieving buffer, should fit a whole image buffer
  private static final int BUFFER_SIZE = 50000;
 
  private OscServer oscServer;
 
  /**
   *
   * @param listeningPort
   * @throws OscServerException
   */
  public PixelControllerOscServer(int listeningPort) throws OscServerException {
      if (listeningPort<1) {
          LOG.log(Level.INFO, "Configured Port {0}, OSC Server disabled", new Object[] { listeningPort });
          return;
      }

    LOG.log(Level.INFO,  "Start OSC Server at port {0}", new Object[] { listeningPort });
   
    oscServer = OscServerFactory.createServer(this, listeningPort, BUFFER_SIZE);
  }

  /**
   *
   */
  public void startServer() {
    oscServer.startServer();
  }
 
  @Override
  public void handleOscMessage(OscMessage oscIn) {
    //sanity check
    if (StringUtils.isBlank(oscIn.getPattern())) {
      LOG.log(Level.INFO,  "Ignore empty OSC message...");
      return;
    }
   
    String pattern = oscIn.getPattern();
   
    ValidCommands command;   
    try {
      command = ValidCommands.valueOf(pattern);
    } catch (Exception e) {
      LOG.log(Level.WARNING, "Unknown message: "+pattern, e);
      return;     
    }
   
    String[] msg = new String[1+command.getNrOfParams()];
    msg[0] = pattern;
   
    if (oscIn.getBlob()==null && command.getNrOfParams()>0 &&
        command.getNrOfParams()!=oscIn.getArgs().length) {
      String args = oscIn.getArgs()==null ? "null" : ""+oscIn.getArgs().length;
      LOG.log(Level.WARNING, "Parameter cound missmatch, expected: {0} available: {1} ",
          new String[]{""+command.getNrOfParams(), ""+args});
      return;
    }
   
    //ignore nr of parameter for osc generator
    if (command != ValidCommands.OSC_GENERATOR1 && command != ValidCommands.OSC_GENERATOR2) {     
      for (int i=0; i<command.getNrOfParams(); i++) {
        msg[1+i] = oscIn.getArgs()[i];
      }     
    }

    LOG.log(Level.INFO, "Recieved OSC message: {0}", msg);
    MessageProcessor.processMsg(msg, true, oscIn.getBlob());
   
    //notfiy gui if an osc message arrives
    Collector.getInstance().notifyGuiUpdate();
  }


    /* (non-Javadoc)
     * @see com.neophob.sematrix.core.jmx.PacketAndBytesStatictics#getPacketCounter()
     */
    @Override
    public int getPacketCounter() {
        return oscServer.getPacketCounter();
    }

    /* (non-Javadoc)
     * @see com.neophob.sematrix.core.jmx.PacketAndBytesStatictics#getBytesRecieved()
     */
    @Override
    public long getBytesRecieved() {
        return oscServer.getBytesRecieved();
   
 
 
}
TOP

Related Classes of com.neophob.sematrix.core.osc.PixelControllerOscServer

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.