/* 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; /** SSData class @mail milgra@milgra.com @author Milan Toth @version 20080316 Tasks of sSData - testedClient every possible data transfer mode **/ import com.milgra.server.api.Client; import com.milgra.server.api.Wrapper; import com.milgra.server.api.WrapperMap; import com.milgra.server.api.WrapperList; import com.milgra.server.api.StatusEvent; import com.milgra.server.api.InvokeEvent; import com.milgra.server.api.IApplication; import com.milgra.server.api.EventListener; public class SSData implements IModule { // url - url of remote server // client - controller client // testedClient - // application - mother applicaiton public String url; public Client client; public Client testedClient; public IApplication application; // test variables public Double testedClientNumber; public String testedClientString; public WrapperMap testedClientObject; public WrapperList testedClientArray; /** * SSData constructor * @param applicationX mother application */ public SSData ( IApplication applicationX ) { System.out.println( System.currentTimeMillis( ) + " SSData.construct " + applicationX ); application = applicationX; } /** * Closes module **/ public void onLeave ( Client clientX ) { System.out.println( System.currentTimeMillis( ) + " CSConnection.onClose " ); } /** * Client entering point * @param clientX client * @param argumentsX arguments */ public void onEnter ( Client clientX , WrapperList argumentsX ) { System.out.println( System.currentTimeMillis( ) + " SSData.onEnter " + clientX + " " + argumentsX ); EventListener invokeListener = new EventListener ( ) { public void onEvent ( InvokeEvent eventX ) { onInvoke( eventX ); } }; EventListener statusListener = new EventListener ( ) { public void onEvent ( StatusEvent eventX ) { onStatus( eventX ); } }; url = argumentsX.getString( 1 ); client = clientX; client.accept( ); client.call( "log" , new Wrapper( "Connection... " ) ); // init remote client testedClient = new Client( application ); testedClient.addStatusEventListener( statusListener ); testedClient.addInvokeEventListener( invokeListener ); testedClient.connect( "rtmp://" + url + "/milgraunit" , new Wrapper( "CSData" ) ); } /** * Connection status of remote client * @param eventX event */ public void onStatus ( StatusEvent eventX ) { System.out.println( System.currentTimeMillis( ) + " SSData.onStatus " + eventX ); client.call( "log" , new Wrapper( "Status: " + eventX.code ) ); // start with empty call if ( eventX.code.equals( StatusEvent.SUCCESS ) ) emptyCall( ); } /** * Empty call on remote server */ public void emptyCall ( ) { System.out.println( System.currentTimeMillis( ) + " SSData.emptyCall " ); client.call( "log" , new Wrapper( "Empty call on remote" ) ); testedClient.call( "emptyCall" ); } /** * Null call on remote */ public void nullCall ( ) { System.out.println( System.currentTimeMillis( ) + " SSData.nullCall " ); client.call( "log" , new Wrapper( "Null call on remote" ) ); testedClient.call( "nullCall" , new Wrapper( ) ); } /** * Number call on remote */ public void numberCall ( ) { System.out.println( System.currentTimeMillis( ) + " SSData.numberCall " ); testedClientNumber = Math.random( ); testedClient.call( "numberCall" , new Wrapper( testedClientNumber ) ); client.call( "log" , new Wrapper( "Number call on remote : " + testedClientNumber ) ); } /** * Boolean call on remote */ public void booleanCall ( ) { System.out.println( System.currentTimeMillis( ) + " SSData.booleanCall " ); client.call( "log" , new Wrapper( "Boolean call on remote : " + true ) ); testedClient.call( "booleanCall" , new Wrapper( true ) ); } /** * String call on remote */ public void stringCall ( ) { System.out.println( System.currentTimeMillis( ) + " SSData.numberCall " ); testedClientString = "azipafaipapipipapapifapipa"; testedClient.call( "stringCall" , new Wrapper( testedClientString ) ); client.call( "log" , new Wrapper( "String call on remote : " + testedClientString ) ); } /** * Array call on remote */ public void arrayCall ( ) { System.out.println( System.currentTimeMillis( ) + " SSData.arrayCall " ); testedClientArray = new WrapperList( ); testedClientArray.add( true ); testedClientArray.add( 23423.2 ); testedClient.call( "arrayCall" , new Wrapper( testedClientArray ) ); client.call( "log" , new Wrapper( "Array call on remote : " + testedClientArray ) ); } /** * Object call on remote */ public void objectCall ( ) { System.out.println( System.currentTimeMillis( ) + " SSData.objectCall " ); testedClientObject = new WrapperMap( ); testedClientObject.put( "bool" , true ); testedClientObject.put( "num" , 23423.2 ); client.call( "log" , new Wrapper( "Array call on remote : " + testedClientObject ) ); testedClient.call( "objectCall" , new Wrapper( testedClientObject ) ); } /** * Invoke from remote server * @param eventX invoke event */ public void onInvoke ( InvokeEvent eventX ) { System.out.println( System.currentTimeMillis( ) + " SSData.onInvoke " + eventX.id ); if ( eventX.id.equals( "onEmptyCall" ) ) { client.call( "log" , new Wrapper( "Empty call on local " ) ); client.call( "log" , new Wrapper( "SUCCESS" ) ); nullCall( ); } if ( eventX.id.equals( "onNullCall" ) ) { client.call( "log" , new Wrapper( "Null call on local " + eventX.arguments.get( 0 ).type ) ); if ( eventX.arguments.get( 0 ).type == Wrapper.NULL ) client.call( "log" , new Wrapper( "SUCCESS" ) ); else client.call( "log" , new Wrapper( "FAILURE" ) ); numberCall( ); } if ( eventX.id.equals( "onNumberCall" ) ) { client.call( "log" , new Wrapper( "Number call on local " + eventX.arguments.getDouble( 0 ) ) ); if ( eventX.arguments.getDouble( 0 ) == testedClientNumber ) client.call( "log" , new Wrapper( "SUCCESS" ) ); else client.call( "log" , new Wrapper( "FAILURE" ) ); booleanCall( ); } if ( eventX.id.equals( "onBooleanCall" ) ) { client.call( "log" , new Wrapper( "Boolean call on local " + eventX.arguments.getBoolean( 0 ) ) ); if ( eventX.arguments.getBoolean( 0 ) == true ) client.call( "log" , new Wrapper( "SUCCESS" ) ); else client.call( "log" , new Wrapper( "FAILURE" ) ); stringCall( ); } if ( eventX.id.equals( "onStringCall" ) ) { client.call( "log" , new Wrapper( "String call on local " + eventX.arguments.getString( 0 )) ); if ( eventX.arguments.getString( 0 ).equals( testedClientString ) ) client.call( "log" , new Wrapper( "SUCCESS" ) ); else client.call( "log" , new Wrapper( "FAILURE" ) ); arrayCall( ); } if ( eventX.id.equals( "onArrayCall" ) ) { client.call( "log" , new Wrapper( "Array call on local " + eventX.arguments.getList( 0 ).size( ) ) ); if ( eventX.arguments.getList( 0 ).size( ) == testedClientArray.size( ) ) client.call( "log" , new Wrapper( "SUCCESS" ) ); else client.call( "log" , new Wrapper( "FAILURE" ) ); objectCall( ); } if ( eventX.id.equals( "onObjectCall" ) ) { client.call( "log" , new Wrapper( "Object call on local " + eventX.arguments.getMap( 0 ).size( ) ) ); if ( eventX.arguments.getMap( 0 ).size( ) == testedClientObject.size( ) ) client.call( "log" , new Wrapper( "SUCCESS" ) ); else client.call( "log" , new Wrapper( "FAILURE" ) ); client.call( "log" , new Wrapper( "Finished testing." ) ); } } }