/* * RED5 Open Source Flash Server - http://code.google.com/p/red5/ * * Copyright 2006-2012 by respective authors (see below). All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.red5.server.plugin.definst; import org.red5.logging.Red5LoggerFactory; import org.red5.server.ClientRegistry; import org.red5.server.Context; import org.red5.server.MappingStrategy; import org.red5.server.api.scope.IScope; import org.red5.server.plugin.Red5Plugin; import org.red5.server.scope.GlobalScope; import org.red5.server.scope.Scope; import org.red5.server.scope.ScopeResolver; import org.red5.server.service.ServiceInvoker; import org.slf4j.Logger; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; /** * Default instance for Red5 * * @author Paul Gregoire */ public class DefinstPlugin extends Red5Plugin { private static Logger log = Red5LoggerFactory.getLogger(DefinstPlugin.class); private DefinstHandler handler = null; private ApplicationContext parentContext; private ApplicationContext appContext; private String appName = "definst"; private String hostName = "localhost"; @Override public void doStart() throws Exception { super.doStart(); // add the context to the parent, this will be red5.xml ConfigurableBeanFactory factory = ((ConfigurableApplicationContext) context).getBeanFactory(); // if parent context was not set then lookup red5.common log.debug("Lookup common - bean:{} local:{} singleton:{}", new Object[] { factory.containsBean("red5.common"), factory.containsLocalBean("red5.common"), factory.containsSingleton("red5.common"), }); parentContext = (ApplicationContext) factory.getBean("red5.common"); //create app context appContext = new FileSystemXmlApplicationContext(new String[]{"classpath:/definst.xml"}, true, parentContext); //get a ref to the "default" global scope GlobalScope global = (GlobalScope) server.getGlobal("default"); //create a scope resolver ScopeResolver scopeResolver = new ScopeResolver(); scopeResolver.setGlobalScope(global); //create a context - this takes the place of the previous web context Context ctx = new Context(appContext, appName); ctx.setClientRegistry(new ClientRegistry()); ctx.setMappingStrategy(new MappingStrategy()); ctx.setPersistanceStore(global.getStore()); ctx.setScopeResolver(scopeResolver); ctx.setServiceInvoker(new ServiceInvoker()); //create a handler handler = new DefinstHandler(); //create a scope for the admin // Scope scope = new Scope.Builder((IScope) global, "scope", appName, false).build(); // scope.setContext(ctx); // scope.setHandler(handler); server.addMapping(hostName, appName, "default"); // if (global.addChildScope(scope)) { // log.info("Scope was added to global (default) scope"); // } else { // log.warn("Scope was not added to global (default) scope"); // } // // //start the scope // scope.start(); } @Override public void doStop() throws Exception { super.doStop(); //clean up / unregister everything server.removeMapping(hostName, appName); // handler.stop(null); } @Override public String getName() { return appName; } @Override public void init() { log.debug("Initializing"); super.init(); } public String getHostName() { return hostName; } public void setHostName(String hostName) { this.hostName = hostName; } }