summaryrefslogtreecommitdiff
path: root/csharp/test/Ice/echo/BlobjectI.cs
diff options
context:
space:
mode:
Diffstat (limited to 'csharp/test/Ice/echo/BlobjectI.cs')
-rw-r--r--csharp/test/Ice/echo/BlobjectI.cs116
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;
+}