/* Milenia Grafter Server Copyright (c) 2007-2008 by Milan Toth. All rights reserved. This program 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 2 of the License, or (at your option) any later version. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package application.modules; /** SSConnection class @mail milgra@milgra.com @author Milan Toth @version 20080316 Tasks of SSConnection - testedClient every possible connection event on remote server **/ import com.milgra.server.api.Client; import com.milgra.server.api.Wrapper; import com.milgra.server.api.StatusEvent; import com.milgra.server.api.WrapperList; import com.milgra.server.api.IApplication; import com.milgra.server.api.EventListener; public class SSConnection implements IModule { // url - address of tested server // client - controller client // testedClient - // application - mother application public String url; public Client client; public Client testedClient; public IApplication application; /** * SSConnection constuctor * @param applicationX mother application */ public SSConnection ( IApplication applicationX ) { System.out.println( System.currentTimeMillis( ) + " SSConnection.construct " + applicationX ); application = applicationX; } /** * Client entering point * @param clientX client * @param argumentX arguments */ public void onEnter ( Client clientX , WrapperList argumentsX ) { System.out.println( System.currentTimeMillis( ) + " SSConnection.onEnter " + clientX + " " + argumentsX ); // set url = argumentsX.getString( 1 ); client = clientX; // start client.accept( ); invalidServer( ); } /** * Closes module **/ public void onLeave ( Client clientX ) { System.out.println( System.currentTimeMillis( ) + " SSConnection.onClose " ); } /** * Connecting to an invalid server */ public void invalidServer ( ) { System.out.println( System.currentTimeMillis( ) + " SSConnection.invalidServer " ); client.call( "log" , new Wrapper( "Connecting to invalid server" ) ); EventListener statusListener = new EventListener ( ) { public void onEvent ( StatusEvent eventX ) { onInvalidServer( eventX ); } }; testedClient = new Client( application ); testedClient.addStatusEventListener( statusListener ); testedClient.connect( "rtmp://fake.fke/fake" , new Wrapper( ) ); } /** * Status from invalid server * @param eventX */ public void onInvalidServer ( StatusEvent eventX ) { System.out.println( System.currentTimeMillis( ) + " SSConnection.onInvalidServer " + eventX.code ); client.call( "log" , new Wrapper( "Status: " + eventX.code ) ); if ( eventX.code.equals( StatusEvent.FAILURE ) ) client.call( "log" , new Wrapper( "SUCCESS" ) ); else client.call( "log" , new Wrapper( "FAILED" ) ); testedClient.addStatusEventListener( null ); invalidApplication( ); } /** * Connecting to invalid application */ public void invalidApplication ( ) { System.out.println( System.currentTimeMillis( ) + " SSConnection.invalidApplication " ); client.call( "log" , new Wrapper( "Connecting to invalid application" ) ); EventListener statusListener = new EventListener ( ) { public void onEvent ( StatusEvent eventX ) { onInvalidApplication( eventX ); } }; testedClient = new Client( application ); testedClient.addStatusEventListener( statusListener ); testedClient.connect( "rtmp://localhost/fake" , new Wrapper( ) ); } /** * Status for invalid application * @param eventX event */ public void onInvalidApplication ( StatusEvent eventX ) { System.out.println( System.currentTimeMillis( ) + " SSConnection.onInvalidApplication " + eventX.code ); if ( eventX.code.equals( StatusEvent.REJECTION ) ) { client.call( "log" , new Wrapper( "Status: " + eventX.code + " application: " + eventX.info.getString( "application" ) ) ); client.call( "log" , new Wrapper( "SUCCESS" ) ); } else { client.call( "log" , new Wrapper( "Status: " + eventX.code ) ); client.call( "log" , new Wrapper( "FAILED" ) ); } testedClient.addStatusEventListener( null ); rejectedConnection( ); } /** * Connecting to rejecting application */ public void rejectedConnection ( ) { System.out.println( System.currentTimeMillis( ) + " SSConnection.rejectedConnection " ); client.call( "log" , new Wrapper( "Connecting to rejecting application" ) ); EventListener statusListener = new EventListener ( ) { public void onEvent ( StatusEvent eventX ) { onRejectedConnection( eventX ); } }; WrapperList arguments = new WrapperList( ); arguments.add( "CSConnection" ); arguments.add( "reject" ); testedClient = new Client( application ); testedClient.addStatusEventListener( statusListener ); testedClient.connect( "rtmp://" + url + "/fake" , arguments ); } /** * Status for rejected connnection * @param eventX event */ public void onRejectedConnection ( StatusEvent eventX ) { System.out.println( System.currentTimeMillis( ) + " SSConnection.onRejectedConnection " + eventX.code ); if ( eventX.code.equals( StatusEvent.REJECTION ) ) { client.call( "log" , new Wrapper( "Status: " + eventX.code + " application: " + eventX.info.getString( "application" ) ) ); client.call( "log" , new Wrapper( "SUCCESS" ) ); } else { client.call( "log" , new Wrapper( "Status: " + eventX.code ) ); client.call( "log" , new Wrapper( "FAILED" ) ); } testedClient.addStatusEventListener( null ); acceptedConnection( ); } /** * Connecting to accepting application */ public void acceptedConnection ( ) { System.out.println( System.currentTimeMillis( ) + " SSConnection.acceptedConnection " ); client.call( "log" , new Wrapper( "Connecting to accepting application" ) ); EventListener statusListener = new EventListener ( ) { public void onEvent ( StatusEvent eventX ) { onAcceptedConnection( eventX ); } }; WrapperList arguments = new WrapperList( ); arguments.add( "CSConnection" ); arguments.add( "accept" ); testedClient = new Client( application ); testedClient.addStatusEventListener( statusListener ); testedClient.connect( "rtmp://" + url + "/milgraunit" , arguments ); } /** * Status for accepted connection * @param eventX event */ public void onAcceptedConnection ( StatusEvent eventX ) { System.out.println( System.currentTimeMillis( ) + " SSConnection.onAcceptedConnection " + eventX.code ); if ( eventX.code.equals( StatusEvent.SUCCESS ) ) { client.call( "log" , new Wrapper( "Status: " + eventX.code + " application: " + eventX.info.getString( "application" ) ) ); client.call( "log" , new Wrapper( "SUCCESS" ) ); } else { client.call( "log" , new Wrapper( "Status: " + eventX.code ) ); client.call( "log" , new Wrapper( "FAILED" ) ); } testedClient.addStatusEventListener( null ); closedConnection( ); } /** * Closing connecting */ public void closedConnection ( ) { System.out.println( System.currentTimeMillis( ) + " SSConnection.closedConnection " ); EventListener statusListener = new EventListener ( ) { public void onEvent ( StatusEvent eventX ) { onClosedConnection( eventX ); } }; client.call( "log" , new Wrapper( "Closing connection" ) ); testedClient.addStatusEventListener( statusListener ); testedClient.call( "disconnect" ); } /** * Status for closed connection * @param eventX */ public void onClosedConnection ( StatusEvent eventX ) { System.out.println( System.currentTimeMillis( ) + " SSConnection.onClosedConnection " + eventX.code ); client.call( "log" , new Wrapper( "Status: " + eventX.code ) ); if ( eventX.code.equals( StatusEvent.CLOSURE ) ) client.call( "log" , new Wrapper( "SUCCESS" ) ); else client.call( "log" , new Wrapper( "FAILED" ) ); testedClient.addStatusEventListener( null ); client.call( "log" , new Wrapper( "Finished testedClienting." ) ); } }