public TR InObjectStreamOutObjectStream <TR>(int type, Action <IBinaryStream> writeAction, Func <IBinaryStream, IPlatformTargetInternal, TR> readAction, IPlatformTargetInternal arg) { PlatformMemoryStream outStream = null; long outPtr = 0; PlatformMemoryStream inStream = null; long inPtr = 0; try { if (writeAction != null) { outStream = IgniteManager.Memory.Allocate().GetStream(); writeAction(outStream); outPtr = outStream.SynchronizeOutput(); } if (readAction != null) { inStream = IgniteManager.Memory.Allocate().GetStream(); inPtr = inStream.MemoryPointer; } var res = UU.TargetInObjectStreamOutObjectStream(_target, type, ((PlatformJniTarget)arg).Target, outPtr, inPtr); if (readAction == null) { return(default(TR)); } inStream.SynchronizeInput(); var target = res == null ? null : new PlatformJniTarget(res, _marsh); return(readAction(inStream, target)); } catch (JavaException jex) { throw ConvertException(jex); } finally { try { if (inStream != null) { inStream.Dispose(); } } finally { if (outStream != null) { outStream.Dispose(); } } } }
/** <inheritdoc /> */ public Task <T> DoOutOpAsync <T>(int type, Action <IBinaryRawWriter> writeAction, Func <IBinaryRawReader, T> readAction, CancellationToken cancellationToken) { var convertFunc = readAction != null ? r => readAction(r) : (Func <BinaryReader, T>)null; return(GetFuture((futId, futType) => { using (var stream = IgniteManager.Memory.Allocate().GetStream()) { stream.WriteLong(futId); stream.WriteInt(futType); if (writeAction != null) { var writer = _marsh.StartMarshal(stream); writeAction(writer); FinishMarshal(writer); } try { return UU.TargetInStreamOutObjectAsync(_target, type, stream.SynchronizeOutput()); } catch (JavaException jex) { throw ConvertException(jex); } } }, false, convertFunc).GetTask(cancellationToken)); }
public T InStreamOutStream <T>(int type, Action <IBinaryRawWriter> writeAction, Func <IBinaryRawReader, T> readAction) { try { using (var outStream = IgniteManager.Memory.Allocate().GetStream()) using (var inStream = IgniteManager.Memory.Allocate().GetStream()) { var writer = _marsh.StartMarshal(outStream); writeAction(writer); FinishMarshal(writer); UU.TargetInStreamOutStream(_target, type, outStream.SynchronizeOutput(), inStream.MemoryPointer); inStream.SynchronizeInput(); return(readAction(_marsh.StartUnmarshal(inStream))); } } catch (JavaException jex) { throw ConvertException(jex); } }
/** <inheritdoc /> */ public TR InStreamOutStream <TR>(int type, Action <IBinaryStream> writeAction, Func <IBinaryStream, TR> readAction, Func <Exception, TR> errorAction = null) { try { using (var outStream = IgniteManager.Memory.Allocate().GetStream()) using (var inStream = IgniteManager.Memory.Allocate().GetStream()) { writeAction(outStream); UU.TargetInStreamOutStream(_target, type, outStream.SynchronizeOutput(), inStream.MemoryPointer); inStream.SynchronizeInput(); return(readAction(inStream)); } } catch (JavaException jex) { if (errorAction != null) { return(errorAction.Invoke(ConvertException(jex))); } throw ConvertException(jex); } }
/** <inheritdoc /> */ public TR InStreamOutLong <TR>(int type, Action <IBinaryStream> outAction, Func <IBinaryStream, long, TR> inAction, Func <IBinaryStream, Exception> readErrorAction) { try { Debug.Assert(readErrorAction != null); using (var stream = IgniteManager.Memory.Allocate().GetStream()) { outAction(stream); var res = UU.TargetInStreamOutLong(_target, type, stream.SynchronizeOutput()); if (res != PlatformTargetAdapter.Error && inAction == null) { return(default(TR)); // quick path for void operations } stream.SynchronizeInput(); stream.Seek(0, SeekOrigin.Begin); if (res != PlatformTargetAdapter.Error) { return(inAction != null?inAction(stream, res) : default(TR)); } throw readErrorAction(stream); } } catch (JavaException jex) { throw ConvertException(jex); } }
/** <inheritdoc /> */ public T InObjectStreamOutObjectStream <T>(int type, IPlatformTarget arg, Action <IBinaryRawWriter> writeAction, Func <IBinaryRawReader, IPlatformTarget, T> readAction) { PlatformMemoryStream outStream = null; long outPtr = 0; PlatformMemoryStream inStream = null; long inPtr = 0; try { if (writeAction != null) { outStream = IgniteManager.Memory.Allocate().GetStream(); var writer = _marsh.StartMarshal(outStream); writeAction(writer); FinishMarshal(writer); outPtr = outStream.SynchronizeOutput(); } if (readAction != null) { inStream = IgniteManager.Memory.Allocate().GetStream(); inPtr = inStream.MemoryPointer; } var res = UU.TargetInObjectStreamOutObjectStream(_target, type, GetTargetPtr(arg), outPtr, inPtr); if (readAction == null) { return(default(T)); } inStream.SynchronizeInput(); return(readAction(_marsh.StartUnmarshal(inStream), GetPlatformTarget(res))); } catch (JavaException jex) { throw ConvertException(jex); } finally { try { if (inStream != null) { inStream.Dispose(); } } finally { if (outStream != null) { outStream.Dispose(); } } } }
/** <inheritdoc /> */ public long InLongOutLong(int type, long val) { try { return(UU.TargetInLongOutLong(_target, type, val)); } catch (JavaException jex) { throw ConvertException(jex); } }
/** <inheritdoc /> */ public IPlatformTargetInternal OutObjectInternal(int type) { try { return(GetPlatformTarget(UU.TargetOutObject(_target, type))); } catch (JavaException jex) { throw ConvertException(jex); } }
/** <inheritdoc /> */ public long InStreamOutLong(int type, Action <IBinaryStream> writeAction) { try { using (var stream = IgniteManager.Memory.Allocate().GetStream()) { writeAction(stream); return(UU.TargetInStreamOutLong(_target, type, stream.SynchronizeOutput())); } } catch (JavaException jex) { throw ConvertException(jex); } }
public T OutStream <T>(int type, Func <IBinaryRawReader, T> readAction) { try { using (var stream = IgniteManager.Memory.Allocate().GetStream()) { UU.TargetOutStream(_target, type, stream.MemoryPointer); stream.SynchronizeInput(); return(readAction(_marsh.StartUnmarshal(stream))); } } catch (JavaException jex) { throw ConvertException(jex); } }
/** <inheritdoc /> */ public IPlatformTargetInternal InStreamOutObject(int type, Action <IBinaryStream> writeAction) { try { using (var stream = IgniteManager.Memory.Allocate().GetStream()) { writeAction(stream); var target = UU.TargetInStreamOutObject(_target, type, stream.SynchronizeOutput()); return(target == null ? null : new PlatformJniTarget(target, _marsh)); } } catch (JavaException jex) { throw ConvertException(jex); } }
public IPlatformTarget InStreamOutObject(int type, Action <IBinaryRawWriter> writeAction) { try { using (var stream = IgniteManager.Memory.Allocate().GetStream()) { var writer = _marsh.StartMarshal(stream); writeAction(writer); FinishMarshal(writer); return(GetPlatformTarget(UU.TargetInStreamOutObject(_target, type, stream.SynchronizeOutput()))); } } catch (JavaException jex) { throw ConvertException(jex); } }