예제 #1
0
        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();
                    }
                }
            }
        }
예제 #2
0
        /** <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));
        }
예제 #3
0
        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);
            }
        }
예제 #4
0
        /** <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);
            }
        }
예제 #6
0
        /** <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();
                    }
                }
            }
        }
예제 #7
0
 /** <inheritdoc /> */
 public long InLongOutLong(int type, long val)
 {
     try
     {
         return(UU.TargetInLongOutLong(_target, type, val));
     }
     catch (JavaException jex)
     {
         throw ConvertException(jex);
     }
 }
예제 #8
0
 /** <inheritdoc /> */
 public IPlatformTargetInternal OutObjectInternal(int type)
 {
     try
     {
         return(GetPlatformTarget(UU.TargetOutObject(_target, type)));
     }
     catch (JavaException jex)
     {
         throw ConvertException(jex);
     }
 }
예제 #9
0
        /** <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);
            }
        }
예제 #10
0
        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);
            }
        }
예제 #11
0
        /** <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);
            }
        }
예제 #12
0
        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);
            }
        }