/* $Id: MyCuaeServerStub.java 712730 2008-07-29 06:31:55Z jadixson $
*
* Copyright 2007-2008 Cisco Systems Inc.
*
* 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 etch.tests;
import etch.bindings.java.msg.Message;
import etch.bindings.java.msg.StructValue;
import etch.bindings.java.support.DeliveryService;
import etch.bindings.java.support.Mailbox;
import etch.bindings.java.support.ObjSession;
import etch.bindings.java.support.Pool;
import etch.bindings.java.support.StubBase;
import etch.bindings.java.support.StubHelper;
import etch.util.Todo;
import etch.util.TodoManager;
import etch.util.core.Who;
/**
* Hand-built CuaeServerStub which dispatches to our raw impl.
*/
public class MyCuaeServerStub extends StubBase<Object>
{
static
{
StubHelper<MyCuaeServerImpl> syncHelper = new StubHelper<MyCuaeServerImpl>()
{
@Override
public void run( DeliveryService svc, MyCuaeServerImpl obj, Who sender, Message msg ) throws Exception
{
obj.dispatch( sender, msg );
}
};
MyValueFactoryCuae._mt_etch_examples_cuae_CuaeServer_doit1
.setStubHelper( syncHelper );
MyValueFactoryCuae._mt_etch_examples_cuae_CuaeServer_test1
.setStubHelper( syncHelper );
MyValueFactoryCuae._mt_etch_examples_cuae_Cuae_doit3
.setStubHelper( syncHelper );
MyValueFactoryCuae._mt_etch_examples_cuae_Cuae_doit4
.setStubHelper( syncHelper );
MyValueFactoryCuae._mt_etch_examples_cuae_Cuae_test3
.setStubHelper( syncHelper );
}
/**
* Constructs MyCuaeServerStub.
* @param svc
* @param queued
* @param free
* @param vf
*/
public MyCuaeServerStub( DeliveryService svc, Pool queued, Pool free,
MyValueFactoryCuae vf )
{
super( svc, new MyCuaeServerImpl( svc, vf ), queued, free );
}
/**
* Hand-build CuaeServerImpl which is sent messages from CuaeServerStub.
*/
public static class MyCuaeServerImpl implements ObjSession
{
/**
* @param svc
* @param vf
*/
public MyCuaeServerImpl( DeliveryService svc, MyValueFactoryCuae vf )
{
this.svc = svc;
this.vf = vf;
}
/** */
final DeliveryService svc;
/** */
final MyValueFactoryCuae vf;
/**
* Handle messages from peer.
* @param sender
* @param msg
* @throws Exception
*/
public void dispatch( Who sender, Message msg ) throws Exception
{
System.out.println( "msg = "+msg );
if (msg.isType( MyValueFactoryCuae._mt_etch_examples_cuae_CuaeServer_doit1 ))
{
StructValue req = (StructValue) msg.get( MyValueFactoryCuae._mf_req );
MyValueFactoryCuae._mt_etch_examples_cuae_Cuae_Request.checkIsAssignableFrom( req.type() );
int code = (Integer) req.get( MyValueFactoryCuae._mf_code );
StructValue resp;
switch (code)
{
case 23:
resp = new StructValue( MyValueFactoryCuae._mt_etch_examples_cuae_Cuae_Response, vf );
resp.put( MyValueFactoryCuae._mf_msg, "foo" );
delayDoit2a( 7 );
break;
case 19:
resp = new StructValue( MyValueFactoryCuae._mt_etch_examples_cuae_Cuae_RespWithCode, vf );
resp.put( MyValueFactoryCuae._mf_msg, "bar" );
resp.put( MyValueFactoryCuae._mf_code, 54 );
delayDoit2b( 11, "heaven" );
break;
case 13:
resp = new StructValue( MyValueFactoryCuae._mt_etch_examples_cuae_Cuae_Response, vf );
resp.put( MyValueFactoryCuae._mf_msg, "baz" );
delayDoit2a( 99 );
break;
default:
resp = new StructValue( MyValueFactoryCuae._mt_etch_examples_cuae_Cuae_RespWithCode, vf );
resp.put( MyValueFactoryCuae._mf_msg, "unknown code " + code );
resp.put( MyValueFactoryCuae._mf_code, 63 );
delayDoit2b( 23, "killer bee" );
break;
}
Message rmsg = msg.reply();
System.out.println( "rmsg = "+rmsg );
System.out.println( "resp = "+resp );
rmsg.put( MyValueFactoryCuae._mf_result, resp );
svc.transportMessage( sender, rmsg );
return;
}
if (msg.isType( MyValueFactoryCuae._mt_etch_examples_cuae_Cuae_doit3 ))
{
StructValue[] reqs = (StructValue[]) msg.get( MyValueFactoryCuae._mf_req );
StructValue req = reqs[0];
MyValueFactoryCuae._mt_etch_examples_cuae_Cuae_Request.checkIsAssignableFrom( req.type() );
int code = (Integer) req.get( MyValueFactoryCuae._mf_code );
StructValue resp;
switch (code)
{
case 23:
resp = new StructValue( MyValueFactoryCuae._mt_etch_examples_cuae_Cuae_Response, vf );
resp.put( MyValueFactoryCuae._mf_msg, "foo" );
delayDoit2a( 7 );
break;
case 19:
resp = new StructValue( MyValueFactoryCuae._mt_etch_examples_cuae_Cuae_RespWithCode, vf );
resp.put( MyValueFactoryCuae._mf_msg, "bar" );
resp.put( MyValueFactoryCuae._mf_code, 54 );
delayDoit2b( 11, "heaven" );
break;
case 13:
resp = new StructValue( MyValueFactoryCuae._mt_etch_examples_cuae_Cuae_Response, vf );
resp.put( MyValueFactoryCuae._mf_msg, "baz" );
delayDoit2a( 99 );
break;
default:
resp = new StructValue( MyValueFactoryCuae._mt_etch_examples_cuae_Cuae_RespWithCode, vf );
resp.put( MyValueFactoryCuae._mf_msg, "unknown code " + code );
resp.put( MyValueFactoryCuae._mf_code, 63 );
delayDoit2b( 23, "killer bee" );
break;
}
Message rmsg = msg.reply();
System.out.println( "rmsg = "+rmsg );
System.out.println( "resp = "+resp );
rmsg.put( MyValueFactoryCuae._mf_result, new StructValue[] { resp } );
svc.transportMessage( sender, rmsg );
return;
}
throw new IllegalArgumentException( "unknown msg type "+msg );
}
private void delayDoit2a( final int code )
{
try
{
TodoManager.addTodo( new Todo()
{
public void doit( TodoManager mgr ) throws Exception
{
StructValue req = new StructValue( MyValueFactoryCuae._mt_etch_examples_cuae_Cuae_Request, vf );
req.put( MyValueFactoryCuae._mf_code, code );
Message msg = new Message( MyValueFactoryCuae._mt_etch_examples_cuae_CuaeClient_doit2, vf );
msg.put( MyValueFactoryCuae._mf_req, req );
Mailbox mb = svc.begincall( msg );
Object value = svc.endcall( mb, MyValueFactoryCuae._mt_etch_examples_cuae_CuaeServer__result_doit2 );
if (value instanceof Exception)
{
Exception e = (Exception) value;
e.fillInStackTrace();
throw e;
}
StructValue resp = (StructValue) value;
MyValueFactoryCuae._mt_etch_examples_cuae_Cuae_Response.checkIsAssignableFrom( resp.type() );
System.out.printf( "**** delayDoit2a: req %d response %s\n", code, resp );
}
public void exception( TodoManager mgr, Exception e )
{
e.printStackTrace();
}
} );
}
catch ( Exception e )
{
e.printStackTrace();
}
}
private void delayDoit2b( final int code, final String message )
{
try
{
TodoManager.addTodo( new Todo()
{
public void doit( TodoManager mgr ) throws Exception
{
StructValue req = new StructValue( MyValueFactoryCuae._mt_etch_examples_cuae_Cuae_ReqWithMessage, vf );
req.put( MyValueFactoryCuae._mf_code, code );
req.put( MyValueFactoryCuae._mf_msg, message );
Message msg = new Message( MyValueFactoryCuae._mt_etch_examples_cuae_CuaeClient_doit2, vf );
msg.put( MyValueFactoryCuae._mf_req, req );
Mailbox mb = svc.begincall( msg );
Object value = svc.endcall( mb, MyValueFactoryCuae._mt_etch_examples_cuae_CuaeServer__result_doit2 );
if (value instanceof Exception)
{
Exception e = (Exception) value;
e.fillInStackTrace();
throw e;
}
StructValue resp = (StructValue) value;
MyValueFactoryCuae._mt_etch_examples_cuae_Cuae_Response.checkIsAssignableFrom( resp.type() );
System.out.printf( "**** delayDoit2b: req %d response %s\n", code, resp );
}
public void exception( TodoManager mgr, Exception e )
{
e.printStackTrace();
}
} );
}
catch ( Exception e )
{
e.printStackTrace();
}
}
public Object _sessionQuery( Object query ) throws Exception
{
throw new UnsupportedOperationException( "unknown query "+query );
}
public void _sessionControl( Object control, Object value )
throws Exception
{
throw new UnsupportedOperationException( "unknown control "+control );
}
public void _sessionNotify( Object event ) throws Exception
{
if (event instanceof Throwable)
((Throwable) event).printStackTrace();
}
}
}