Example #1
0
        public bool MoveNext()
        {
            var ms = new MemoryStream();
            var bw = new BinaryWriter(ms);

            bw.Write((byte)CallMethod.IteratorNext);
            bw.Write(_enumerator.Target);
            bw.Flush();

            var res     = _connector.SendMessage(ms);
            var resCall = res.ReadBoolean();

            if (!resCall)
            {
                throw new Exception(res.ReadString());
            }

            var resNext = res.ReadBoolean();

            if (!resNext)
            {
                GC.SuppressFinalize(_enumerator);
                return(false);
            }

            Current = WorkVariants.GetObject(res, _connector);
            return(true);
        }
Example #2
0
        internal static bool GetResultWithChangeParams(BinaryReader res, ref object result, TcpConnector connector,
                                                       object[] args, int offset = 0)
        {
            if (!GetResult(res, ref result, connector))
            {
                return(false);
            }
            var count = res.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                var    index = res.ReadInt32();                        // Получим индекс измененного параметра
                object value = WorkVariants.GetObject(res, connector); // Получим значение измененного параметра

                // args[index + offset]= value;// Установим нужный параметр, для Generic методов с 0 индексом идет тип аргументов

                // Вариант с  RefParam
                object param = args[index + offset];
                if (param != null && param is RefParam refParam)
                {
                    refParam.Value = value;
                }
            }

            return(true);
        }
Example #3
0
        internal static bool GetResult(BinaryReader res, ref object result, TcpConnector connector)
        {
            var resRun      = res.ReadBoolean();
            var returnValue = WorkVariants.GetObject(res, connector);

            if (!resRun)
            {
                if (returnValue != null && returnValue is string stringValue)
                {
                    connector.LastError = stringValue;
                }
                return(false);
            }

            result = returnValue;
            return(true);
        }