// $Id$ // // Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you 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. // using System; using Org.Apache.Etch.Bindings.Csharp.Msg; using Org.Apache.Etch.Bindings.Csharp.Support; using Org.Apache.Etch.Bindings.Csharp.Util; namespace etch.tests { public class MyCuaeServerStub : StubBase { static MyCuaeServerStub() { StubHelperRun helper1 = delegate(DeliveryService _src, object obj, Who _sender, Message _msg) { MyCuaeServerImpl impl = (MyCuaeServerImpl)obj; impl.dispatch(_sender,_msg); }; // MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_CuaeServer_doit.SetStubHelper(new StubHelper(helper1, StubHelper.AsyncMode.NONE)); // MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_CuaeServer_doit3.SetStubHelper(new StubHelper(helper1, StubHelper.AsyncMode.NONE)); MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_CuaeServer_doit.SetStubHelper(helper1); MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_CuaeServer_doit3.SetStubHelper(helper1); } public MyCuaeServerStub(DeliveryService svc, Pool queued, Pool free, MyValueFactoryCuae vf) : base(svc, new MyCuaeServerImpl(svc, vf), queued, free) { } public class MyCuaeServerImpl { /** * @param svc * @param vf */ public MyCuaeServerImpl(DeliveryService svc, MyValueFactoryCuae vf) { this.svc = svc; this.vf = vf; } private DeliveryService svc; private MyValueFactoryCuae vf; /** * Handle messages from peer. * @param sender * @param msg * @throws Exception */ public void dispatch(Who sender, Message msg) { Console.WriteLine("msg = " + msg); if (msg.IsType(MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_CuaeServer_doit)) { StructValue req = (StructValue)msg.Get(MyValueFactoryCuae._mf_req); MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_Cuae_Request.CheckIsAssignableFrom(req.GetXType); int? code = (int?)req.Get(MyValueFactoryCuae._mf_code); // String m; StructValue resp; switch (code.GetValueOrDefault()) { case 23: resp = new StructValue(MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_Cuae_Response, vf); resp.Add(MyValueFactoryCuae._mf_msg,"foo"); delayDoit2a(7); break; case 19: resp = new StructValue( MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_Cuae_RespWithCode, vf); resp.Add(MyValueFactoryCuae._mf_msg, "bar"); resp.Add(MyValueFactoryCuae._mf_code, 54); delayDoit2b(11,"heaven"); break; case 13: resp = new StructValue(MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_Cuae_Response, vf); resp.Add(MyValueFactoryCuae._mf_msg, "baz"); delayDoit2a(99); break; default: resp = new StructValue( MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_Cuae_RespWithCode, vf); resp.Add(MyValueFactoryCuae._mf_msg, " unknown code " + code); resp.Add(MyValueFactoryCuae._mf_code, 63); delayDoit2b(23, "killer bee"); break; } Message rmsg = msg.Reply(); Console.WriteLine("rmsg = " + rmsg); Console.WriteLine("resp = " + resp); rmsg.Add(MyValueFactoryCuae._mf_result, resp); svc.TransportMessage(sender,rmsg); return; } if (msg.IsType(MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_CuaeServer_doit3)) { StructValue[] reqs = (StructValue[]) msg.Get(MyValueFactoryCuae._mf_req); StructValue req = reqs[0]; MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_Cuae_Request.CheckIsAssignableFrom( req.GetXType); int? code = (int?) req.Get(MyValueFactoryCuae._mf_code); StructValue resp; switch (code.GetValueOrDefault()) { case 23: resp = new StructValue(MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_Cuae_Response, vf); resp.Add(MyValueFactoryCuae._mf_msg, "foo"); delayDoit2a(7); break; case 19: resp = new StructValue(MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_Cuae_RespWithCode, vf); resp.Add( MyValueFactoryCuae._mf_msg, "bar" ); resp.Add( MyValueFactoryCuae._mf_code, 54 ); delayDoit2b( 11, "heaven" ); break; case 13: resp = new StructValue(MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_Cuae_Response, vf); resp.Add(MyValueFactoryCuae._mf_msg, "baz"); delayDoit2a(99); break; default: resp = new StructValue(MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_Cuae_RespWithCode, vf); resp.Add( MyValueFactoryCuae._mf_msg, "unknown code " + code ); resp.Add( MyValueFactoryCuae._mf_code, 63 ); delayDoit2b( 23, "killer bee" ); break; } Message rmsg = msg.Reply(); Console.WriteLine("rmsg = " + rmsg); Console.WriteLine("resp = " + resp); rmsg.Add(MyValueFactoryCuae._mf_result, new StructValue[] { resp }); svc.TransportMessage(sender,rmsg); return; } throw new Exception("unknown msg type " + msg); } private void delayDoit2a(int code) { try { TodoManager.AddTodo(new ToDoObj(svc,vf,code)); } catch (Exception e) { Console.WriteLine(e); } } private void delayDoit2b(int code, string msg) { try { TodoManager.AddTodo(new ToDoObj1(svc, vf, code,msg)); } catch (Exception e) { Console.WriteLine(e); } } } } public class ToDoObj : Todo { private DeliveryService svc; private MyValueFactoryCuae vf; private int code; public ToDoObj(DeliveryService svc, MyValueFactoryCuae vf, int code) { this.svc = svc; this.vf = vf; this.code = code; } public void Doit( TodoManager mgr ) { StructValue req = new StructValue(MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_Cuae_Request, vf); req.Add( MyValueFactoryCuae._mf_code, code ); Message msg = new Message( MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_CuaeClient_doit2, vf ); msg.Add( MyValueFactoryCuae._mf_req, req ); Mailbox mb = svc.BeginCall( msg ); Object value = svc.EndCall( mb, MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_CuaeServer__result_doit2 ); if (value is Exception) { Exception e = (Exception) value; throw e; } StructValue resp = (StructValue) value; // resp.CheckType( MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_Cuae_Response ); MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_Cuae_Response.CheckIsAssignableFrom(resp.GetXType); Console.WriteLine( "**** delayDoit2a: req {0} response {1}\n", code, resp ); // String m = (String) resp.Get( MyValueFactoryCuae._mf_msg ); } public void Exception( TodoManager mgr, Exception e ) { Console.WriteLine(e); } } public class ToDoObj1 : Todo { private DeliveryService svc; private MyValueFactoryCuae vf; private int code; private string message; public ToDoObj1(DeliveryService svc, MyValueFactoryCuae vf, int code, string msg) { this.svc = svc; this.vf = vf; this.code = code; this.message = msg; } public void Doit(TodoManager mgr) { StructValue req = new StructValue(MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_Cuae_ReqWithMessage, vf); req.Add(MyValueFactoryCuae._mf_code, code); req.Add(MyValueFactoryCuae._mf_msg, message); Message msg = new Message(MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_CuaeClient_doit2, vf); msg.Add(MyValueFactoryCuae._mf_req, req); Mailbox mb = svc.BeginCall(msg); Object value = svc.EndCall(mb, MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_CuaeServer__result_doit2 ); if (value is Exception) { Exception e = (Exception)value; throw e; } StructValue resp = (StructValue)value; // resp.CheckType( MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_Cuae_Response ); MyValueFactoryCuae._mt_etch_bindings_csharp_examples_cuae_Cuae_Response.CheckIsAssignableFrom(resp.GetXType); Console.WriteLine("**** delayDoit2b: req {0} response {1}\n", code, resp); // String m = (String) resp.Get( MyValueFactoryCuae._mf_msg ); } public void Exception(TodoManager mgr, Exception e) { Console.WriteLine(e); } } }