diff options
Diffstat (limited to 'csharp/test/Ice/echo/BlobjectI.cs')
-rw-r--r-- | csharp/test/Ice/echo/BlobjectI.cs | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/csharp/test/Ice/echo/BlobjectI.cs b/csharp/test/Ice/echo/BlobjectI.cs new file mode 100644 index 00000000000..64ba120e2be --- /dev/null +++ b/csharp/test/Ice/echo/BlobjectI.cs @@ -0,0 +1,116 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Threading; +using Test; + +public class BlobjectI : Ice.BlobjectAsync +{ + + private class Callback + { + public Callback(Ice.AMD_Object_ice_invoke cb, bool twoway) + { + _cb = cb; + _twoway = twoway; + } + + public void response(bool ok, byte[] encaps) + { + _cb.ice_response(ok, encaps); + } + + public void exception(Ice.Exception ex) + { + _cb.ice_exception(ex); + } + + public void sent(bool sync) + { + if(!_twoway) + { + _cb.ice_response(true, new byte[0]); + } + } + + private Ice.AMD_Object_ice_invoke _cb; + private bool _twoway; + } + + public void startBatch() + { + Debug.Assert(_batchProxy != null); + _startBatch = true; + } + + public void flushBatch() + { + Debug.Assert(_batchProxy != null); + _batchProxy.ice_flushBatchRequests(); + _batchProxy = null; + } + + public override void + ice_invoke_async(Ice.AMD_Object_ice_invoke amdCb, byte[] inEncaps, Ice.Current current) + { + bool twoway = current.requestId > 0; + Ice.ObjectPrx obj = current.con.createProxy(current.id); + if(!twoway) + { + if(_startBatch) + { + _startBatch = false; + _batchProxy = obj.ice_batchOneway(); + } + if(_batchProxy != null) + { + obj = _batchProxy; + } + + if(current.facet.Length != 0) + { + obj = obj.ice_facet(current.facet); + } + + if(_batchProxy != null) + { + byte[] outEncaps; + obj.ice_invoke(current.operation, current.mode, inEncaps, out outEncaps, current.ctx); + amdCb.ice_response(true, new byte[0]); + } + else + { + Callback cb = new Callback(amdCb, false); + obj.ice_oneway().begin_ice_invoke(current.operation, + current.mode, + inEncaps, + current.ctx).whenCompleted(cb.response, cb.exception) + .whenSent(cb.sent); + } + } + else + { + if(current.facet.Length != 0) + { + obj = obj.ice_facet(current.facet); + } + Callback cb = new Callback(amdCb, true); + obj.begin_ice_invoke(current.operation, + current.mode, + inEncaps, + current.ctx).whenCompleted(cb.response, cb.exception).whenSent(cb.sent); + } + } + + private Ice.ObjectPrx _batchProxy; + private bool _startBatch; +} |